【问题标题】:Why does a loaded PE binary need IAT?为什么加载的 PE 二进制文件需要 IAT?
【发布时间】:2018-06-22 18:14:29
【问题描述】:

我只是想了解二进制格式,在学习 PE 格式时,我发现它有一个 IAT 用于查找导入的函数在内存中的可用位置。

我不明白为什么加载程序会有这种额外的间接级别。既然加载的已经知道导入的函数在内存中的加载位置,为什么它不只是在程序集中引用它,而不是填充 IAT,然后在程序执行期间首先访问 IAT,然后从那里找到地址。

我不确定我对此的理解是否正确。有人可以解释一下吗?

【问题讨论】:

  • PE format, what is the use for IAT Directory 的可能重复项:“当加载器使用导入函数的实际地址填充 IAT 时,操作系统会重新映射 IAT 的页面并由分页文件支持它们。所以每个进程都可以有自己的一组导入地址。其余的页面,包括代码和导入表,仍然是共享的。”

标签: windows executable portable-executable


【解决方案1】:

加载器在加载 DLL 时修改 IAT,用导入函数的实际地址填充它。 DLL 中的代码通过 IAT 条目进行间接调用。避免必须修补代码(即修改程序集),这种修补会阻止代码共享。

一个不错的网页,显示管道is here。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-13
    • 1970-01-01
    • 2021-10-01
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多