dll知识点查遗补缺
1.
导入函数
(1)如果程序静态连接时,声明函数采用了__declspec(dllimport)
调用Foo时,被翻译成call [_imp_Foo]
其中_imp_Foo是idata节里面的数据,dll的loader会修改这个地址里的数值。
_imp_Foo是FirstTrunk值。
(2)如果程序静态连接时,没有采用了__declspec(dllimport)
调用Foo时,被翻译成call _Foo
而编译器会自动生成_Foo函数,这只是个躯壳。
_Foo:
jump [_imp_Foo]
(3)采用GetProcAddress方式
这种方式不会有_imp_Foo类似的地址,GetProcAddress返回的就是函数地址,直接call就可以了
导入函数
(1)如果程序静态连接时,声明函数采用了__declspec(dllimport)
调用Foo时,被翻译成call [_imp_Foo]
其中_imp_Foo是idata节里面的数据,dll的loader会修改这个地址里的数值。
_imp_Foo是FirstTrunk值。
(2)如果程序静态连接时,没有采用了__declspec(dllimport)
调用Foo时,被翻译成call _Foo
而编译器会自动生成_Foo函数,这只是个躯壳。
_Foo:
jump [_imp_Foo]
(3)采用GetProcAddress方式
这种方式不会有_imp_Foo类似的地址,GetProcAddress返回的就是函数地址,直接call就可以了