【发布时间】:2013-03-26 14:03:27
【问题描述】:
我正在看这个:Importing Function Calls Using __declspec(dllimport),但我不明白为什么真的需要 __declspec(dllimport)?为什么链接器不能在链接阶段将调用 func1 修补为调用 DWORD PTR __imp_func1(IAT 表地址),从而避免在源代码中单独声明?
【问题讨论】:
-
这会有帮助吗:stackoverflow.com/a/4490536?
-
@Joulukuusi 是的,这是避免 jmp 的优化,但我不明白为什么链接器无法执行此优化。
-
因为
call func的长度为 5 个字节,而call dword ptr [__imp__func]的长度为 6 个字节。补丁不适合。一个字节太大了。 -
@RaymondChen 我明白了,并且在它之后添加一个 NOP 以便它可能是六个字节长,我认为,这被认为是浪费空间。您能否将其发布为答案,以便我将其标记为已接受。谢谢。
-
您可以自己写答案并接受。在每条调用指令之后添加一个 nop(以防万一它被导入)听起来非常过分。