我处理一个 PE 文件,并尝试在 IDA 中解释这一行:
v4 = *(_DWORD *)((char *)库A + *((_DWORD *)库A + 15) + 120);
LibraryA是PE文件的基址
*((_DWORD *)LibraryA + 15) 相当于 *(LibraryA + 60) = *(LibraryA + 0x3C) = *(LibraryA + e_lfanew) = 0x100 = PE 偏移量
因此 *((_DWORD *)LibraryA + 15) + 120 点根据 CFF Explorer 导出目录
当我使用 CFF explorer > Nt header > 可选 header > 数据目录 > 导出表地址 = 0x178 = 0x100(PE 偏移量)+ 0x78(导出表地址)
但是当我使用msdn文档时https://learn.microsoft.com/en-us/windows/win32/debug/pe-format#optical-header-data-directories-image-only 我看到导出表的 PE 偏移量是 96 (0x60),而不是 CFF Explorer 中找到的值:120 (0x78)
当我使用 msdn 文档时,我认为我错了,但我不知道在哪里?
我在查找调试目录时出错了(有关更多信息,请参阅读取调试目录时奇怪的条目类型 4194304),这将适用于另一个目录条目,例如导入目录、导出目录等。
这是数据目录条目的偏移量,而不是节条目的偏移量。要获取导出部分的内容,请使用该问题中的答案。