如何反汇编获知dll中函数的参数

作者&投稿:鄂胆 (若有异议请与网页底部的电邮联系)
如何反汇编获知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指令
来实现参数的传递的。这时可以看一下具体是什么东西被压入堆栈了,一般来说,如果参数是整数,一看就可以知道了,
如果是字符串的话也是比较简单的,只要到那个地址上面去看一下就可以了。
如果传递的结构的话,没有很方便的办法解决,就是读懂该汇编就可以了。对于以上的分析,本人只其到了抛砖引玉,
希望对大家有点用处。
昨天已经简单的告诉大家,怎么知道接口的参数个数了,以及简单的接口。由于编译器的优化原因,
可能有的参数没有我前面说的那么简单,今天就让我再来分析一下的DLL的调用的接口。如果在该DLL的
某个函数中,有关于API调用的话,并且调用API的参数整好有一个或多个是该DLL函数的参数的话。
那么就可以很容易的知道该DLL函数的参数了。
举例说明:以下汇编代码通过W32DSM得到。
Exported
fn():
myTestFunction
-
Ord:0001h
:10001010
8B442410
mov
eax,
dword
ptr
[esp+10]
:10001014
56
push
esi
:10001015
8B74240C
mov
esi,
dword
ptr
[esp+0C]
:10001019
0FAF742410
imul
esi,
dword
ptr
[esp+10]
:1000101E
85C0
test
eax,
eax
:10001020
7414
je
10001036
:10001022
8B442418
mov
eax,
dword
ptr
[esp+18]
:10001026
8B4C2408
mov
ecx,
dword
ptr
[esp+08]
:1000102A
6A63
push
00000000
:1000102C
50
push
eax
:1000102D
51
push
ecx
:1000102E
6A00
push
00000000
*
Reference
T
USER32.MessageBoxA,
Ord:01BEh
|
:10001030
FF15B0400010
Call
dword
ptr
[100040B0]
*
Referenced
by
a
(U)nconditional
or
(C)onditional
Jump
at
Address:
|:10001020(C)
|
:10001036
8BC6
mov
eax,
esi
:10001038
5E
pop
esi
:10001039
C3
ret
-------------------------------------------------------
其中myTestFunction是需要分析的函数,它的里面调用了USER32.MessageBoxA
这个函数计算参数个数的时候要注意了,它不是0X18/4的结果,原因是程序入口
的第二条语句又PUSH了一下,PUSH之前的ESP+10就是第4个参数,就是0x10/4
=4
PUSH之后的语句ESP+
XX,
其中(XX-4)/4才对应于第几个参数。
ESP+0C
==第2个参数
ESP+10
==第3个参数
ESP+18
==第5个参数
ESP+08
==第1个参数
----------------------------这样共计算出参数的个数是5个,注意PUSH
esi之前与PUSH
esi之后,
PUSH一下,ESP的值就减了4,特别需要注意的地方!!!然后看函数的返回处RET指令,
由于看到了RET之前给EAX赋了值,所以可以知道该函数就必定返回了一个值,大家都知道EAX的寄存器
是4个字节的,我们就把它用long来代替好了,现在函数的基本接口已经可以出来了,
long
myTestFunction(long
p1,long
p2,long
p3,long
p4,long
p5);
但是具体的参数类型还需调整,如果该函数里面没有用到任何一个参数的话。那么参数
多少于参数的类型就无所谓了。一般来说这是不太会遇到的。那么,我们怎么去得到该函数的
参数呢?请看下面分析:
你有没有看到*
Reference
T
USER32.MessageBoxA,
Ord:01BEh这一条语句,
这说明了,在它的内部使用了WINAPI::MessageBox函数,我们先看一下它的定义:
int
MessageBox(
HWND
hWnd,
//
handle
of
owner
window
LPCTSTR
lpText,
//
address
of
text
in
message
box
LPCTSTR
lpCaption,
//
address
of
title
of
message
box
UINT
uType
//
style
of
message
box
);
它有4个参数。一般我们知道调用API函数的参数是从右往左压入堆栈的,把它的调用过程
翻译为伪ASM就是:
PUSH
uType
PUSH
lpCaption
PUSH
lpText
PUSH
hWnd
CALL
MessageBox
---------------------------------------
我们把这个于上面的语句对应一下,就可以清楚的知道
hWnd
=
NULL(0)
lpText
=
ecx
lpCaption
=
eax
uType
=
MB_OK(0)
---------------------------------
在往上面看,
原来
EAX
中的值是ESP+18中的内容得到了
ECX
中的值是ESP+08中的内容得到了
那么到现在为止就可以知道
lpText
=
ECX
=
[ESP+08]
==第1个参数
lpCaption
=
EAX
=
[ESP+18]
==第5个参数
现在我们可以把该DLL函数接口进一步写成:
long
myTestFunction(LPCTSTR
lpText,long
p2,long
p3,long
p4,LPCTSTR
lpCaption);
至于第3个参数ESP+10,然后找到该参数使用的地方,imul
esi,
dword
ptr
[esp+10]有这么一条指令。
因为imul是乘法指令,我们可以肯定是把ESP+10假设位long是不会错的,同理可以知道第2个参数esp+0C
肯定用long也不会错了,至于第4个参数,它只起到了一个测试的作用,
mov
eax,
dword
ptr
[esp+10]
test
eax,
eax
je
10001036
看到这个参数的用法了吗?
把它翻译位C语言就是:
if(p3)
{
//做je
10001036下面的那些指令
}
return
;
到现在为止可以把第3个参数看成是个指针了吧!就是如果p3为空就直接返回,如果不空就做其它一下事情。
好了,到现在位置可以把正确的接口给列出来了:
long
myTestFunction(LPCTSTR
lpText,long
n1,char
*pIsNull,long
n2,LPCTSTR
lpCaption);
哈哈,现在成功了!!!
long
CryptExtOpenCER(long
p1,long
p2,LPCSTR
p3,long
p4);
其中第3个参数可能是文件名称,
或者是PCERT_BLOB
它有CERT_QUERY_OBJECT_FILE,或者是CERT_QUERY_OBJECT_BLOB来决定。
---------------------------------------------------------------
今天想到了一个很好的办法,来解决参数的问题,不过有一定难度。
1。根据以前讲的各种方法,可以很快速的知道参数的个数,假设该函数
名称为MyTestFunc,参数的个数为3个。
于是可以定义如下:
long
MyTestFunc(long
p1,long
p2,long
p3);
2。安装一个HOOK(DLL)
3。通过别的程序调用,触发HOOK,调试到HOOK里面,就可以很清楚的知道
调用的参数,数值。
-------------
此方法本人还没有去实现,相信肯定是可以的。这样得到的参数应该相当准确。

1、用Windows系统盘功能进行文件修复;
2、若在此之前有一键备份过,可以重新还原;
3、从网上下载系统文件然后覆盖到原文件夹里;
4、由于从网上下载系统文件,可能会因为系统文件版本与操作系统不相符造成系统文件不兼容的情况,修复系统文件最好使用专业的工具进行一键修复。
  如腾讯电脑管家电脑诊所针对commom.dll、MSVC**.dll、d3dx**.dll等常见的dll文件丢失问题,推出了一键修复功能。在网上下载安装腾讯电脑管家8.0版本后,打开程序,点击右上角“电脑诊所——软件问题——丢失dll文件”,进入dll一间修复区,找到相应要修复的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指令
来实现参数的传递的。这时可以看一下具体是什么东西被压入堆栈了,一般来说,如果参数是整数,一看就可以知道了,
如果是字符串的话也是比较简单的,只要到那个地址上面去看一下就可以了。
如果传递的结构的话,没有很方便的办法解决,就是读懂该汇编就可以了。对于以上的分析,本人只其到了抛砖引玉,
希望对大家有点用处。

昨天已经简单的告诉大家,怎么知道接口的参数个数了,以及简单的接口。由于编译器的优化原因,
可能有的参数没有我前面说的那么简单,今天就让我再来分析一下的DLL的调用的接口。如果在该DLL的
某个函数中,有关于API调用的话,并且调用API的参数整好有一个或多个是该DLL函数的参数的话。
那么就可以很容易的知道该DLL函数的参数了。
举例说明:以下汇编代码通过W32DSM得到。
Exported fn(): myTestFunction - Ord:0001h
:10001010 8B442410 mov eax, dword ptr [esp+10]
:10001014 56 push esi
:10001015 8B74240C mov esi, dword ptr [esp+0C]
:10001019 0FAF742410 imul esi, dword ptr [esp+10]
:1000101E 85C0 test eax, eax
:10001020 7414 je 10001036
:10001022 8B442418 mov eax, dword ptr [esp+18]
:10001026 8B4C2408 mov ecx, dword ptr [esp+08]
:1000102A 6A63 push 00000000
:1000102C 50 push eax
:1000102D 51 push ecx
:1000102E 6A00 push 00000000

* Reference T USER32.MessageBoxA, Ord:01BEh
|
:10001030 FF15B0400010 Call dword ptr [100040B0]

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:10001020(C)
|
:10001036 8BC6 mov eax, esi
:10001038 5E pop esi
:10001039 C3 ret
-------------------------------------------------------
其中myTestFunction是需要分析的函数,它的里面调用了USER32.MessageBoxA
这个函数计算参数个数的时候要注意了,它不是0X18/4的结果,原因是程序入口
的第二条语句又PUSH了一下,PUSH之前的ESP+10就是第4个参数,就是0x10/4 =4
PUSH之后的语句ESP+ XX,
其中(XX-4)/4才对应于第几个参数。
ESP+0C ==第2个参数
ESP+10 ==第3个参数
ESP+18 ==第5个参数
ESP+08 ==第1个参数
----------------------------这样共计算出参数的个数是5个,注意PUSH esi之前与PUSH esi之后,
PUSH一下,ESP的值就减了4,特别需要注意的地方!!!然后看函数的返回处RET指令,
由于看到了RET之前给EAX赋了值,所以可以知道该函数就必定返回了一个值,大家都知道EAX的寄存器
是4个字节的,我们就把它用long来代替好了,现在函数的基本接口已经可以出来了,
long myTestFunction(long p1,long p2,long p3,long p4,long p5);
但是具体的参数类型还需调整,如果该函数里面没有用到任何一个参数的话。那么参数
多少于参数的类型就无所谓了。一般来说这是不太会遇到的。那么,我们怎么去得到该函数的
参数呢?请看下面分析:
你有没有看到* Reference T USER32.MessageBoxA, Ord:01BEh这一条语句,
这说明了,在它的内部使用了WINAPI::MessageBox函数,我们先看一下它的定义:
int MessageBox(
HWND hWnd, // handle of owner window
LPCTSTR lpText, // address of text in message box
LPCTSTR lpCaption, // address of title of message box
UINT uType // style of message box
);
它有4个参数。一般我们知道调用API函数的参数是从右往左压入堆栈的,把它的调用过程
翻译为伪ASM就是:
PUSH uType
PUSH lpCaption
PUSH lpText
PUSH hWnd
CALL MessageBox
---------------------------------------
我们把这个于上面的语句对应一下,就可以清楚的知道
hWnd = NULL(0)
lpText = ecx
lpCaption = eax
uType = MB_OK(0)
---------------------------------
在往上面看,
原来 EAX 中的值是ESP+18中的内容得到了
ECX 中的值是ESP+08中的内容得到了

那么到现在为止就可以知道
lpText = ECX = [ESP+08] ==第1个参数
lpCaption = EAX = [ESP+18] ==第5个参数

现在我们可以把该DLL函数接口进一步写成:
long myTestFunction(LPCTSTR lpText,long p2,long p3,long p4,LPCTSTR lpCaption);

至于第3个参数ESP+10,然后找到该参数使用的地方,imul esi, dword ptr [esp+10]有这么一条指令。
因为imul是乘法指令,我们可以肯定是把ESP+10假设位long是不会错的,同理可以知道第2个参数esp+0C
肯定用long也不会错了,至于第4个参数,它只起到了一个测试的作用,
mov eax, dword ptr [esp+10]
test eax, eax
je 10001036
看到这个参数的用法了吗?
把它翻译位C语言就是:
if(p3)
{
//做je 10001036下面的那些指令
}
return ;
到现在为止可以把第3个参数看成是个指针了吧!就是如果p3为空就直接返回,如果不空就做其它一下事情。

好了,到现在位置可以把正确的接口给列出来了:
long myTestFunction(LPCTSTR lpText,long n1,char *pIsNull,long n2,LPCTSTR lpCaption);
哈哈,现在成功了!!!

long CryptExtOpenCER(long p1,long p2,LPCSTR p3,long p4);
其中第3个参数可能是文件名称,
或者是PCERT_BLOB
它有CERT_QUERY_OBJECT_FILE,或者是CERT_QUERY_OBJECT_BLOB来决定。
---------------------------------------------------------------
今天想到了一个很好的办法,来解决参数的问题,不过有一定难度。
1。根据以前讲的各种方法,可以很快速的知道参数的个数,假设该函数
名称为MyTestFunc,参数的个数为3个。
于是可以定义如下:
long MyTestFunc(long p1,long p2,long p3);
2。安装一个HOOK(DLL)
3。通过别的程序调用,触发HOOK,调试到HOOK里面,就可以很清楚的知道
调用的参数,数值。
-------------
此方法本人还没有去实现,相信肯定是可以的。这样得到的参数应该相当准确。

1、应用程序的DLL
1)、可以用Ollydbg,在调用函数时,会有一串push指令,根据push的内容,判断是数据参数,还是指针参数。
2)、可以用ida ,这个是静态反汇编的神器,一般的DLL载入后,按F5是可以直接生成 C语言的伪代码的。虽然称伪代码,简单修改就可以当源码编译。
2、系统的DLL文件
要研究系统 DLL的导出函数参数,除了SDK、WDK提供的之外,只能通过WINDBG 进行内核高度,在sysenter后,会进入ring0领空中,根据context状态进行分析。
3、不算什么复杂的事情,但是一定要有深厚的调试能力。


dll文件用什么语法编译的(dll文件用什么打开)
您好,我就为大家解答关于dll文件用什么语法编译的,dll文件用什么打开相信很多小伙伴还不知道,现在让我们一起来看看吧!1、用OD就可以打开!OllyDBG这个软件可以反汇编的!可以用Resource Hacker打开,可以编辑dll文件的一些资源 DLL多数情况下是带有DLL扩展名的文件,但也可能是EXE或其他扩展名。2、它们向...

什么工具能够监视dll文件中的函数调用及传递参数
微软有一个工具叫做dependency walker或者Visual Studio附带的一个工具dumpbin可以查看dll的导出函数名称,函数参数和调用方式(比如__cdecl或__stdcall)在工具里无法显示,需要使用IDA或者OllyDbg等反汇编器将DLL反汇编,通过定位导出函数结尾的retn指令判断参数个数和调用方式。由被调用者平栈通常为__stdcall...

VB或VC编译的DLL文件可以部分反编译嘛?
反汇编出来也是几个push和call而已,没有什么作用 VB\\BC等编译过的DLL文件,目前还不能完全反编译 无论是exe还是dll都可以反汇编,即使静态不行,也可以动态调试。破解反汇编就行 了,不一定要反编译。可以得到字符串的话,有可能得到是MD5三次循环嘛?根据call的调用地址,绝对可以看出你是对同一个函数...

Reflector(.Net的Dll反编译工具)
点击右边的导出文件 源代码就全部导出来了! 另一个插件Reflector FileDisassembler dll设置方法也和这个一样 另外再提供一些Reflector的相关插件下载 可以用来反汇编 Net 的Dll文件 站长刚刚就用这个小软件把动易 Net 的Dll文件全汇编过来了 lishixinzhi\/Article\/program\/net\/201311\/12056 ...

什么是反汇编呢?
分类: 电脑\/网络 >> 程序设计 >> 其他编程语言 解析:反汇编就是把exe、dll文件中的机器代码翻译成为汇编语言。以便让人能够读懂exe和dll中的机器指令。汇编是把汇编语言程序翻译为exe,dll中的机器代码,反汇编是这个过程的逆过程。

汇编语言书上说用Debug进行反汇编查看,反汇编是什么意思?
反汇编:把目标代码转为汇编代码的过程,也可以说是把编程语言转换为汇编语言代码、低级转高级的意思,常用于软件破解(例如找到它是如何注册的,从而解出它的注册码或者编写注册机)、外挂技术、病毒分析、逆向工程、软件汉化等领域。学习和理解反汇编语言对软件调试、漏洞分析、OS的内核原理及理解高级语言...

如何查看一个DLL文件中具体的函数
可以通过反汇编来知道接口函数的参数,建议使用W32DSM来分析,也可以直接使用VC来分析。现在使用W32DSM来具体说明:1。先打开需要分析的DLL,然后通过菜单功能-》出口来找到需要分析的函数,双击就可以了。它可以直接定位到该函数。2。看准该函数的入口,一般函数是以以下代码作为入口点的。push ebp mov ...

dll文件有什么方法可以查看源代码?有几个dll文件别人给的,想看看里面代...
DLL 变成高级语言的过程 叫 反编译(不是反汇编...两者区别很大) ...C\/C++ DLL 别想了 ... .net还差不多 还原 IL中间码 为 源代码...有个反编译工具叫 Reflector ... 专门搞这个的 ...反汇编 的话 用 IDAPro\/OllyDbg

如何查看一个DLL文件中具体的函数及其代码?
在cmd下面,进入dump文件的目录下 1接着,我们输入命令 dumpbin -export dll名。2还有其他命令,可以参考help,这样就可以了。3可以用C++自带的工具查。开始 ——》所有程序 ——》 Microsoift visual C++ 6.0 ——》Microsoift visual C++ 6.0 Tools ——》 depends 查具体参数用反汇编,习惯于用...

电脑dll文件怎么打开编辑用什么软件打开dll格式文件
二、专业工具 可使用专业工具打开“.dll”文件,比如PE Explorer。PE Explorer可以查看“.dll”文件的所有内容,包括文件头、导出表、导入表、资源、字符串等。打开以后是下图所示的样子,会把“.dll”文件的内容以结构的形式展示出来。三、反汇编器 反汇编器可以打开“.dll”文件,比如IDA Pro、ILspy...

全州县15648254457: 如何反汇编获知dll中函数的参数 -
纪标西甲: 1、应用程序的DLL1)、可以用Ollydbg,在调用函数时,会有一串push指令,根据push的内容,判断是数据参数,还是指针参数.2)、可以用ida ,这个是静态反汇编的神器,一般的DLL载入后,按F5是可以直接生成 C语言的伪代码的.虽然称伪代码,简单修改就可以当源码编译.2、系统的DLL文件 要研究系统 DLL的导出函数参数,除了SDK、WDK提供的之外,只能通过WINDBG 进行内核高度,在sysenter后,会进入ring0领空中,根据context状态进行分析.3、不算什么复杂的事情,但是一定要有深厚的调试能力.

全州县15648254457: 怎么知道一个VB程序调用的DLL中函数的参数 -
纪标西甲: 可以通过反汇编来知道接口函数的参数,建议使用W32DSM来分析,也可以直接使用VC来分析,就是麻烦一点. 现在使用W32DSM来具体说明: 1.先打开需要分析的DLL,然后通过菜单功能-》出口来找到需要分析的函数,双击就可以了. ...

全州县15648254457: 怎么查看dll里面的函数,怎么用dumpbin查看dll -
纪标西甲: 主要工具有三个1、VC自带的 dumpbin,用法如:dumpbin /exports mspft80.dll2、可以depends来查看依赖项3、可以用IDA反汇编工具来查看,加载你需要的dll,按F5就可以查看函数反汇编成C语言的代码了注:以上方法也可以用来查看exe中的函数原型

全州县15648254457: 如何查看DLL中的函数信息 -
纪标西甲: 函数名可以查到,vc工具的depend就可以了,其他也有不少工具可以查到,声明的没有,声明没有编译到dll里的,声明包括函数名、参数和返回值.函数名说了,参数得通过反汇编得到,由于函数里通过堆栈来获得参数值,通过反汇编该函数,从函数头开始找出取堆栈的代码,可以找出该函数的参数个数和类型.参数的含意得读懂函数的反汇编代码,了解各参数的使用才能确定参数用途了.返回值在windows中是通过寄存器eax来返回的,如果返回的值小于32位,就用eax保存值,大于32位就用eax保存返回值的地址,所以要知道返回值的类型,得了解函数最好把什么存到eax中,存的值是什么才能知道返回值.

全州县15648254457: 请教各位高手,如何破解Dll文件,从中找出里面的函数和参数的详细情况? -
纪标西甲: 你用Delphi|Project|Import Type Library试着导入并解析你的DLL,如果可以导入,则你可以看到函数的接口信息,否则,你只能用调试器跟踪每一个函数的执行,并查看CPU寄存器才能知道每个函数的参数和调用规则.需要的功力可非一般,我不行!

全州县15648254457: 如何查看一个DLL文件中具体的函数及其代码? -
纪标西甲: 没有dumpbin工具的话,去网上下载 在cmd下面,进入dump文件的目录下1接着,我们输入命令 dumpbin -export dll名.2还有其他命令,可以参考help,这样就可以了.3可以用C++自带的工具查.开始 ——》所有程序 ——》 Microsoift visual C...

全州县15648254457: 反汇编dll,求此函数的调用方法 -
纪标西甲: 直接把名字改成原来那个就可以了.如果你希望改调用者,那问题比较难办,给你一个动态调用dll和汇编程序对照的例子,你从反汇编里面查找相应汇编语句修改,注意修改过的dll,其导出的函数与原先dll导出的函数形式上不能有差异.15: int ...

全州县15648254457: 哪位大侠能得到这个Dll中函数的参数呢,谢谢!
纪标西甲: 提供思路:1、我想你有这个DLL就应该有调用这个DLL的主程序.2、反编译得到这个DLL的输出表,也就是得到函数名和地址.3、在你要得到参数的地址字节改为CC,Ollydbg加载后当调用这个DLL函数就会断下.然后反方向可找到主程序的调用地址.最后看这个调用地址上有几个PUSH就大概OK了4、每个参数的做什么用还得自己跟自己分析.给一分吧急用,谢谢!!!!

全州县15648254457: 如何查看Dll里的函数 -
纪标西甲: dll不管是什么语言写出来的都是一样的,都可以公用的,他们的规范都是一样的.可以用C++自带的工具查 开始 --》所有程序 --》 Microsoift visual C++ 6.0 --》Microsoift visual C++ 6.0 Tools --》 depends 查具体参数用反汇编,我习惯于用OD,ctrl+N 找到要查的参数(后面会有显示是几个参数的),选中那一行按Enter就会跳到那个函数的调用段,里面会有具体的参数类型

全州县15648254457: 请教如何查看dll中有哪些函数 -
纪标西甲: 在项目中引用dll后可以右键→在对象浏览器中查看,就可以看到里面的函数了,不过这是没有内容代码的.想看内容代码可以下载Reflector,这个软件可以反编译dll,可以看到大多数dll的源代码

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网