windows - 计算PE文件中入口点的文件偏移量

标签 windows assembly portable-executable

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 所在的章节标题(通常是第一个,但您实际上应该搜索所有章节标题)。
  • 获得正确的节标题后,获取其 VirtualAddressPointerToRawData 字段。
  • AddressOfEntryPoint 中减去 VirtualAddress:您现在有一个“delta”
  • 由于完全相同的增量适用于偏移量,因此:将“增量”添加到 PointerToRawData

您根本不需要 FileAlignment,因为入口点所在的部分已经根据该值对齐。

关于windows - 计算PE文件中入口点的文件偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33724306/

相关文章:

c - 使用cachegrind和callgrind的不同读写计数

windows - 有没有安全的方法来识别 MS-DOS 可执行文件?

.net - 是否有其他操作系统使用 PE 文件或至少将来有机会使用它?

c++ - 从 'OLE_HANDLE' 转换为 'HICON' 的正确方法是什么?

windows - Windows XP SP3(XP 模式 Windows 7)上 Tbutton 中的 Nasty Png

windows - 在 DLL 中,函数表的结构是怎样的?

c++ - 加密变量

c++ - 将 ADC(带进位相加)到 C++

c - GCC 是如何实现变长数组的?

c# - PE格式自检