有关导入函数的问题
我用微软的汇编器ml.exe和连接器link.exe,源代码中使用proto和导入库来导入dll导出的函数然后发现用到那个函数时总是先到一个jmp指令的位置,然后jmp指令再跳转至导入表中的地址
如asm文件中GetModuleHandleW proto stdcall,:dword
includelib kernel32.lib
...
invoke GetModuleHandleW,0
编译后它就成了
push 0
call 4004d6
而4004d6处的东西是jmp dword ptr[40052c],这个40052c就是GetModuleHandleW的地址在导入表中存放的位置
我认为这是因为一开始ml.exe不知道GetModuleHandleW是从另一个dll中导入的函数,就当一般的函数处理的,所以link.exe就自己提供了一个跳转指令
但这样做又占时间又占空间,我想问一下汇编中有没有像vc++中__declspec(dllimport)的东西,让编译器知道函数是导入来的,这样就不需要那个jmp了。