gpt4 book ai didi

c# - 是否有用于 MSIL 结果的工具

转载 作者:行者123 更新时间:2023-11-30 12:31:10 24 4
gpt4 key购买 nike

我对 MSIL 工作非常好奇。据我了解,在编译时,CLR 将其代码转换为 MSIL,以提供一些优化,这些优化随后由 JIT 转换为机器代码。

例如,如果我们有:

    using (TextWriter w = File.CreateText("log.txt"))
{
w.WriteLine("This is line one");
}

它将在 MSIL 中转换为以下代码:

    TextWriter w = File.CreateText("log.txt");
try
{
w.WriteLine("This is line one");
}
finally
{
bool flag = w == null;
if (!flag)
{
w.Dispose();
}
}

我不确定它是否会完全像那样翻译,但肯定会翻译成类似的东西。

重点是,我正在尝试研究 MSIL 优化。到目前为止,我发现 MSIL 已转换为 asm 代码,这对我来说不是那么可读。

是否有任何工具可以显示 C# 代码甚至伪代码中已翻译的 MSIL?

非常感谢引用和相关链接。

附言

我写的是上面看到的:

    using (TextWriter w = File.CreateText("log.txt"))
{
w.WriteLine("This is line one");
}

并编译它。然后我使用 Reflector 查看代码,我看到了我编写的相同代码,而不是查看一些优化。

我使用了具有相同代码的 LINQPad。我发现 MSIL 输出是:

    IL_0001:  ldstr       "log.txt"
IL_0006: call System.IO.File.CreateText
IL_000B: stloc.0 // w
IL_000C: nop
IL_000D: ldloc.0 // w
IL_000E: ldstr "This is line one"
IL_0013: callvirt System.IO.TextWriter.WriteLine
IL_0018: nop
IL_0019: nop
IL_001A: leave.s IL_002C
IL_001C: ldloc.0 // w
IL_001D: ldnull
IL_001E: ceq
IL_0020: stloc.1 // CS$4$0000
IL_0021: ldloc.1 // CS$4$0000
IL_0022: brtrue.s IL_002B
IL_0024: ldloc.0 // w
IL_0025: callvirt System.IDisposable.Dispose
IL_002A: nop
IL_002B: endfinally

从这段代码中我们看到了 System.IDisposable.Dispose,它看起来像是优化的一部分。我的目的是想看看 C# 代码或伪代码。

最佳答案

我会推荐 Telerik JustDecompile。它将“永远免费”。

在历史上很长一段时间里都有 Lutz 的“The Reflector” 罗德。但它现在归 RedGate 所有。你仍然可以获得它 价格不菲。

关于c# - 是否有用于 MSIL 结果的工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14285213/

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