What types of executables can be decompiled?我认为Java可执行文件(jar文件)对于反编译和获取源代码很简单。 那其他语言呢? .net和所有? 哪些所有语言只能编译为可反编译的代码? 通常,像Java,C#和VB.NET这样的语言相对容易反编译,因为它们被编译为中间语言,而不是纯机器语言。以IL形式,与编译为机器语言的C代码相比,它们保留的元数据更多。 从技术上讲,您并没有获得原始的源代码,而是对源代码进行了一些改动,在编译时会将其返回给您。它与源代码不同,因为注释,注释和编译器指令之类的内容通常不会被带入已编译的代码中。
托管语言可以很容易地反编译,因为可执行文件必须包含很多元数据以支持反射。 .NET非常容易反编译。最好的工具是RedGate最近收购的.NET反射器。 如果将VB6编译为pcode,也可以使用P32Dasm将其反编译为几乎完整的源,还可以使用Flare之类的东西将Flash(或动作脚本)反编译为完整的源 大多数语言都可以反编译,但是某些语言比其他语言更容易反编译。 .Net和Java将有关原始程序的更多信息放在可执行文件中(方法名,变量名等),因此您可以获取更多原始信息。 例如,C ++会将变量和函数等转换为内存地址(是的,我知道这是一个简单的简化),因此反编译器将不知道调用了什么东西。但是,尽管如此,您仍然可以获得程序的一些结构。 |