请问有什么办法或者工具可以获得DLL文件中的导出的函数的原型

GrayMole2010 2010-05-13 07:07:21
不只是导出函数的符号,需要知道函数的参数与返回值。谢谢。
...全文
324 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
哈利路亚1874 2010-05-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wangli820 的回复:]
如果是C命名方式导出的,只能反汇编分析

如果是C++命名方式导出的,可以用VS自带的工具,undname.exe解析出部分原函数参数,在X:\Program Files\Microsoft Visual Studio 9.0\VC\bin
[/Quote]
这两楼顶一下,是可行的……
尹成 2010-05-16
  • 打赏
  • 举报
回复
理论上是不行的。编译得到的EXE和DLL(在Linux中是so)最多可以反编译成汇编语句序列。而对于这些可执行文件,对它们中的函数或过程的调用已经转换成最基本的入口点的跳转和执行后的返回(还是跳转,并将结果直接或间接存储在寄存器中),这也就是为什么最多能解析得到例程名称的原因。事实上,不同的编程语言、同一种编程语言的不同源代码,都有可能最终编译成一样的可执行文件。也就是说,源代码、二进制文件、可执行文件,这三类文件的产生顺序是不可逆的。你甚至可以反过来想,如果你的愿望实现了,那么软件版权意义何在?源代码的意义何在?如果可以解析得到,那么微软费那么大劲编写SDK干吗?(我还希望直接调用操作系统中的DLL呢,可惜最后还是回到了SDK。)
ilovejanx 2010-05-14
  • 打赏
  • 举报
回复
反汇编看看,调试下就更清楚了
visualassist4680 2010-05-14
  • 打赏
  • 举报
回复
反汇编,看调用栈
wmswxpmyl 2010-05-14
  • 打赏
  • 举报
回复
学习学习!!!!!!!!!!!!!!
MoXiaoRab 2010-05-14
  • 打赏
  • 举报
回复
楼上说的是对的。
wangli820 2010-05-14
  • 打赏
  • 举报
回复
如果是C命名方式导出的,只能反汇编分析

如果是C++命名方式导出的,可以用VS自带的工具,undname.exe解析出部分原函数参数,在X:\Program Files\Microsoft Visual Studio 9.0\VC\bin
iihero_ 2010-05-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 graymole2010 的回复:]
不只是导出函数的符号,需要知道函数的参数与返回值。谢谢。
[/Quote]

一般来说,dll都有对应的头文件之类的给二次开发者。这样,用户可以进行开发。如果没有对应的lib文件,可以根据dll文件生成对应的lib文件。这些都是没有问题的。也能生成对应的def文件。
你妹的特盗不 2010-05-14
  • 打赏
  • 举报
回复
mark
sjdev 2010-05-13
  • 打赏
  • 举报
回复
没有好办法,谁写的找谁要去。

mcaok 2010-05-13
  • 打赏
  • 举报
回复
逆向。IDA反汇编F5.例如:
.text:10001510 public SetAPIHook
.text:10001510 SetAPIHook proc near ; DATA XREF: .rdata:off_10012228o
.text:10001510
.text:10001510 arg_0 = dword ptr 4
.text:10001510
.text:10001510 mov eax, hmod
.text:10001515 push 0 ; dwThreadId
.text:10001517 push eax ; hmod
.text:10001518 push offset sub_100013F0 ; lpfn
.text:1000151D push 4 ; idHook
.text:1000151F call ds:SetWindowsHookExA
.text:10001525 mov ecx, [esp+arg_0]
.text:10001529 xor edx, edx
.text:1000152B test eax, eax
.text:1000152D setnz dl
.text:10001530 mov dword_100161BC, eax
.text:10001535 mov ds:hWnd, ecx
.text:1000153B mov eax, edx
.text:1000153D retn
.text:1000153D SetAPIHook endp

有一个参数,反回值应为BOOL型。所以
可以得出原型为
bool SetAPIHook(HWND arg_0);
快乐鹦鹉 2010-05-13
  • 打赏
  • 举报
回复
http://www.java2000.net/todoshow.jsp?id=174802

15,471

社区成员

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

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