回答
简而言之,没有简单的方法来做你想做的事。不过,您可以使用反汇编程序库(例如distorm)来反汇编出口入口点的代码。有一些可以使用的启发式方法,但其中很多仅适用于32位调用约定(__stdcall
和__cdecl
)。就我个人而言,我发现它的Python绑定有用,但libdasm可以做同样的事情。
其他任何具有反汇编功能的工具都具有很大的价值,比如OllyDbg或Immunity Debugger。
注:,如果你有一个已经调用有问题的DLL的程序,这是大部分时间非常值得运行调试器(当然只有在代码可以信任下,但你的问题基本上意味着)并在导出的函数中设置断点。从这一点上,您可以从运行时行为和运行目标的堆栈内容中推断出更多。但是,这仍然是棘手的 - 特别是在__cdecl
其中函数可能需要任意数量的参数。在这种情况下,您必须筛选外部参数的调用程序到相应的函数,并根据call
的堆栈清理推断它抛弃了多少个参数/字节。当然,在call
之前查看push
指令也会具有一定价值,但它需要一点经验,尤其是在呼叫嵌套时,您必须辨别哪个push
属于哪个call
。
基本上你将不得不制定出一套最小的匹配你的情况,除非你已经许可的昂贵的工具之一(和知道如何操纵他们)来与自己的启发式启发式的,通常经过微调调整了很长时间。
如果您碰巧拥有IDA Pro(或Hex-Rays插件)许可证,那么您当然应该使用该许可证。另外,虽然相对落后,freeware versions of IDA可以处理32位x86 PE文件(当然包括DLL),但根据您正在开发的项目(“不允许商业用途”),许可证可能会成为障碍。
您可以使用dependency walker。
您可以找到dumpbin
或Dependency Walker中导出的函数名。但要知道如何调用这些函数,你真的需要一个头文件和一些文档。如果你没有这些,那么你将不得不逆向工程DLL,这是一个非常具有挑战性的任务。
- 1. PInvoke在编译时不知道DLL吗?
- 2. 如何在反编译C#dll后编译dll?
- 3. .dll反编译器
- 4. c#DLL只能编译一个类
- 5. 编译一些dll到另一个dll
- 6. C#反编译
- 7. PInvoke或使用/ clr:pure来编译
- 8. 是否可以使用Turbo C/C++编译器生成DLL?
- 9. pInvoke C#DLL导入问题
- 10. 可以将C程序编译为DLL
- 11. 的PInvoke DLL中的函数用C
- 12. 反向pinvoke char * []使用StringBuilder
- 13. 使用gcc编译DLL
- 14. GCC使用__stdcall编译dll
- 15. C#dll文件编译
- 16. “找不到PInvoke DLL”sqlceme35.dll“
- 17. 如何使用PInvoke从c#导入C++ dll?
- 18. 我可以从程序(DLL)调用的C++或C编译器
- 19. 如何反编译.dll文件?
- 20. 替换反编译DLL中的函数
- 21. 启用DLL编译
- 22. 如何编译形成一个DLL
- 23. 反编译Objective-C库
- 24. 用C++编写的Mozilla/GoogleChrome插件可以反编译吗?
- 25. 将C代码编译为Visual C++ dll?
- 26. 使用Visual C++项目中使用MinGW/GCC编译的DLL?
- 27. 关于是否使用本地C++ DLL的建议:PINVOKE&Marshaling?
- 28. 反编译Obj C框架
- 29. Netbeans(c/C++的MinGW编译器)是否可以调用任意C/C++ DLL(在VS'05中编译)?
- 30. 将C++源代码编译为一个.dll
依赖性步行者只显示导出函数的名称,而不是整个签名 – Praetorian 2012-03-20 19:41:13