正在获取c#程序的已编译asm

本文关键字:编译 asm 程序 获取 | 更新日期: 2023-09-27 18:05:01

可能重复:
检索JIT输出

这可能做到吗?如果可能的话,怎么做?

正在获取c#程序的已编译asm

您可以使用Visual Studio调试器(调试->Windows->反汇编(查看jitted程序集。

如果启动程序时已附加调试器(Visual Studio中的F5(,则当抖动检测到这种情况时,您将看到生成的程序集的非优化版本。

如果您需要jitted程序集的优化、非调试版本,则需要在Release模式下编译程序,并在不附加调试器的情况下启动程序(Visual Studio中的Ctrl+F5(。然后,一旦您知道所需的代码部分已经被jit,就将调试器附加到正在运行的进程。然后,您可以打断并查看经过jitted的程序集。

.NET使用实时编译器。直到最后一刻,也就是方法开始执行之前,才生成机器代码。这使得"捕获ASM"变得非常困难。

如果您只是对它的外观感兴趣,那么在调试时右键单击源代码窗口,然后选择"转到反汇编"。在调试Release版本并使用Tools+Options、Debugger和General重新启用JIT编译器优化器之前,您不会查看"真实"的机器代码。

另一种选择是运行ngen.exe,即.NET的"预编译器"。foo.dll程序集将在c:''windows''assembly或c:''windows''microsoft.NET''assembly目录中生成foo.ni.dll程序集。此.ni.dll映像文件包含jitted机器代码。