C# 为什么VS 2012 C的拆卸窗口显示的是x64组件而不是IL?

C# 为什么VS 2012 C的拆卸窗口显示的是x64组件而不是IL?,c#,visual-studio-2012,disassembly,C#,Visual Studio 2012,Disassembly,当我将VisualStudio2012的反汇编窗口用于C#项目时,我希望看到IL代码。但它显示的是x64组件。这是由抖动引起的吗?下面的程序集是已分解的程序集代码的一部分 public static void Main() { 00000000 sub rsp,1C8h 00000007 xor eax,eax 00000009 mov qword ptr [rsp+60h],rax 0000000e mov

当我将VisualStudio2012的反汇编窗口用于C#项目时,我希望看到IL代码。但它显示的是x64组件。这是由抖动引起的吗?下面的程序集是已分解的程序集代码的一部分

        public static void Main() {
00000000  sub         rsp,1C8h 
00000007  xor         eax,eax 
00000009  mov         qword ptr [rsp+60h],rax 
0000000e  mov         qword ptr [rsp+58h],rax 
00000013  mov         qword ptr [rsp+50h],rax 
00000018  mov         qword ptr [rsp+38h],rax 
0000001d  mov         qword ptr [rsp+30h],rax 
00000022  mov         qword ptr [rsp+28h],rax 
00000027  mov         qword ptr [rsp+20h],rax 
0000002c  xor         eax,eax 
0000002e  mov         dword ptr [rsp+4Ch],eax 
00000032  mov         dword ptr [rsp+48h],eax 
00000036  mov         dword ptr [rsp+44h],eax 
0000003a  mov         dword ptr [rsp+40h],eax 
0000003e  mov         rax,7F8786239C0h 
00000048  mov         eax,dword ptr [rax] 
0000004a  test        eax,eax 
0000004c  je          0000000000000053 
0000004e  call        000000005FA4647C 

dissembly窗口查看直接在处理器上运行的代码。因此,它将显示汇编程序,而不是IL


如果您想查看C#方法的原始IL,请查看ildasm或reflector之类的工具当前的C#.NET调试器始终显示方法的本机代码(至少对于x86和x64)。这是JIT从IL生成的代码。如果您想查看IL的方法,我建议您查看。

您的期望是错误的。“反汇编”窗口显示的是汇编代码,而不是IL。如果您想要IL,请使用ILDasm、ILSpy等反编译器。是的,jitter的工作是将IL转换为实际的可执行代码。反汇编窗口显示了该代码。这不是很准确。“反汇编”窗口使用的实现提供的信息,这些信息可以是本机代码,但也可以很容易地使用。如果让我猜的话,我会说微软选择了用汇编代码实现接口,这样开发人员可以更容易地回答。@280Z28正确,但在CLR调试引擎(实际上是本机+CLR引擎)中,这将始终返回汇编代码。很多时候我希望它会返回IL,但不幸的是它没有