diassemble problema di codice gestito

Sto usando Windbg per scomporre il codice gestito (scritto in C #, applicazione console) usando il comando di Windbg !U da sos.dll. Trovo che quando si usa !U per smontare una funzione gestita, il codice IL diassemblato contiene solo chiamate di funzione che ho fatto, e per parti rimanenti (codice C # di chiamata non funzionale), ad esempio a=a*2 , e foreach loop in C #, viene mostrato solo il codice del linguaggio assembly nativo, è il comportamento previsto corretto?

La mia domanda è, voglio sapere se! U è in grado di duplicare DLL binario di codice gestito in IL con tutto il codice (oltre al codice di chiamata della funzione)?

Grazie in anticipo, George

Se si desidera eseguire il dump di IL durante il debug, è ansible utilizzare il comando !dumpil di SOS. Ci vuole un puntatore MethodDesc come input, quindi devi prima ottenerlo.

Un modo per ottenere il puntatore MethodDesc usa il comando !name2ee .

Ad esempio, se hai un metodo Foo nel tipo Bar (nell’assembly ClassLibrary1 ) usa !name2ee come questo

 0:000> !name2ee ClassLibrary1!ClassLibrary1.Bar.Foo Module: 001630bc (ClassLibrary1.dll) Token: 0x06000001 MethodDesc: 00163450 <=== HERE Name: ClassLibrary1.Bar.Foo() JITTED Code Address: 007500f0 

In seguito, puoi fare un !dumpil 00163450 per scaricare l'IL per il metodo Foo come questo

 0:000> !dumpil 00163450 ilAddr = 73532050 IL_0000: ldstr "Foo" IL_0005: call System.Console::WriteLine 

Non penso che WinDbg funzioni a livello di IL. Probabilmente ildasm usare ildasm per ottenere un disassemblaggio di IL.