gpt4 book ai didi

clr - 由于堆栈机 - 寄存器机的差异,混淆的 C# 或 Java 比 C 更容易反编译吗?还是有其他原因?

转载 作者:行者123 更新时间:2023-12-04 22:34:33 25 4
gpt4 key购买 nike

我看到有人说,通过调用框架 api(例如 String)来简化混淆的 C# 和 Java 的反编译。但是,这对我来说不太有意义,因为 C 程序不应该也明显调用一些标准库,这相当于 C# apis 吗?

我还看到它说寄存器机(将从 C 运行汇编的硬件)和堆栈机(将运行字节码的虚拟机)之间的区别对于反编译的复杂性很重要。

那么堆栈/注册机问题是这里的主要问题吗?假设如果 CLR 虚拟机被重新实现为注册机,那么 C# 字节码会突然变得像 C 可执行文件一样难以反编译吗?或者还有其他一些主要的复杂性差异不会在这种平台大修中消失?

最佳答案

堆栈机和寄存器机之间没有区别,从两种表示中解构表达式树相对容易。

.NET 和 JVM 很容易反编译,主要是因为元数据:类型和方法名称等。

使用剥离的 native 可执行文件,您将获得所有乐趣:函数没有有意义的名称,没有明确的数据类型,加载内联(然后被进一步优化严重破坏)代码,展开的循环,不可约的控制流,展开的尾部电话等。

在字节码中,大多数此类优化尚未完成(将它们留给 JIT),因此与移除元数据并应用优化相比,它更接近原始源。无论是堆栈机、基于寄存器、线程化的 Forth 代码还是其他任何代码。

关于clr - 由于堆栈机 - 寄存器机的差异,混淆的 C# 或 Java 比 C 更容易反编译吗?还是有其他原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10533903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com