PE:导入表定位

导入表是数据目录中注册的数据类型之一,基描述信息位于数据目录的第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作为参数,我们就无法重新找到该地址到底是调用了哪个函数。这就是为什么会在导入表数据结构中存在两个桥的原因,也是为什么单桥导入表结构中无法实施绑定的原因。

你可能感兴趣的:(PE:导入表定位)