【发布时间】:2011-04-14 23:21:22
【问题描述】:
我想打印 DLL 中的函数代码。
我加载了 dll,我有了所需函数的名称,接下来是什么?
谢谢!
【问题讨论】:
-
你有那个 dll 的源代码吗? 打印函数代码是什么意思?
我想打印 DLL 中的函数代码。
我加载了 dll,我有了所需函数的名称,接下来是什么?
谢谢!
【问题讨论】:
实际上,接下来是获取代码。您在 DLL 中拥有的是 object 代码——形式为可供处理器执行的二进制代码,尚未准备好打印。
您可以反汇编 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和这个Program that prints its own code?和这个http://en.wikipedia.org/wiki/Quine_%28computing%29
我不确定它是否能满足你的要求,但我想它可能会对你有所帮助。
【讨论】: