可以反编译哪些类型的可执行文件?

时间:2008-09-04 12:47:39

标签: decompiling

我认为java可执行文件(jar文件)对于反编译和获取源代码是微不足道的。

其他语言怎么样? .net和所有?

哪些语言只能编译为可反编译的代码?

5 个答案:

答案 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)

VB6如果编译成pcode也可以使用P32Dasm反编译成几乎完整的源代码,Flash(或actionscript)也可以使用Flare

之类的东西反编译成完整的源代码。