如何获取DLL导入导出表的信息和DLL导出的函数名

如何获取DLL导入导出表的信息和DLL导出的函数名,第1张

不能直接导入到maya中,必须先导入到3dmax中再倒入到maya中

步骤:

先下载GameAssassin和3dmax插件与需要的dll(这些文件可以到GameAssassin官方网站上下载到),并运行

安装3dmax插件

运行游戏,按下ALT+F7截取模型

打开3dmax并导入模型

打开文件菜单中的导出,格式为OBJ(也可以是FBX)

打开maya并导入你导出的文件就可以了

主要工具有三个1、VC自带的

dumpbin,用法如:dumpbin

/exports

mspft80dll2、可以depends来查看依赖项3、可以用IDA

反汇编

工具来查看,加载你需要的dll,按F5就可以查看函数反汇编成C语言的代码了注:以上方法也可以用来查看exe中的

函数原型

方法一:标准C接口的导出extern "C" _ _declspec(dllexport) MyFunc1( );方法二:约定关键字的导出_ _declspec(dllexport) void _ _cdecl MyFunc2(void);备注:建议使用方法二,“_ _cdecl” 对应的默认的编译器中的选项,一般情况可以省略。版权:微软MSDN VS2008

三种情况如下:

第一种:进入“开始”的“数字”栏,选择“常规选项”,然后将光标放在图中所示公式栏,然后回车,就可以看到计算结果。

第二种:进入“公式”的公式审核栏,如果“显示公式”被选中,取消选中即可。

第三种:“开始”中的“单元格”中“格式”里的“锁定元格”取消选中,或者右击单元格,打开“设置单元格格式”后,在“保护”菜单将“保护”“隐藏”前的勾去掉。

这通常是很难的。没有什么特别好的方法可以准确的得到dll的调用接口。

一般的办法是这样:

1 查询dll的导出函数表来得到该dll导出了多少个函数。这可以通过工具软件得到,比如PE Explorer

2 自己设计一个加载程序,把该dll加载上来,然后依次调用查找到的所有导出函数。方法是:

21 用LoadLibrary加载dll

22 用GetProcAddress通过函数名把函数地址取出,然后假定函数的原型是void ExFun(void);,调用它。

3 在调试器中设置断点到调用导出函数的语句,F11跟进去。

4 这个时候就比较麻烦了。首先看函数结尾的ret语句有没有带参数。如果ret带参数,那这个函数有可能是stdcall类型的,那么ret的参数通常就是导出函数参数的字节数。如果ret不带参数,那有可能这个函数不带参数,也有可能函数是cdecl类型的。此时无法判断究竟是哪种情况,需要进一步阅读函数汇编码。

5 查看整个函数的汇编码,找出所有类似于"ebp+X"的字样,比如ebp+8, ebp+C等,这些都是参数。ebp+4是返回地址。如果函数是stdcall或cdecl类型的,那么ebp+8是函数第一个参数,ebp+C是第二个。

从上面可以看出,如果函数是stdcall类型,可能比较容易找出函数原型。但如果是cdecl类型的,那就要靠运气了。因为有可能函数有参数,却没有使用。

就算函数是stdcall的,然后取得了字节数,又通过第5步的查找法找到了可能的参数的个数。有一种可能是函数传递了一个结构,假定结构是8字节的,栈地址为ebp+C,那么你有可能找不出ebp+10的引用点,这样你就无法确定函数究竟是使用了一个8字节的结构还是没有使用一个参数,这就无法还原函数原型了。

说了这么多,也表达的挺乱的,其实我想表达的是“还是找一个头文件吧。。。”

EnumWindows 枚举窗体

另外,Win32 API中还有一个FindWindowEx,它非常适合寻找子窗口。

从第二次调用以后,FindWindowEx第二个参数要传上次窗体句柄

以上就是关于如何获取DLL导入导出表的信息和DLL导出的函数名全部的内容,包括:如何获取DLL导入导出表的信息和DLL导出的函数名、用dumpbin命令查看dll中哪些函数被导出了出错、C++ 怎么样导出一个函数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9402245.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存