当程序被打包时,OriginalFirstThunk 往往会被丢弃。当加载程序解析导入时,它如何知道要查找哪些函数?出于某种原因,IAT (FirstThunk) 甚至在系统加载之前就神奇地填充了地址,而不是函数名称。这是为什么?就好像链接器在编译时将 DLL 名称和 DLL 中的所有函数地址直接写到 IAT 中一样。谁能说地址在 DLL 更新时不会改变?还是在 ASLR 上?
为什么首先在 IAT 中有地址?不是应该指向函数名称并在运行时更改吗?如果 IAT 中已经存在“预编译”地址,那么为什么我们还需要在加载可执行文件时设置 IAT?
考虑到这一点,为什么我们甚至需要 OriginalFirstThunk?如果 IAT 有函数名称或地址,对我来说似乎没用。