sne*_*rch 6

如果你想玩Portable Executables,就无法获取规范的副本.

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

编辑:

有一个快速浏览规范,并刷新我的记忆:导入表是主结构,每个DLL导入一个条目.每个条目包含,除其他事项外,在导入查找表(ILT)和导入地址表(IAT)指针(IIRC这些以前被称为OriginalFirstThunkFirstThunk).ILT和IAT表在磁盘上是相同的,但在运行期间,IAT将填充导入函数的内存地址.

如果您希望能够处理非标准EXE,那么PE头IAT字段可能不能依赖于100%,就像您不能依赖于代码和数据指针的起始/大小一样.最好忽略IAT头字段并解析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相同,运行时:填充导入的功能存储器地址.