jans2002的博客

专注 专心 专业

(转)怎么获取dll函数的参数类型

可以通过反汇编来知道接口函数的参数,建议使用W32DSM来分析,也可以直接使用VC来分析,就是麻烦一点。      
  现在使用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指令      
  来实现参数的传递的。这时可以看一下具体是什么东西被压入堆栈了,一般来说,如果参数是整数,一看就可以知道了,      
  如果是字符串的话也是比较简单的,只要到那个地址上面去看一下就可以了。      
  如果传递的结构的话,没有很方便的办法解决,就是读懂该汇编就可以了。对于以上的分析,本人只其到了抛砖引玉,      
  希望对大家有点用处。

posted on 2009-10-14 08:37 jans2002 阅读(1378) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理