有人知道区别吗?

最佳答案

如果要使用可移植可执行文件,则无法获取the specs的副本。

已经有一段时间了,但是万一内存能正确地为我服务:IT和IAT是相同的,除了IAT由PE加载程序在解析导入时填充-但不要相信我,请检查规范:)

编辑:

快速浏览了规范,并刷新了我的内存:
导入表是主结构,每个要导入的DLL都有一个条目。每个条目除其他外,还包含一个导入查找表( ILT )和导入地址表( IAT )指针(iirc,它们以前称为OriginalFirstThunkFirstThunk)。 ILT和IAT表在磁盘上相同,但是在运行时IAT将使用导入函数的内存地址填充。

如果您希望能够处理非标准EXE,则PE header IAT字段可能无法依赖100%,就像您不能依赖开始/大小代码和数据指针一样。最好忽略IAT header 字段,而是解析IT。同样,在解析IT时,某些可执行文件将缺少ILT,只有IAT会出现-旧的borland(iirc)链接器因不生成ILT而臭名昭著。

编辑2:定义

  • IT:导入表(PeCoff第6.4.1节)-每个DLL IMAGE_IMPORT_DESCRIPTOR的表。
  • ILT:导入查找表(PeCoff第6.4.2节)-每次导入IMAGE_THUNK_DATA的表。
  • IAT:导入地址表(PeCoff第6.4.4节)-磁盘上:与ILT相同,运行时:填充有导入的函数内存地址。
  • 关于portable-executable - PE的日期目录中的 "Import Table address"和 "Import Address Table address"有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3801571/

    10-08 22:38