我正在开发一个ASM项目,我想知道可移植可执行程序在原始内存中的入口点。原始内存我的意思是静态内存,就像我用十六进制编辑器编辑原始.exe文件一样。从程序的PE表中我可以查找名为“EntryPoint:”的条目,但该条目包含程序在内存中加载后的入口点!我需要找到程序在磁盘中寻找原始内存中的第一条指令的位置。有些程序在.text部分的第一个地址开始执行,这很常见,但并不总是发生,这就是为什么我想知道入口点。
为了解决这个问题,我使用了Windows API中的MapViewOfFile函数,并在内存中加载了一个example.exe程序,然后查找其原始内容。
我目前正在使用Radasm
与MASM合作谢谢!
答案 0 :(得分:2)
入口点由PE标头中的AddressOfEntryPoint
给出,它为您提供入口点的虚拟地址。如果你想弄清楚文件中的位置,你需要查看部分表并确定哪个部分包含该虚拟地址 - 这是包含VirtualAddress
和VirtualSize
的部分AddressOfEntryPoint
是> = VirtualAddress
且偏移AddressOfEntryPoint - VirtualAddress
是< VirtualSize
PointerToRawData
。
找到后,只需计算USAGE ON LANGUAGE PLPYTHONU
+偏移量即可找出它在文件中的位置。