有人知道区别吗?
最佳答案
如果要使用可移植可执行文件,则无法获取the specs的副本。
已经有一段时间了,但是万一内存能正确地为我服务:IT和IAT是相同的,除了IAT由PE加载程序在解析导入时填充-但不要相信我,请检查规范:)
编辑:
快速浏览了规范,并刷新了我的内存:
导入表是主结构,每个要导入的DLL都有一个条目。每个条目除其他外,还包含一个导入查找表( ILT )和导入地址表( IAT )指针(iirc,它们以前称为OriginalFirstThunk
和FirstThunk
)。 ILT和IAT表在磁盘上相同,但是在运行时IAT将使用导入函数的内存地址填充。
如果您希望能够处理非标准EXE,则PE header IAT字段可能无法依赖100%,就像您不能依赖开始/大小代码和数据指针一样。最好忽略IAT header 字段,而是解析IT。同样,在解析IT时,某些可执行文件将缺少ILT,只有IAT会出现-旧的borland(iirc)链接器因不生成ILT而臭名昭著。
编辑2:定义
IMAGE_IMPORT_DESCRIPTOR
的表。 IMAGE_THUNK_DATA
的表。 关于portable-executable - PE的日期目录中的 "Import Table address"和 "Import Address Table address"有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3801571/