如何在内存中加载时确定进程可执行代码的开始和结束位置?

时间:2012-01-03 22:40:43

标签: windows winapi memory process

说我有app TestApp.exe 当TestApp.exe运行时,我想要一个单独的程序来读取驻留在内存中的可执行代码。我想忽略堆栈和堆以及其他任何相切的东西。

换句话说,我想我是在问如何确定磁盘上.exe二进制数据的内存端等价物所在的位置。我意识到这不是1:1的内存填充。

编辑:我认为我要求的内容在vmmap.exe的以下屏幕截图中显示为图像 http://i.imgur.com/bARgC.png

编辑:我能够使用VirtualQueryEx和ReadProcessMemory从内存中获取所有使用Execute *(PAGE_EXECUTE等)的任何保护标志标记的内存。这有几个问题。首先,我为notepad.exe抓取了大约2兆字节的数据,这是一个189千字节的磁盘文件。我抓住的一切都有一个PAGE_EXECUTE的保护标志。第二,如果我在不同的Win7 64bit机器上运行它,我得到相同的数据,只分成两半,顺序不同。我可以使用一些专家指导。 :)

编辑:另外,不知道为什么我这个问题为-1。如果我需要清除任何内容,请告诉我。

3 个答案:

答案 0 :(得分:0)

将DLL注入目标进程并使用可执行文件的名称调用GetModuleHandle。这将指向已加载到内存中的PE头。获得此信息后,您可以手动解析PE头,并找到.text部分相对于内存中图像基址的位置。

答案 1 :(得分:0)

无需注入dll 使用本机api挂钩apis

答案 2 :(得分:0)

我学到了很多这个项目。我最终解析了PE头并使用该信息将我全部路由。最后,我完成了我的目标,结果我更有见识。