董督秀 发表于 2024-10-4 00:11

如何准确读取PE文件入口点的首个字节?

如图,以ExeInfoPE为例,它读取到OLLYDBG.EXE的入口点的数位字节:



例如OD入口点的首个字节为0xEB (图中圈红的部分)

我尝试获取入口点rva: OptionalHeader.AddressOfEntryPoint 之后,读取首个字节,但是结果总不对。

如何实现这个效果?要求支持32位和64位PE文件。有源码示例吗?

lies2014 发表于 2024-10-4 00:11

本帖最后由 lies2014 于 2024-10-4 02:47 编辑

磁盘状态的文件和内存状态的文件定位是不一样的,AddressOfEntryPoint 定义的是内存态的偏移,你直接读取文件的话应该取的是文件偏移,即 AddressOfEntryPoint 对应的节表的文件偏移。
以 OD 为例,AddressOfEntryPoint 的内存偏移为 0x1000,对应的节为 .text, .text的内存偏移为 0x1000(对应 AddressOfEntryPoint),文件偏移为 0x600,读取磁盘文件的偏移 0x600 就能取到首字节 0xEB。





代码可参照滴水的节表相关部分:
https://blog.csdn.net/Edimade/article/details/130299882

董督秀 发表于 2024-10-4 09:13

lies2014 发表于 2024-10-4 00:11
磁盘状态的文件和内存状态的文件定位是不一样的,AddressOfEntryPoint 定义的是内存态的偏移,你直接读取文 ...

解决了,读文件偏移,而不是内存偏移。
页: [1]
查看完整版本: 如何准确读取PE文件入口点的首个字节?