为什么反汇编 native Win32 镜像(例如,内置 C/C++)比反汇编 .NET 应用程序困难得多?
主要原因是什么?因为什么?
最佳答案
.net 程序集内置于 Common Intermediate Language .当 CLR 编译它以在适当的系统上运行时,它不会被编译,直到它即将被执行。 CIL 有很多元数据,因此它可以编译到不同的处理器架构和不同的操作系统上(在 Linux 上,使用 Mono)。类和方法基本保持不变。
.net 还允许反射,这需要将元数据存储在二进制文件中。
C 和 C++ 代码在编译时会编译到选定的处理器架构和系统。为 Windows 编译的可执行文件不能在 Linux 上运行,反之亦然。 C 或 C++ 编译器的输出是汇编指令。源代码中的函数可能不作为二进制函数存在,但以某种方式进行了优化。编译器也可以有相当激进的优化器,它们将采用逻辑结构化的代码并使其看起来非常不同。代码会更高效(在时间或空间上),但会使其更难逆向。
关于c# - 为什么原生Win32难拆,.NET app拆容易?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14285025/