我认为java可执行文件(jar文件)对于反编译和获取源代码是微不足道的。
其他语言怎么样? .net和所有?
哪些语言只能编译为可反编译的代码?
答案 0 :(得分:10)
通常,Java,C#和VB.NET等语言相对容易反编译,因为它们被编译为中间语言,而不是纯机器语言。在它们的IL形式中,它们在编译为机器语言时保留了比C代码更多的元数据。
从技术上讲,您没有获得原始源代码,但源代码的变体在编译时将为您提供已编译的代码。它与源代码不同,因为注释,注释和编译器指令之类的东西通常不会被转移到已编译的代码中。
答案 1 :(得分:5)
可以轻松地对托管语言进行反编译,因为可执行文件必须包含大量元数据才能支持reflection 像C ++这样的语言可以编译为本机代码。在编译\翻译过程中,程序结构可以完全改变 编译器可以轻松替换代码中的\ merge \ delete部分。原始代码和编译代码之间没有1对1的关系。
答案 2 :(得分:2)
.NET很容易反编译。最好的工具是RedGate最近获得的.NET reflector。
答案 3 :(得分:1)
大多数语言都可以反编译,但有些语言比其他语言更容易反编译。 .Net和Java在可执行文件(方法名称,变量名称等)中提供了有关原始程序的更多信息,因此您可以获得更多原始信息。
例如,C ++会将变量和函数等转换为内存地址(是的,我知道这是一个严格的简化),因此反编译器不会知道调用了什么内容。但是你仍然可以得到一些程序的结构。答案 4 :(得分:1)