无论用于源代码的编程语言如何,都可以使用哪些软件查看.dll文件中的源代码?
答案 0 :(得分:17)
如果它是托管DLL(.NET),您可以使用Reflector或ILDASM等工具打开它,您将看到 IL 代码。 (编辑2017-02-03:在7年多的时间里,.NET反汇编程序当然已经取得了很大进展,现在能够生成非常不错的C#代码)
如果它是一个非托管DLL(本机),那你就不走运了。您可以做的最好的事情是加载反汇编程序。除非你确切知道自己想要去哪里,否则这几乎无处可去。
答案 1 :(得分:1)
您对反编译程序集感兴趣。那么这是开始反编译.NET程序集的开始:http://aspnet.4guysfromrolla.com/articles/080404-1.aspx
.NET社区中用于反编译程序集的一个流行工具是.NET Reflector
答案 2 :(得分:1)
它们是不同的格式。
对于.NET dll,您可以使用ildasm.exe(使用.net框架安装)或.NET Reflector(下载)
答案 3 :(得分:1)
不可能(1)将目标代码反编译为源代码。检查界面是另一回事;有工具存在,但我不知道任何随便。
(1) - 好吧,好吧,有些语言可能会在某些情况下,但所产生的代码不会完全可读......
您将获得的唯一可读代码是汇编语言(有许多程序可用于此)。有些语言可以反编译为原始(或接近)源代码,例如Visual Basic 3.但是现在谁在VB3中编写程序?没有人。至于查看DLL的导入/导出,您可以使用以下的Dependency walker程序: http://www.dependencywalker.com/
对于某些语言,例如Visual Basic或C#,如果您使用一个好的反编译器并且代码没有被混淆(大部分时间都没有),您可以获得可读的源代码。
如果您对反编译感兴趣,请查看此网站: http://www.program-transformation.org/Transform/DecompilationPossible
对于.Net,.NET Reflector是可行的方法。它会将您的dll反编译为C#或VB.NET http://www.aisto.com/roeder/dotnet/
答案 4 :(得分:1)
对于.NET,Reflector将执行此操作; "Pro" version(现在处于预览版中)有一个Visual Studio插件,允许您调试VS IDE本身内的大多数托管代码,而不是单独的工具。到目前为止,它看起来非常甜蜜。
Reflector EAP http://www.simple-talk.com/community/blogs/alex/attachment/74919.ashx
答案 5 :(得分:1)
关于反编译.NET有足够的说法。如果您决定从反向工程本机二进制文件开始,我建议使用IDA。
它支持不同的操作系统,处理器体系结构,检测和显示标准库的使用(因此您可以轻松找到感兴趣的地方),显示子例程之间的依赖关系图,显示堆栈处的过程参数等。它也可以编写脚本并且'重新编写detect C++ classes and try-catch blocks,finds COM interfaces names for UUIDs并执行许多其他操作的脚本。这是一个很棒的工具,它有免费版本。
答案 6 :(得分:0)
要反编译.Net DLL,您可以使用.Net Reflector。它适用于以任何.Net语言编写的DLL。
要反编译Java JAR文件,请尝试Java Decompiler。
反编译本机代码(C ++)要困难得多。
答案 7 :(得分:0)
除非你在.NET中,否则DLL中的内容是二进制代码。您可以看到的唯一语言是汇编程序 - 这只是一种表达机器语言的助记方法。
答案 8 :(得分:0)
无论您使用的.Net语言如何 - 所有内容都将编译为MSIL(Microsoft中间语言)。您可以使用像Ildasm这样的工具将其转换为可读的“反汇编文本”:
http://msdn.microsoft.com/en-us/library/f7dy01k1.aspx
您还可以使用Reflector: http://www.builderau.com.au/program/asp/soa/Look-inside-NET-DLL-files-with-Reflector/0,339028371,339287377,00.htm
检查类和方法(它支持不同的.Net语言)
答案 9 :(得分:0)
对于本机DLL的this program,Hex-Rays Decompiler(优秀的IDAPro反汇编程序调试器之上的一层)可能尽可能接近。它不会恢复原始代码,而是将反汇编转换为类似C的伪代码。虽然它并不便宜。