首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >反汇编托管代码问题

反汇编托管代码问题
EN

Stack Overflow用户
提问于 2009-10-13 04:42:48
回答 2查看 2K关注 0票数 1

我正在使用Windbg的!U命令从sos.dll反汇编托管代码(用C#编写,控制台应用程序)。我发现当使用!U反汇编托管函数时,反汇编的IL代码只包含我进行的函数调用,而对于其余部分(非函数调用C#代码),例如a=a*2和C#中的foreach循环,仅显示本机汇编语言代码,这是正确的预期行为吗?

我的问题是,我想知道!U是否能够使用所有代码(除了函数调用代码)将托管代码二进制DLL反汇编到IL中?

先谢谢你,乔治

EN

回答 2

Stack Overflow用户

发布于 2009-10-13 05:26:34

如果你想在调试时转储IL,你可以在SOS中使用!dumpil命令。它接受一个MethodDesc指针作为输入,因此您必须首先获取该指针。

获取MethodDesc指针的一种方法是使用!name2ee命令。

例如,如果您的Bar类型中有一个方法Foo (在程序集ClassLibrary1中),那么可以像这样使用!name2ee

代码语言:javascript
运行
复制
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,如下所示

代码语言:javascript
运行
复制
0:000> !dumpil 00163450
ilAddr = 73532050
IL_0000: ldstr "Foo"
IL_0005: call System.Console::WriteLine
票数 9
EN

Stack Overflow用户

发布于 2009-10-13 04:49:10

我不认为WinDbg在IL级别上工作。您可能必须使用ildasm来进行IL反汇编。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1558221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档