如何有效率的遍历其他进程内存空间?(100分)

  • 主题发起人 主题发起人 progray
  • 开始时间 开始时间
P

progray

Unregistered / Unconfirmed
GUEST, unregistred user!
我粗浅的知道点,任何进程都有4G的内存空间,如果要遍历某个进程的内存空间,<br>肯定不能从头搜到尾吧?那具体该如何做呢?最好代码示范,多谢。另外,<br>98和2K下有没有什么区别呢(我是指在遍历的时候)?
 
内存共享<br>自带的例子里面就有
 
哪里的例子有啊?内存共享?你说的和我问的好象不是一回事啊。
 
VirtualQueryEx<br>用法看帮助吧
 
为什么要遍历4G空间呢!<br>虽然应用程序有4G的虚拟空间,但没用到的空间是不会被分配内存的.<br>一访问,就会有内容错误发生的.<br>
 
我以前看过一篇关于解决该问题的文章,但当时根本没理解也没注意,现在怎么也想不起来<br>当时是在哪里看到的了。现在我想自己做个进程内存浏览器,只是出于学习的目的,但现在<br>对这方面的知识了解的很少,恳请各位指点,有相关知识的连接也好。多谢!<br>我现在知道了进程真正属于自己的私有空间只有2G,但对每个进程遍历2G的空间也是不现实<br>的啊。
 
以下是我粘的别人的,看能否有所帮助:<br><br>将线程映射到别的程序的地址空间里 &nbsp; &nbsp;<br>&nbsp; &nbsp; <br>你是问如何打破进程的边界吗?用远程线程注入DLL是一种方法,其他还有使用注册表,HOOK,以及一些WIN32函数,Jeffrey Richter的&lt;&lt;Windows高级编程指南&gt;&gt;详细讨论了这个问题,还有例子,你不妨参考一下这本书<br><br>16位WINDOWS操作系统所有进程运行在一个地址空间里,所以可以用SetWindowLong来把窗口的内存块中的窗口地址改为新的(你自己的)WndProc,但WIN32地址空间独立,SetWindowLong调用将被简单忽略,所以必须想法把你的子类代码放入另一个进程的地址空间,这种技术称之为向一个进程的地址空间注入一个DLL,然后就可以SetWindowLong了<br><br>1 最简单的方式是设置注册表:HKEY_LOCAL_MACHINENT_DLLS,将其值设为你的DLL路径,如c:.dll,重启后有效,这样每当USER32.DLL被映射到进程时,USER32.DLL检索此字符串并载入此库,这种方法只对那些也映射USER32.DLL的进程有效(好在是绝大部分),并且对WIN95无效.<br><br>2 使用HOOK来注入DLL,其原理和WINDOWS运行机制有关.在这里只说明怎么做:设置一个WM_GETMESSAGE钩子,<br><br>HOOK hHook=SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,hinstDll,NULL);<br><br>而后,当GetMsgProc被调用后,就SetWindowLong来派生子类<br><br>3 使用远程线程注入DLL,你需要在目标进程的地址空间中创建和执行线程并访问提交给线程的栈的物理存储,懂吗?反正我是不懂.<br><br>另外,如果你要注入的是子进程的化,CreateRemoteThread的第一个参数就可从<br><br>CreateProcess中获得了,不过如果是子进程的话,访问数据完全可以用进程通讯的方法来实现.<br>&nbsp;<br>&nbsp;<br><br>
 
后退
顶部