gpt4 book ai didi

reflector - 为什么人们要反汇编 .NET (CLR) 二进制文件?

转载 作者:行者123 更新时间:2023-12-03 18:21:26 24 4
gpt4 key购买 nike

我对 .NET 有点陌生,但对编程并不陌生,而且我对反汇编编译的 .NET 代码的趋势和兴奋感到有些困惑。似乎毫无意义。

.NET 的高级易用性是我使用它的原因。我在资源有限的环境中编写了 C 和真正的(硬件处理器)程序集。这就是为什么要花精力在这么多细致的细节上,以提高效率。在 .NET 领域,如果您浪费时间深入研究最神秘的实现细节,就有点违背了拥有高级面向对象语言的目的。在使用 .NET 的过程中,我调试了常见的性能问题和奇怪的竞争条件,我通过阅读自己的源代码完成了这一切,从来没有想过编译器生成的是哪种中间语言。例如,很明显 for(;;) 循环将比数组上的 foreach() 更快,考虑到 foreach() 将使用枚举对象和方法调用来前进到 each 下一次而不是简单的变量增量,这很容易通过运行几百万次的紧密循环来证明(不需要反汇编)。

真正让反汇编 IL 变得愚蠢的是它不是真正的机器代码。是虚拟机代码。我听说有些人实际上喜欢移动指令来优化它。你在跟我开玩笑吗?即时编译的虚拟机代码甚至无法以本地编译代码的速度执行简单的 for(;;) 循环。如果您想从处理器中挤出每个最后一个周期,请使用 C/C++ 并花时间学习真正的汇编。这样一来,您花时间了解大量低级细节实际上是值得的。

那么,除了有太多时间,人们为什么要反汇编 .NET (CLR) 二进制文件?

最佳答案

了解各种高级语言的编译器实际上对您的源代码进行了哪些操作是在您逐渐掌握某种环境时需要掌握的一项重要技能,就像了解数据库引擎将如何计划执行您的各种 SQL 查询一样可以折腾他们。以熟练的方式使用某种抽象层次,熟悉(至少)它下面的层次是一件很好的事情;见例如some notes on my talk on the subject of abstractionthe slides for that talk ,以及我在演讲中提到的 Joel Spolsky 的“泄漏抽象定律”。

关于reflector - 为什么人们要反汇编 .NET (CLR) 二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/930442/

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