在
http://en.redinskala.com/finding-the-ep/
有关于如何在 exe 文件中找到入口点的文件偏移量的信息。
我可以在这里阅读
EP (File) = AddressOfEntryPoint – BaseOfCode + .text[PointerToRawData] + FileAlignment
然而,当我自己计算时(我使用了几个不同的 exe 文件)我得出的结论是
Offset of entry point in EXE file = AddressOfEntryPoint + .text[PointerToRawData] - .text[VirtualAddress]
AddressOfEntryPoint 从 IMAGE_OPTIONAL_HEADER 中获取,其他两个值从 IMAGE_SECTION_HEADER 中获取。
那个网页上的信息是假的吗?像他们那样添加 FileAlignment 似乎是错误的,没有意义。或者是吗?文件对齐建议我应该使用模数或其他方法来计算值。如果 BaseOfCode 和 FileAlignment 是相同的值(大多数情况下它们是),则不会干扰将它们添加到计算中,但它有什么意义?
最佳答案
正确,您根本不需要使用 FileAlignment
值。
算法应该如下所示(与您的非常相似):
- 从 IMAGE_OPTIONAL_HEADER.AddressOfEntryPoint 获取
AddressOfEntryPoint
(这是一个 VA) - 搜索此 VA 所在的章节标题(通常是第一个,但您实际上应该搜索所有章节标题)。
- 获得正确的节标题后,获取其
VirtualAddress
和PointerToRawData
字段。 - 从
AddressOfEntryPoint
中减去VirtualAddress
:您现在有一个“delta” - 由于完全相同的增量适用于偏移量,因此:将“增量”添加到
PointerToRawData
。
您根本不需要 FileAlignment
,因为入口点所在的部分已经根据该值对齐。
关于windows - 计算PE文件中入口点的文件偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33724306/