玩DLL的高手有请!!!

lzzqqq 2005-02-21 10:28:49
我手头上有个Dll文件,并且知道里面有个导出函数,名叫MainFunc
我的问题是有没有方法知道MainFunc的输入输出参数及其数据类型???
...全文
183 点赞 收藏 14
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lzzqqq 2005-02-22
到底有没有一种可行的方法啊???
回复
BigFanOfCpp 2005-02-22
用::GetProcAddress("MainFunc");
随便写个"函数指针"就行,明白吧?
然后用SoftIce的bpx设置断点在这个DLL的MainFunc函数.
bpx MainFunc
然后你调用刚才的那个"函数指针",
这时候,SoftIce就把这个mainFunc捕捉了,然后通过分析反汇编代码就行,因为反汇编代码里的参数,也就是:
push 参数
肯定是错误的,随便写的嘛~
主要分析调用函数指针命令:
Call 函数指针(地址)
然后按"t"键进行单步调试,就进去了,这时候通过配合DATA窗口(命令就是DATA,可以多个)来分析函数参数.
回复
tiaoci 2005-02-22
MS 是有个工具的,但那个是针对 c++的

因为 c++的函数名会被加上参数类型标记的后缀
(不知道这个术语叫什么,嘿嘿)

就像 MainFunc@wer@zsdf,根据编译器当时的规则

就能根据 @wer @zsdf 反推出 函数的参数
回复
cxf1976 2005-02-22
我试过,即使反汇编,你可以确定参数的总长度,但这没有意义。
因为即使告诉你长度等于4,但是这也可能是一个int,或者一个指针(类,结构,函数...)。你怎么去用?所以普通的方法是不行的。不过MS内部是否有专门的工具可以搞定它,那就不得而知了。

回复
tiaoci 2005-02-22
反汇编入口代码只能大概知道传递了什么内容,有多少参数
回复
tiaoci 2005-02-22
无论怎么样,理论上是无法准确知道的
回复
BigFanOfCpp 2005-02-22
我感觉用Win32DASM,反汇编比较好,可以直接查看,罗云彬的网站就有下的.
回复
zjjzcgao 2005-02-22
visual C++有一个工具,叫dependes.
你可以用一下试试
回复
BigFanOfCpp 2005-02-22
按照压栈的顺序猜,我去帮你猜一个,回来告诉你怎么猜!
回复
waterpub 2005-02-22
参数都是以地址入栈的,应该还要跟踪下去看每个参数用法来确定参数类型,猜测,:)
回复
kugou123 2005-02-22
反汇编,猜参数类型。
回复
EnochShen 2005-02-22
这种问题除了用反汇编+猜+经验,没有什么特别好的解决方法
回复
rabo 2005-02-21
看看是怎么入栈,__stdcall是参数以从右到左的顺序入栈。pascal是从左到右。
回复
Hassle 2005-02-21
反汇编
回复
相关推荐
发帖
进程/线程/DLL
创建于2007-09-28

1.5w+

社区成员

VC/MFC 进程/线程/DLL
申请成为版主
帖子事件
创建了帖子
2005-02-21 10:28
社区公告
暂无公告