提问人:Nerios 提问时间:10/1/2023 最后编辑:winapiadminNerios 更新时间:10/27/2023 访问量:142
使用 CFF 资源管理器和 msdn doc 分析 PE 文件以查找导出表地址
parsing a PE file to find the export table address using CFF explorer and msdn doc
问:
我处理一个 PE 文件,我尝试在 IDA 中解释这一行:
v4 = *(_DWORD *)((char *)LibraryA + *((_DWORD *)LibraryA + 15) + 120);
LibraryA 是 PE 文件的基址
*((_DWORD *)LibraryA + 15)
相当于*(LibraryA + 60) = *(LibraryA + 0x3C) = *(LibraryA + e_lfanew) = 0x100 = PEOffset
因此,根据 CFF Explorer 指向导出目录*((_DWORD *)LibraryA + 15) + 120
当我使用 CFF 浏览器时 > Nt 标头 > 可选标头 > 数据目录 > 导出表地址 = 0x178 = 0x100 (PE 偏移量) + 0x78 (导出表地址)
但是当我使用 msdn 文档 https://learn.microsoft.com/en-us/windows/win32/debug/pe-format#optional-header-data-directories-image-only 时,我看到导出表的 PE 偏移量为 96 (0x60),而不是在 CFF Explorer 中找到的值: 120 (0x78)
我认为我在使用 msdn 文档时错了,但我不知道在哪里?
答:
(感谢 Kz2023 的建议;我不知道这个网站,godbolt.org。
我的问题的答案很简单:在msdn中,为导出表地址提供的偏移量与OptionalHeader相关,在代码中,偏移量与PE COFF标头相关
提醒:PE COFF 标头的大小为 0x18 字节,这是我注意到的 msdn 的 96 字节 (0x60) 和代码中的 120 字节 (0x78) 之间的差异
评论
我在查找调试目录时弄错了(有关更多信息,请参阅读取调试目录时奇怪的条目类型4194304),这将适用于另一个目录条目,例如导入目录、导出目录等。
这是数据目录条目的偏移量,而不是导出表的节条目或偏移量。要获取导出部分内容,请使用该问题中的答案。
下一个:DHCP 选项是否排序?
评论