PE 文件结构

PE file structure

提问人:Pieter Jansen 提问时间:6/15/2023 更新时间:6/30/2023 访问量:153

问:

希望有人能为我回答这些问题,谢谢。

  • 查看 msdn 和其他文档,我看到 PE 文件的数据描述包含导入表部分 (.idata) 的 RVA。但是,sections 表还包含 idata 部分的 RVA,这不是多余的吗?

  • 其次,我阅读了有关导入查找/名称表、导入地址表、导入目录表和提示/名称表的信息,我想知道为什么 ILT 不包含函数的名称,而是包含提示/名称表的 RVA?或者换句话说,为什么导入目录表不直接引用 hint/name 表,而是使用 ILT 作为包装器(是因为在 ILT 中,如果它是用序号/按其名称调用的,它是定义的?

  • 据我所知,IAT 也可以是只读的,但在这种情况下,它仍然是 .idata 部分或 .rdata 部分的一部分(我读到部分名称并不那么重要,可以更改而不会造成严重后果)。

感谢您的帮助!

winapi dll 可执行文件 portable-executable

评论

1赞 Dai 6/15/2023
“我看到 PE 文件的数据描述包含导入表部分 (.idata) 的 RVA。但是,sections 表还包含 idata 部分的 RVA,这不是多余的吗?- 您到底指的是什么“数据描述”?我现在正在查看 PE/COFF 规范,唯一的地址在数据目录表中,但地址是 imports-table 的地址,而不是 import-section 的地址 - 也许这就是让你失望的原因?.idata.idata
0赞 Pieter Jansen 6/15/2023
嗨,戴,谢谢你的反应。也许这确实让我感到困惑,但是当我查看规范时,它提到可选标头的数据描述指的是导入表,该表由 IDT、ILT 等组成。但在这种情况下..什么是导入部分?我的意思是我会认为导入表=导入部分,但可能我错了?
4赞 Raymond Chen 6/15/2023
各节描述内存的分配位置。目录描述如何解释内存。没有规则要求将与进口相关的信息放在自己的部分,但通常出于各种原因这样做,有些是实用的,有些是传统的。“为什么首相坐在桌子的首位,上面写着'总理'的标语牌?这不是多余的吗?好吧,按照惯例和传统,总理确实坐在桌子的首位,但他们可以决定坐在其他地方,标语牌告诉你总理在哪里。

答:

0赞 Jeaninez - MSFT #1

根据社区的建议:

请参阅文档:PE 格式

.idata 地址位于 Data Directories 表中,但 .idata 地址是 imports-table 的地址

各节描述内存的分配位置。目录描述如何解释内存。没有规则要求将与进口相关的信息放在自己的部分,但通常出于各种原因这样做,有些是实用的,有些是传统的。