在DLL中打印函数的代码
print the code of a function in a DLL
我想在DLL中打印一个函数的代码。
我加载了dll,我有所需函数的名称,下一步是什么?
谢谢!
实际上,下一步是获取代码。您在DLL中拥有的是对象代码——二进制代码,其形式为处理器准备好执行,而不是准备好打印。
可以反汇编DLL中的内容。如果您习惯于使用汇编语言,那么这可能是有用的,但它肯定是而不是原始源代码(也不可能非常接近它)。如果您想要反汇编它,在程序中加载它(通常)不是一个很好的起点。尝试打开VS命令行并使用dumpbin /disasm yourfile.dll
。准备好大量的输出,除非所讨论的DLL 真的很小。
要获取有关上述函数在DLL中实际实现的功能的提示,您唯一的选择是对汇编的二进制表示形式进行反向工程。这意味着你几乎必须使用反汇编器(IDA Pro或调试器,例如OllyDbg)来将操作码转换为实际的汇编助记符,然后通过它来工作并尝试理解它如何工作的细节。
请注意,由于它是从C/c++编译的,由于优化和进程的性质,在过程中会丢失大量数据;生成的程序集可能(也可能会)看起来很神秘和毫无意义,但它仍然以与程序员在高级语言中编程的完全相同的方式完成工作。这并不容易。这需要时间。你需要运气和勇气。但这是可行的。:)
无。一个DLL是编译二进制代码;你不能仅仅通过下载并知道函数名来获得源代码。
如果这是一个。net程序集,您可能能够使用反射获得源代码。但是,您提到了c++,所以这是值得怀疑的。
看看这个http://www.cprogramming.com/challenges/solutions/self_print.html和这个程序打印自己的代码?这个http://en.wikipedia.org/wiki/Quine_%28computing%29
我不确定它是否会做你想要的,但我想它可能会对你有帮助。
- 代码在main()中运行,但在函数中出现错误
- 为什么我在使用void函数时得到错误代码C2276
- 编写代码时C++出现错误:错误 1 错误 C2601:'circle':本地函数定义是非法的
- 这个c++代码是如何在没有定义函数的情况下运行的
- 如何在没有函数的情况下编写此代码并使C++更简单?
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- 了解每月第一天函数的代码
- 代码的效率. 转到和函数调用
- C++(.cpp文件和.h文件)拆分代码并添加一个函数,提取 - 这很容易吗?
- 如何定义一个没有重复代码的继承的 const 类成员函数?
- Arduino:在 loop() 和自定义函数中运行相同的代码时出现问题
- 以下代码中的函数模板有什么问题?
- 为什么这些代码仍然使用 lvalue 函数?
- 在这个函数中是有缺陷的,因为取消引用 null 是无效的,所以我想更改代码
- 为什么下面带有非常量转换函数的代码没有歧义?
- C++代码停止工作错误使用cout内部函数
- 如何将 c++ get 函数代码转换为 opencv 算法中使用的 python
- 如何在c++中重用代码(函数)
- 编译来自学习现代 3D 图形编程的失败代码 函数___tmainCRTStartup中引用未解析的外部符号_main
- 混合代码-函数成员指针