有一个DLL,怎么知道其导出函数的参数和返回类型
有一个DLL,如何知道其导出函数的参数和返回类型
我用DLL2LIB已经获得对应的lib和def了。
使用的时候,
#pragma comment(lib, "xxx.lib ")
__declspec(dllimport) void xfunx(void);
总是链接不上,其中xxx.lib是DLL2LIB生成的,xfunx是导出函数。
我自己新建了一个DLL工程,获得一个dll和lib,使用的时候,
如果声明的导出函数参数和返回值正确,则链接成功,如果有一个有误则就链接不上。(像参数char*和int虽然都是4字节,也不能互换)
也就是说,以上试验证明,lib中其实也保存有导出函数的参数以及返回类型说明,就是不知如何将其取出?
------解决方案--------------------
lib中似乎是没有的,就是函数的排列顺序
而且DLL2LIB这样的工具,似乎无法保证没问题的
------解决方案--------------------
用Depends工具。
------解决方案--------------------
extern "C " 有么?
dll有没有extern "C " ,你的声明有没有extern "C "
如果没有,那就说明lib中函数的的信息包含了参数,在不同编译系统之间不同用.
extern "C " 形式的 lib中只有函数名称和顺序,连参数个数的信息都没有.
------解决方案--------------------
用dumpbin命令可以查看DLL文件的组成,如
dumpbin test.dll
dumpbin -export test.dll
具体参数和用法你可以google一下
------解决方案--------------------
办法有两个
一找dll的开发者.
另一个办法是用IDA.pro反编译一下看看.说不定IDA能推导出参数类型.你所需要的一切东西看汇编代码都能分析出来的
------解决方案--------------------
ida + 手工分析参数类型
------解决方案--------------------
ID:0
ID:1
IDA.pro反编译过来看到的?
在DLL里没看到过
------解决方案--------------------
怀疑这个只是你用的软件的标记而已,导出表里面没这个玩意
我用DLL2LIB已经获得对应的lib和def了。
使用的时候,
#pragma comment(lib, "xxx.lib ")
__declspec(dllimport) void xfunx(void);
总是链接不上,其中xxx.lib是DLL2LIB生成的,xfunx是导出函数。
我自己新建了一个DLL工程,获得一个dll和lib,使用的时候,
如果声明的导出函数参数和返回值正确,则链接成功,如果有一个有误则就链接不上。(像参数char*和int虽然都是4字节,也不能互换)
也就是说,以上试验证明,lib中其实也保存有导出函数的参数以及返回类型说明,就是不知如何将其取出?
------解决方案--------------------
lib中似乎是没有的,就是函数的排列顺序
而且DLL2LIB这样的工具,似乎无法保证没问题的
------解决方案--------------------
用Depends工具。
------解决方案--------------------
extern "C " 有么?
dll有没有extern "C " ,你的声明有没有extern "C "
如果没有,那就说明lib中函数的的信息包含了参数,在不同编译系统之间不同用.
extern "C " 形式的 lib中只有函数名称和顺序,连参数个数的信息都没有.
------解决方案--------------------
用dumpbin命令可以查看DLL文件的组成,如
dumpbin test.dll
dumpbin -export test.dll
具体参数和用法你可以google一下
------解决方案--------------------
办法有两个
一找dll的开发者.
另一个办法是用IDA.pro反编译一下看看.说不定IDA能推导出参数类型.你所需要的一切东西看汇编代码都能分析出来的
------解决方案--------------------
ida + 手工分析参数类型
------解决方案--------------------
ID:0
ID:1
IDA.pro反编译过来看到的?
在DLL里没看到过
------解决方案--------------------
怀疑这个只是你用的软件的标记而已,导出表里面没这个玩意