IAT和导入表关系
来源:互联网 发布:数控圆弧编程举例 编辑:程序博客网 时间:2024/06/03 10:30
导入表:IMAGE_IMPORT_DESCRIPTOR:
IMAGE_IMPORT_DESCRIPTOR 结构定义如下:
IMAGE_IMPORT_DESCRIPTOR STRUCT
{
union
{
Characteristics DWORD ?
OriginalFirstThunk DWORD ? -》指向INT
}
TimeDateStamp DWORD ?
ForwarderChain DWORD ?
Name DWORD ?
FirstThunk DWORD ?-》指向IAT
}
IMAGE_IMPORT_DESCRIPTOR ENDS
导入表在PE加载前是这样的(IAT也是指向了IMAGE_THUNK_DATA结构)
在PE加载之后是(IAT指向了函数的实际地址)
IAT:就是所有要导入的函数的名称和Hint的地址表:
如
这些地址跟过去就是:
分别是要导入函数的Hint和函数名称
而导入表的首地址可以在DATA Directories里找IMPORT ADDRESS TABLE的RVA地址
也可以在导入表的多组IID中查看最小的一个FirstThunk的地址就是IAT的地址
PE加载之前:
。
OriginalFirstThunk的值为IMAGE_THUNK_DATA数组的首地址,数组以一个00 00 00 00地址表示这个dll库导出结束
FirstThunk的值为IAT的导入函数地址,没加载之前也是IMAGE_THUNK_DATA数组结构,以示以一个00 00 00 00地址表示这个dll库导出结束
PE加载之后:
OriginalFirstThunk不变化,而FirstThunk关闭了和OriginalFirstThunk的链接,并且FirstThunk的值为内存中导入函数地址的数组,一样以00 00 00 00表示一个结束
typedef struct _IMAGE_THUNK_DATA32 {
union {
PBYTE ForwarderString;
PDWORD Function;
DWORD Ordinal;
PIMAGE_IMPORT_BY_NAME AddressOfData;
} u1;
} IMAGE_THUNK_DATA32;
ForwarderString 指向一个转向者字符串的RVA;
Function 被输入的函数的内存地址;
Ordinal 被输入的API的序数值
AddressOfData 指向IMAGE_IMPORT_BY_NAME
IDT(IMPORT Directory Table)
- IAT和导入表关系
- IAT和导入表
- 导入表 与 IAT
- 171005 逆向-IAT导入地址表
- PE文件格式:导入表&IAT——手工重组
- 手动修复输入表时的发现---对于IID输入表和IAT和INT对应关系及程序载入DLL
- PE文件学习笔记(五):导入表、IAT、绑定导入表解析
- PE文件学习笔记(五):导入表、IAT、绑定导入表解析
- 定位IAT并输出导入函数名称和对应的函数地址
- IAT表详解
- IAT表详解
- IAT表详解
- 定位IAT表
- IAT
- IAT
- IAT挂钩实现和检测
- IAT和JMP方式的HOOK
- IAT HOOK、EAT HOOK和Inline Hook
- POJ 3414
- 重命名表名和列名sql语句
- 轻量级框架SSH应用与开发——Struts2之学习总结(进阶)
- C++primer阅读笔记---------特殊工具与技术
- UVA 679
- IAT和导入表关系
- 一个rootkit程序--隐藏文件和进程
- 剑指offer——32.把数组排成最小的数
- 暑期集训之感
- 51Nod-1174-区间中最大的数
- Json数组转Gson
- UVA 122
- 共享链系统开发平台开发
- CSS代码语法