玩DLL的高手有请!!!

lzzqqq 2005-02-21 10:28:49
我手头上有个Dll文件,并且知道里面有个导出函数,名叫MainFunc
我的问题是有没有方法知道MainFunc的输入输出参数及其数据类型???
...全文
210 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
反汇编

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧