我正在使用 Windbg 来反汇编托管代码(用 C# 编写,控制台应用程序)!U
来自 sos.dll 的命令。我在使用时发现!U
要反汇编托管函数,反汇编的 IL 代码仅包含我所做的函数调用,其余部分(非函数调用 C# 代码),例如a=a*2
, and foreach
在 C# 中循环,仅显示本机汇编语言代码,这是正确的预期行为吗?
我的问题是,我想知道 !U 是否能够将托管代码二进制 DLL 与所有代码(除了函数调用代码)反汇编为 IL?
提前致谢,
乔治
如果你想在调试时转储 IL,你可以使用!dumpil
来自 SOS 的命令。它接受 MethodDesc 指针作为输入,因此您必须首先获取该指针。
获取 MethodDesc 指针的一种方法是使用!name2ee
命令。
例如,如果你有一个方法Foo
在类型中Bar
(装配中ClassLibrary1
) use !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
转储方法的 ILFoo
像这样
0:000> !dumpil 00163450
ilAddr = 73532050
IL_0000: ldstr "Foo"
IL_0005: call System.Console::WriteLine
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)