家电维修班,手机维修班,电脑维修班,电工班,焊工班,液晶电视维修班,电动工具维修班、电动车摩托车维修班、网络营销培训、网站设计培训、淘宝培训---全国招生 家电维修班,手机维修班,电脑维修班,电工班,焊工班,液晶电视维修班,电动工具维修班、电动车摩托车维修班、网络营销培训、网站设计培训、淘宝培训---全国招生
阳光电影院· 地区招生平台· 知识库 · 维修资料查询 ·您想咨询招生情况,请联系我啊·您想咨询招生情况,请联系我啊·
当前位置:湖南阳光电子技术学校文章资讯显示器维修

湖南阳光电子技术学校 简介

学校地址:湖南省 长沙市 雨花区 车站南路红花坡路口
来校路线:长沙火车站售票厅后坪,乘135路公交车到“红花坡站”,即到.
学校电话:0731-85579057,0731-85569651
免费电话:0731-85579057
值班手机:(0)13807313137 杨老师
开课时间:我校常年面向全国招生,月月开班。每月1号,16号开学。
招生范围:凡年满15岁的公民,不限年龄,性别,地区。都欢迎来我校学习。
食宿问题:学校免费住宿,免费提供床上用品。食堂就餐,费用自理,约12元/天。
学校官网:www.hnygpx.net www.410014.com
专业介绍:欢迎查看我校专业课程!
收费标准:欢迎查看我校收费标准!
在线 Q Q:您想咨询招生情况,请联系我啊·您想咨询招生情况,请联系我啊
网上报名:欢迎您报读湖南阳光电子学校!


Windows CE跨进程内存注入的原理

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2011-05-03 11:40:00

  近日,由于程序设计需要,我对WincowsCE 的内存布局进行了研究,由于发现国内在这方面的文档资料较少,于是在研究告一段落之际,形成这篇示例文档,以望抛砖引玉,得到别的高手的指正。

  一、程序实现的先决条件

  由于Windows系统的窗体消息总是投递至一个特定进程的指定窗体消息函数中。于是在本地进程(自己的应用程序)中取得属于其它进程的窗体的消息必须实现以下两个部分:

  1、将需要挂接窗体的代码放到目标进程的地址空间中去。

  2、执行这一段代码,并获得目标进程窗体的消息。

  这两步看起来很简单,但在实现过程中就比较困难。由于Windows CE作为嵌入式移动设备操作系统,与Windows 98/2000/XP等桌面操作系统在内核的设计理念以及API的支持上有极大的区别。这就直接导致了常规的桌面系统利用全局鼠标钩子注入/远程线程注入等方法在CE中完全得不通。不过可喜的是,微软在开发工具中提供的remotexxx等远程调试程序使我清楚这个目标并不是不可能的任务,微软既然可以做到,那就是说在CE的内部一定有一套完整的跨进程内存访问/代码注入的机制。

  二、程序实现的基本原理

  经过两天的google 搜索,在网上我发现了一个没有在微软文档中声明的有趣的API函数:PerformCallBack4,传说中这个函数可以在自己的应用程序中执行指定的进程中的一个函数,So Cool!这好象正是我所需要的东西。虽然网上也传闻这个函数在wm5不受支持,其实经过实践这个传闻只是谣传而已!

  PerformCallBack4函数的定义:

  public static extern uint PerformCallBack4(ref CallBackInfo CallBackInfo,

  IntPtr ni_pVoid1,IntPtr ni_pVoid2,IntPtr ni_pVoid3);

  其中函数的参数CallBackInfo结构定义:

  public struct CallBackInfo

  {

  public IntPtr hProc; //远程的目标进程

  public IntPtr pfn; //指向远程目标进程的函数地址的指针

  public IntPtr pvArg0; //函数的需要的第一个参数

  }//end struct

  而PerformCallback4的 ni_pVoid1、ni_pVoid2、ni_pVoid3为传递到远程目标进程执行函数的其它三个参数。

  至于将代码放到目标进程的内存空间,我们可以利用CE设计上的一个特性:

  1、为了节约内存使用,CE将所有程序调用的动态链接库(DLL)都映射到同一个内存地址中。

  2、CE的内存布局中划分有一个slot0的内存位置,这个内存位置是由正在执行的进程所占有的,每一个特定的时间片,只能有一个进程可以占有这个内存空间。在进程要求执行时,系统并不直接执行进程所处内存位置的代码,而是将该进程的执行代码复制到slot0的内存位置中产生一个副本执行。也就是说进程在执行时内存将会有进程执行代码的两个完全一样的版本:存在于slot0中正在执行的进程代码和进程本身所处的内存中的代码。

  在这个特性下,可以得到结论:如果进程A通过LoadLibrary函数装载Test.dll,而进程B也通过LoadLibrary函数装载同一个Test.dll,这个Test.dll的所有函数在进程A和进程B中执行时,相对于slot0中的进程执行代码都会得到同一地址。

  3、在CE中,系统在内存中划分出33个slot,slot0保留给正在执行的进程,然后在进程启动时将所有的代码放到除slot0以外的一个slot中(这就是臭名昭著的CE系统中内存最多只能有不多于32个程序执行的限制的来由)。在进程执行时,每个应用程序的内存访问默认只能访问slot0内存空间中的地址以及进程所处的slot内存空间的地址。 但为使设备驱动程序可以访问到它们所需的其它应用程序数据,CE提供了两个函数以打破这个限制,SetKmode和SetProcPermission,SetKmode函数告诉系统,当前运行的进程是否需要在内核模式中执行;SetProcPermission函数可以接受一个位掩码,每一位代码一个slot的访问控制,1代表可以访问该slot的内存内容。0表示不能访问该slot的内存内容。这两个函数在msdn中有帮助文档,可参阅msdn的文档说明。

Tags:Windows CE 跨进程内存注入的原理

作者:佚名

网页说明

    Windows CE跨进程内存注入的原理这条信息,为您提供了中国最新最全的Windows CE跨进程内存注入的原理信息,欢迎您免费查看Windows CE跨进程内存注入的原理信息。如果您对Windows CE跨进程内存注入的原理这条消息有好的意见建议请联系我们,让我们一起进步!
  • 热门关键词:CPU(355)  维修(198)  彩电(172)  故障(143)  招生(109)  职业中专(105)  技工学校(104)  电脑(98)  机芯(93)  开县(91)  学校(88)  手机(87)  首选(65)  培训(65)  笔记本(60)  云阳(58)  学主板维修哪里最好(50)  学电脑硬件哪里最好(50)  检修(50)  MTK(43)  海尔(42)  东芝(40)  三极管(38)  硬盘(36)  模式(36)  三星(35)  液晶电视(35)  Vista(33)  工厂(33)  TCL(32)  Windows(31)  技术(31)  北京(30)  电子元件(30)  彩色(29)  BIOS(27)  电路(27)  开机(26)  win7(25)  电磁炉(25)