c# - 为什么原生Win32难拆,.NET app拆容易?

标签 c# c++ .net winapi native

为什么反汇编 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/

相关文章:

C++ 共享对象

.net - 如何获取.NET分配的IP地址和端口号

c# - Azure函数应用程序: TimerTrigger not Firing when Deployed

c# - BalloonTipClicked(关闭/显示)发件人/EventArgs

c# - 转换为嵌套类格式

c++ - NS2-协议(protocol)修改-AODV

java - 来自 Java 的 Qt Android : How to call Toast. makeText?

c# - Expression.MemberInit -- 最佳重载方法匹配有一些无效参数

c# - 调用外部 mvc Controller

.net - 为什么 XmlSerializer 不序列化我的数组?