Windows 计算PE文件中入口点的文件偏移量
在 有关于如何在exe文件中查找入口点的文件偏移量的信息 在这里我可以读到 EP(文件)=EntryPoint的地址–BaseOfCode+.text[指针或数据] +文件对齐 然而,当我自己计算这个时(我使用了两个不同的exe文件),我得出的结论是 EXE文件中入口点的偏移量=入口点的地址+.text[指针或数据]- .text[虚拟服装] 其中AddressOfEntryPoint从IMAGE_OPTIONAL_头中获取,其他两个值从IMAGE_SECTION_头中获取Windows 计算PE文件中入口点的文件偏移量,windows,assembly,portable-executable,Windows,Assembly,Portable Executable,在 有关于如何在exe文件中查找入口点的文件偏移量的信息 在这里我可以读到 EP(文件)=EntryPoint的地址–BaseOfCode+.text[指针或数据] +文件对齐 然而,当我自己计算这个时(我使用了两个不同的exe文件),我得出的结论是 EXE文件中入口点的偏移量=入口点的地址+.text[指针或数据]- .text[虚拟服装] 其中AddressOfEntryPoint从IMAGE_OPTIONAL_头中获取,其他两个值从IMAGE_SECTION_头中获取 那个网页上的信息是
那个网页上的信息是假的吗?像这样添加FileAlignment似乎是错误的,没有意义。还是这样?文件对齐建议我应该使用模或其他方法来计算值。如果BaseOfCode和FileAlignment是相同的值(大多数情况下是相同的),那么将它们添加到计算中不会有任何干扰,但这有什么意义呢?正确,您根本不需要使用
FileAlignment
值
算法应该如下所示(与您的非常相似):
- 从图像中获取
_可选_标题。AddressOfEntryPoint(这是一个VA)AddressOfEntryPoint
- 搜索此VA所在的节标题(通常是第一个,但实际上应该搜索所有节标题)
- 获得正确的节标题后,获取其
和VirtualAddress
字段指针或WDATA
- 从
中减去AddressOfEntryPoint
:您现在有了一个“delta”VirtualAddress
- 由于完全相同的增量适用于偏移,因此:将“增量”添加到
指针或WDATA
您不需要
文件对齐
,因为入口点所在的部分已经与该值对齐。我必须重新阅读PE规范,但添加文件对齐似乎确实是错误的。如果未对齐的偏移量是x
,我会选择x-x%FileAlignment
。