计算PE文件中入口点的文件偏移量
Calculating the file offset of a entry point in a PE file
在
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 所在的第 header 部分(通常是第一个,但你应该真正搜索所有部分 headers)。
- 获得正确的部分 header 后,获取其
VirtualAddress
和 PointerToRawData
字段。
- 从
AddressOfEntryPoint
中减去VirtualAddress
:你现在有一个"delta"
- 由于完全相同的增量适用于偏移量,因此:将 "delta" 添加到
PointerToRawData
。
您根本不需要 FileAlignment
,因为入口点所在的部分已经与该值对齐。
在
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 所在的第 header 部分(通常是第一个,但你应该真正搜索所有部分 headers)。
- 获得正确的部分 header 后,获取其
VirtualAddress
和PointerToRawData
字段。 - 从
AddressOfEntryPoint
中减去VirtualAddress
:你现在有一个"delta" - 由于完全相同的增量适用于偏移量,因此:将 "delta" 添加到
PointerToRawData
。
您根本不需要 FileAlignment
,因为入口点所在的部分已经与该值对齐。