导入表是数据目录中注册的数据类型之一,基描述信息位于数据目录的第2个目录项中。IAT 导入函数也是数据目录 注册的数据类型之一,其描述信息位于数据目录的第13个目录项中
上图中:
导入表数据所在地址 RVA=0x4030h
导入表数据大小=40
导入函数地址表数据所在地址 RVA=4000h
导入函数地址表数据大小=48
导入表的双桥结构:
kernel32.dll的导入描述结构
桥1和桥2最终通向了一个目的地,都指向了引入函数的“编号-名称”(Hint/Name)描述部分。而从桥2到目的地的过程中,还经过了另外一个很重要的结构IAT.
桥1指向的地址列表被定义为INT(Import Name Table), 桥2指向的地址列表被定义为IAT(Import Address Table)
OriginalFirstThunk: 54 20 00 00
桥1, 最高位为0, 这是一个RVA, 表明函数是以字符串类型的函数名导入的。
IAT 结构:
IAT结构
IAT数据目录项
当PE被加载进虚拟地址空间后,IAT的内容会被操作系统更改为函数的VA. 这个修改最终会导致通向“值-名称”描述的桥2发生断裂
当桥2发生断裂以后,如果没有桥1作为参数,我们就无法重新找到该地址到底是调用了哪个函数。这就是为什么会在导入表数据结构中存在两个桥的原因,也是为什么单桥导入表结构中无法实施绑定的原因。











网友评论