为什么加载的 PE 二进制文件需要 IAT?
Why does a loaded PE binary need IAT?
我只是想了解一下二进制格式,在了解 PE 格式时,我发现它有一个 IAT,用于查找导入函数在内存中的位置。
我不明白为什么加载程序会有这种额外的间接级别。由于 loaded 已经知道导入的函数在内存中的加载位置,为什么它不只是在程序集中引用它而不是填充 IAT,然后在程序执行期间首先访问 IAT,然后从那里找到地址。
我不确定我的理解是否正确。有人可以解释一下吗?
加载程序在加载DLL 时修改IAT,用导入函数的实际地址填充它。 DLL 中的代码通过 IAT 条目进行间接调用。避免必须修补代码(即修改程序集),这种修补可以防止代码共享。
一个不错的网页,显示管道 is here。
我只是想了解一下二进制格式,在了解 PE 格式时,我发现它有一个 IAT,用于查找导入函数在内存中的位置。
我不明白为什么加载程序会有这种额外的间接级别。由于 loaded 已经知道导入的函数在内存中的加载位置,为什么它不只是在程序集中引用它而不是填充 IAT,然后在程序执行期间首先访问 IAT,然后从那里找到地址。
我不确定我的理解是否正确。有人可以解释一下吗?
加载程序在加载DLL 时修改IAT,用导入函数的实际地址填充它。 DLL 中的代码通过 IAT 条目进行间接调用。避免必须修补代码(即修改程序集),这种修补可以防止代码共享。
一个不错的网页,显示管道 is here。