为什么加载的 PE 二进制文件需要 IAT?

Why does a loaded PE binary need IAT?

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

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

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

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

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