如何提取C#方法最终的x86/x64汇编代码?无需Visual Studio调试
无需调试单步提取C#方法的x86/x64汇编代码的方法
嘿,我有几个实用的办法可以帮你不用调试单步就能拿到C#方法的最终x86/x64汇编代码,亲测好用:
方法1:利用Visual Studio的内置生成功能
这是最省心的本地方案,不用额外工具:
- 右键你的C#项目,选择「属性」→「生成」→「高级」
- 在弹出的窗口里勾选「生成反汇编代码」,还可以根据需要勾选「包含源代码」「包含IL代码」来让汇编文件更易读
- 重新编译项目,在输出目录(比如
bin/Debug/net6.0)里会生成和程序集同名的.asm文件,打开就能看到对应架构的汇编代码,每一行汇编还会对应标注C#源代码,一目了然
方法2:用RyuJIT的JitDump功能直接输出汇编
这个方法可以拿到JIT实时编译后的最终汇编(毕竟C#是JIT编译的,发布版和调试版的汇编可能有差异):
- 设置环境变量:
- 如果你想查看特定方法
MyApp.MyClass.MyMethod的汇编,设置COMPlus_JitDump=MyApp.MyClass.MyMethod - 如果想输出所有方法的汇编,设置
COMPlus_JitDump=*
- 如果你想查看特定方法
- 运行你的C#程序(控制台程序直接在命令行跑,桌面程序正常启动即可),RyuJIT会把指定方法的汇编代码输出到控制台或者日志文件里
- 注意:这个方法需要你的程序基于.NET Core/.NET 5+,如果是.NET Framework,对应的环境变量是
COMPLUS_JitDump(大小写有区别)
方法3:用dnSpy直接查看汇编
dnSpy是一款强大的.NET反编译工具,无需调试就能查看JIT后的汇编:
- 打开dnSpy,加载你的编译后的程序集(
.dll或.exe) - 在左侧导航栏找到你要查看的方法,右键点击选择「查看」→「反汇编」
- 在弹出的窗口里,你可以切换x86/x64架构(如果程序支持),直接看到对应方法的最终汇编代码,还能对比IL代码和C#代码
方法4:通过dotnet dump分析运行中的程序
如果你的程序已经在运行,不想中断它,这个方法很合适:
- 先安装dotnet dump工具:
dotnet tool install -g dotnet-dump - 找到运行中程序的进程ID(可以用任务管理器或者
dotnet ps命令) - 生成dump文件:
dotnet dump collect -p <进程ID> - 进入dump分析模式:
dotnet dump analyze <dump文件名> - 在分析命令行里输入
!dumpjit <方法的元数据令牌>或者!name2ee <程序集名> <方法全名>找到方法后,再用!dumpjit输出汇编代码
内容的提问来源于stack exchange,提问作者tgiphil
相关产品推荐
相关产品推荐

