导入表和导入地址表有什么区别?

评论

复制导入表,导入地址表和导入名称表有什么区别?还有RTFM。因此,投了反对票。

#1 楼

通常,我建议阅读MSDN上有关PE结构的PE格式文档。

导入表

导入表实际上称为“导入目录表”,其中包含可执行文件加载的每个DLL的条目。每个条目除其他外,还包含导入查找表(ILT)和导入地址表(IAT)

引用有关导入目录表的PE格式规范:


导入目录表
导入信息从导入目录表开始,该表描述了导入信息的其余部分。导入目录表包含地址信息
,该地址信息用于解析对
目录条目组成,该映像所引用的每个DLL都有一个条目。
最后一个目录条目为空(用空值填充),其中
指示目录表的末尾。每个导入目录条目
具有以下格式:

Offset    Size    Field
0         4       Import Lookup Table RVA
4         4       Time/Date Stamp
8         4       Forwarder Chain
12        4       Name RVA
16        4       Import Address Table RVA




导入地址表

导入地址表由函数指针组成,ans用于在加载DLL时获取函数的地址。设计一个已编译的应用程序,以便所有API调用都不会使用直接的硬编码地址,而是通过函数指针进行工作。可以通过多种方式访问​​指针表-通过直接调用[pointer address]或通过“导入查找表”和“提示/名称表”进行访问。

再次引用PE规范关于“导入地址表”:


导入地址表
导入地址表的结构和内容与导入查找表的结构和内容相同,直到
文件已绑定。绑定期间,导入地址
表中的条目将被32位(对于PE32)或64位(对于PE32 +)覆盖。导入符号的地址。这些地址是
符号的实际内存地址,尽管从技术上讲它们仍被称为“虚拟地址”。装入程序通常处理绑定。



参考文献:


PE格式规范
了解导入地址表
维基百科:便携式可执行文件
SO答案