反汇编托管代码问题
我正在使用Windbg使用来自sos.dll的Windbg的!U
命令来组装托管代码(用C#编写,控制台应用程序)。 我发现在使用!U
来组装托管函数时,反汇编的IL代码只包含我所做的函数调用,对于其余部分(非函数调用C#代码),例如a=a*2
,以及C#中的foreach
循环,只显示本机汇编语言代码,这是正确的预期行为吗?
我的问题是,我想知道是否!U能够将所有代码(除了函数调用代码)反汇编管理代码二进制DLL到IL中吗?
提前谢谢,乔治
如果要在调试时转储IL,可以使用SOS中的!dumpil
命令。 它需要一个MethodDesc指针作为输入,因此您必须先获取它。
获取MethodDesc指针的一种方法是使用!name2ee
命令。
因此,例如,如果你在类型Bar
有一个方法Foo
(在程序集ClassLibrary1
)使用!name2ee
就像这样
0:000> !name2ee ClassLibrary1!ClassLibrary1.Bar.Foo Module: 001630bc (ClassLibrary1.dll) Token: 0x06000001 MethodDesc: 00163450 <=== HERE Name: ClassLibrary1.Bar.Foo() JITTED Code Address: 007500f0
接下来,您可以执行!dumpil 00163450
以像这样转储方法Foo
的IL
0:000> !dumpil 00163450 ilAddr = 73532050 IL_0000: ldstr "Foo" IL_0005: call System.Console::WriteLine
我不认为WinDbg在IL级别工作。 您可能必须使用ildasm
来获取IL反汇编。
上述就是C#学习教程:反汇编托管代码问题分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1014912.html