加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – PE格式,IAT目录有什么用

发布时间:2020-12-14 03:59:20 所属栏目:Windows 来源:网络整理
导读:在PE格式中,我们有导入表目录(由IMAGE_DIRECTORY_ENTRY_IMPORT访问)和IAT目录(由IMAGE_DIRECTORY_ENTRY_IAT访问) 两者都是可选标题数据目录的一部分. 使用Import Table,加载器可以动态加载和解析必要的库和函数. 这是通过迭代导入地址表RVA(Thunk Table)来完
在PE格式中,我们有导入表目录(由IMAGE_DIRECTORY_ENTRY_IMPORT访问)和IAT目录(由IMAGE_DIRECTORY_ENTRY_IAT访问)
两者都是可选标题数据目录的一部分.

使用Import Table,加载器可以动态加载和解析必要的库和函数.
这是通过迭代导入地址表RVA(Thunk Table)来完成的,该表是导入表的一部分.

那么,如果我们使用导入目录进行导入解析,我们需要哪些IAT目录?

我一直在阅读Microsoft PE specification,但找不到答案.此外,SO中也存在一些问题,但大多数问题都使用IAT来引用Thunk表而不是IAT目录.

谢谢

编辑

我认为导入地址表(导入表目录中的字段)和导入地址表(称为IAT目录)之间存在混淆.
我的问题是关于IAT目录.

再次感谢

解决方法

在您链接的PE规范中,第5.4.4章对此进行了详细描述.它们是相同的表格:

The structure and content of the import address table are identical to those of the import lookup table,until the file is bound. During binding,the entries in the import address table are overwritten with the 32-bit (for PE32) or 64-bit (for PE32+) addresses of the symbols that are being imported. These addresses are the actual memory addresses of the symbols,although technically they are still called “virtual addresses.” The loader typically processes the binding

也许解释为什么这样做是很重要的. PE文件通过将其直接映射到内存而加载到进程中.底层操作系统原语是内存映射文件.这提供了几个重要的优化:

>可执行文件使用的内存不必由页面文件支持.如果操作系统需要另一个进程的RAM,则可以简单地丢弃映射到可执行文件的页面.当进程生成页面错误时,再从PE文件重新加载.
>进程用于其可执行代码的RAM可以由进程的任何实例共享.换句话说,当您多次启动Notepad.exe时,RAM中只有一个代码副本.每个进程共享相同的页面.这对于DLL来说尤为重要,特别是在每个进程中使用的操作系统DLL,如ntdll.dll,kernel32.dll和user32.dll(等等).

当加载程序使用导入函数的实际地址填充IAT时,操作系统将重新映射IAT的页面并使其由页面文件支持.因此,每个进程都可以拥有自己的一组导入地址.包含代码和导入表的其余页面仍然是共享的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读