关于如何由DLL得到函数声明的方法
2013-06-26 15:58
267 查看
使用Microsoft Visual Studio\COMMON\Tools\下的工具DEPENDS.EXE可以查看动态库的接口函数,但如何能够看到这个动态库接口函数的参数呢? 我们可以通过反汇编来知道接口函数的参数,建议使用W32DSM来分析。 现在就如何使用W32DSM来具体说明:
1。先打开需要分析的DLL,然后通过菜单功能-》出口来找到需要分析的函数,双击就可以了。它可以直接定位到该函数。
2。看准该函数的入口,一般函数是以以下代码作为入口点的。
push ebp
mov ebp, esp
...
3。然后往下找到该函数的出口,一般函数出口有以下语句。
...
ret xxxx;//其中xxxx就是函数差数的所有的字节数,为4的倍数,xxxx除以4得到的结果就是参数的个数。
其中参数存放的地方:
ebp+08 //第一个参数
ebp+0C //第二个参数
ebp+10 //第三个参数
ebp+14 //第四个参数
ebp+18 //第五个参数
ebp+1C //第六个参数
。。。。
-------------------------------------------
还有一种经常看到的调用方式:
sub esp,xxxx //开头部分
//函数的内容
。。。
//函数的内容
add esp,xxxx
ret //结尾部分
其中xxxx/4的结果也是参数的个数。
-------------------------------------------------
还有一种调用方式:
由于该函数比较简单,没有参数的压栈过程,
里面的
esp+04就是第一个参数
esp+08就是第二个参数
。。。
esp+xx就是第xx/4个参数
你说看到的xx的最大数除以4后的结果,就是该函数所传递的参数的个数。
----------------------------------------------
到现在位置,你应该能很清楚的看到了传递的参数的个数。至于传递的是些什么内容,还需要进一步的分析。
最方便的办法就是先找到是什么软件在调用此函数,然后通过调试的技术,找到该函数被调用的地方。一般都是PUSH指令
来实现参数的传递的。这时可以看一下具体是什么东西被压入堆栈了,一般来说,如果参数是整数,一看就可以知道了,
如果是字符串的话也是比较简单的,只要到那个地址上面去看一下就可以了。
如果传递的结构的话,没有很方便的办法解决,就是读懂该汇编就可以了。对于以上的分析,本人只其到了抛砖引玉,
希望对大家有点用处。
1。先打开需要分析的DLL,然后通过菜单功能-》出口来找到需要分析的函数,双击就可以了。它可以直接定位到该函数。
2。看准该函数的入口,一般函数是以以下代码作为入口点的。
push ebp
mov ebp, esp
...
3。然后往下找到该函数的出口,一般函数出口有以下语句。
...
ret xxxx;//其中xxxx就是函数差数的所有的字节数,为4的倍数,xxxx除以4得到的结果就是参数的个数。
其中参数存放的地方:
ebp+08 //第一个参数
ebp+0C //第二个参数
ebp+10 //第三个参数
ebp+14 //第四个参数
ebp+18 //第五个参数
ebp+1C //第六个参数
。。。。
-------------------------------------------
还有一种经常看到的调用方式:
sub esp,xxxx //开头部分
//函数的内容
。。。
//函数的内容
add esp,xxxx
ret //结尾部分
其中xxxx/4的结果也是参数的个数。
-------------------------------------------------
还有一种调用方式:
由于该函数比较简单,没有参数的压栈过程,
里面的
esp+04就是第一个参数
esp+08就是第二个参数
。。。
esp+xx就是第xx/4个参数
你说看到的xx的最大数除以4后的结果,就是该函数所传递的参数的个数。
----------------------------------------------
到现在位置,你应该能很清楚的看到了传递的参数的个数。至于传递的是些什么内容,还需要进一步的分析。
最方便的办法就是先找到是什么软件在调用此函数,然后通过调试的技术,找到该函数被调用的地方。一般都是PUSH指令
来实现参数的传递的。这时可以看一下具体是什么东西被压入堆栈了,一般来说,如果参数是整数,一看就可以知道了,
如果是字符串的话也是比较简单的,只要到那个地址上面去看一下就可以了。
如果传递的结构的话,没有很方便的办法解决,就是读懂该汇编就可以了。对于以上的分析,本人只其到了抛砖引玉,
希望对大家有点用处。
相关文章推荐
- Asp.net_关于如何利用编译器把[.cs]文件生成动态链接库[.dll]文件方法的总结
- PowerBuilder10.5 调用 dll 时声明函数方法以及调用
- 关于Java的泛型在所声明的对象中如何获取class或者实例的方法的总结
- 关于自定义比较函数 usort 如何使用 类中的方法
- *关于如何得到查询记录的条数的方法^_^*
- Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作
- 关于Java的泛型在所声明的对象中如何获取class或者实例的方法的总结
- MFC中自定义消息方法及如何得到消息处理函数的返回值
- C++ DLL中导出函数的声明的方法
- 关于Java的泛型在所声明的对象中如何获取class或者实例的方法的总结
- Thin的DateChooser代码学习(关于js的函数参数为一个完整的函数以及“对象不支持此属性或方法”错误的解决)(原创,转载请声明)
- 在ActiveX控件中如何动态调用DLL函数之"准"一体化方法
- DLL如何声明导出函数
- C++中,类和函数分开定义声明和实现的方法
- 关于Dll 导出函数名(ZZ)
- 关于C++中如何判断文件,目录存在的若干方法
- 关于python的基础知识12--方法/函数
- 09.3.3日 mfc 笔记 关于CBitmapButton的使用方法 和 playsound()函数
- 【OC.1 Practice】Objective-C 类的声明、函数消息的定义方法、字段作用域
- DLL导出函数名称改编的解决方法