使用 WinDbg 附加到 .NET 程序时如何查看 JITted 方法的反汇编?
How can I view disassembly of a JITted method in a .NET program when attaching to it with WinDbg?
类似于this question asking the same but in VS,请问如何使用WinDbg查看JITted方法的反汇编?
将其分成两部分,在这两种情况下,我想要反汇编的方法相同 SomeNamespace.SomeClass.Foo()
。
- 我们只有可执行文件
program.exe
,并希望通过 WinDbg 的 Open Executable
. 运行 它
- 已经有一个 运行ning 过程,我想在其中检查相同的 JITted 方法。 (假设我们无法控制进程如何启动)
根据我的理解,JIT 运行 是第一次调用方法。如果这是真的,在 2.
中可能是该方法尚未 JIT 的情况。在这种情况下,有没有办法强制 JIT 在方法上 运行,以便我们可以检查结果?
TL;DR:如何使用 WinDbg 反汇编 JITted 方法?
您可以通过调用 PrepareMethod
强制执行 JIT 编译
在WinDbg和SOS中可以使用u
命令查看反汇编。参见示例 here.
最后,也许你可以试试DumpMiner。这个UI工具,让你在不懂WinDbg的情况下查看jitted方法的反汇编
我不知道强制对方法进行 JIT 编译的方法,但是 sosex' 命令 !sosex.mbp
(设置托管断点)在方法尚未编译时也有效,并且它会在 JIT 编译后立即中断。
之后,SOS 命令 !ip2md
、!dumpil
和 !u
可能会有帮助。如果你知道JITted代码地址,你也可以在上面做一个nativeu
SOSEX作者@Steve Johnson在评论中提到,SOSEX还有命令!mu
("managed unassemble")和!muf
("managed unassemble function" ) 可以帮助处理已经 JIT 的函数。
类似于this question asking the same but in VS,请问如何使用WinDbg查看JITted方法的反汇编?
将其分成两部分,在这两种情况下,我想要反汇编的方法相同 SomeNamespace.SomeClass.Foo()
。
- 我们只有可执行文件
program.exe
,并希望通过 WinDbg 的Open Executable
. 运行 它
- 已经有一个 运行ning 过程,我想在其中检查相同的 JITted 方法。 (假设我们无法控制进程如何启动)
根据我的理解,JIT 运行 是第一次调用方法。如果这是真的,在 2.
中可能是该方法尚未 JIT 的情况。在这种情况下,有没有办法强制 JIT 在方法上 运行,以便我们可以检查结果?
TL;DR:如何使用 WinDbg 反汇编 JITted 方法?
您可以通过调用 PrepareMethod
强制执行 JIT 编译在WinDbg和SOS中可以使用u
命令查看反汇编。参见示例 here.
最后,也许你可以试试DumpMiner。这个UI工具,让你在不懂WinDbg的情况下查看jitted方法的反汇编
我不知道强制对方法进行 JIT 编译的方法,但是 sosex' 命令 !sosex.mbp
(设置托管断点)在方法尚未编译时也有效,并且它会在 JIT 编译后立即中断。
之后,SOS 命令 !ip2md
、!dumpil
和 !u
可能会有帮助。如果你知道JITted代码地址,你也可以在上面做一个nativeu
SOSEX作者@Steve Johnson在评论中提到,SOSEX还有命令!mu
("managed unassemble")和!muf
("managed unassemble function" ) 可以帮助处理已经 JIT 的函数。