如何在RAW内存中找到(PE)可执行入口点?

时间:2016-01-04 23:43:51

标签: assembly portable-executable

我正在开发一个ASM项目,我想知道可移植可执行程序在原始内存中的入口点。原始内存我的意思是静态内存,就像我用十六进制编辑器编辑原始.exe文件一样。从程序的PE表中我可以查找名为“EntryPoint:”的条目,但该条目包含程序在内存中加载后的入口点!我需要找到程序在磁盘中寻找原始内存中的第一条指令的位置。有些程序在.text部分的第一个地址开始执行,这很常见,但并不总是发生,这就是为什么我想知道入口点。

为了解决这个问题,我使用了Windows API中的MapViewOfFile函数,并在内存中加载了一个example.exe程序,然后查找其原始内容。

我目前正在使用Radasm

与MASM合作

谢谢!

1 个答案:

答案 0 :(得分:2)

入口点由PE标头中的AddressOfEntryPoint给出,它为您提供入口点的虚拟地址。如果你想弄清楚文件中的位置,你需要查看部分表并确定哪个部分包含该虚拟地址 - 这是包含VirtualAddressVirtualSize的部分AddressOfEntryPoint是> = VirtualAddress且偏移AddressOfEntryPoint - VirtualAddress是< VirtualSize PointerToRawData

找到后,只需计算USAGE ON LANGUAGE PLPYTHONU +偏移量即可找出它在文件中的位置。