永发信息网

DLL要怎么才可以查看出接口和参数

答案:2  悬赏:50  手机版
解决时间 2021-12-25 17:26
  • 提问者网友:龅牙恐龙妹
  • 2021-12-24 22:01
DLL要怎么才可以查看出接口和参数
最佳答案
  • 五星知识达人网友:梦中风几里
  • 2021-12-24 22:08
那个是看公开的函数名。如果是要看几个参数,直接通过函数名的地址,跟过去看几个push
全部回答
  • 1楼网友:雪起风沙痕
  • 2021-12-24 23:48
这通常是很难的。没有什么特别好的方法可以准确的得到dll的调用接口。 一般的办法是这样: 1. 查询dll的导出函数表来得到该dll导出了多少个函数。这可以通过工具软件得到,比如pe explorer. 2. 自己设计一个加载程序,把该dll加载上来,然后依次调用查找到的所有导出函数。方法是: 2.1 用loadlibrary加载dll. 2.2 用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字节的结构还是没有使用一个参数,这就无法还原函数原型了。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯