输入表的结构
可选映像头中(IMAGE_OPTIONAL_HEADER32)中有一项DataDirectory的第二个成员指向输入表。
输入表以一个IMAGE_IMPORT_DESCRIPTOR(IID)简称数组开始。
IMAGE_IMPORT_DESCRIPTOR struct
union {
DWORD OriginalFirstThunk; 4Byte
};
TimeDateStamp DWORD ;04h 4Byte
ForwarderChain DWORD ;08h 4Byte
Name DWORD ;0Ch; 4Byte
FirstThunk DWORD ;10h; 4Byte
IMAGE_IMPORT_DESCRIPTOR ends
OriginalFirstThunk与FirstThunk非常类似, 它们指向两个本质上相同的数组IMAGE_THUNK_DATA,
这些数组有好几种叫法, 但最常见的名字是输入名称表(Import Name Table, INT)和输入地址表(
Import Address Table, IAT)。
输入地址表(IAT), 这个IAT有的时候因为脱壳会被损坏, 或者由于使用了特殊的压缩或生成的PE
文件, 导致没有IAT, 或者是被修改的IAT, 所以需要重建? 这只是我的猜测。
最常见的名字是 输入名称表(Import Name Table, INT) 和 输入地址表(Import Address Table IAT)
原来 INT - IAT是本质上相同的数组(IMAGE_THUNK_DATA)。