dump文件怎么看编码

一、背景

相信有很多朋友在遇到应用程序各种奇葩问题后,拿下来一个dump文件,辛辛苦苦分析了大半天,终于在某一个线程的调用栈上找到了一个可疑的方法,但 www.58yuanyou.comwindbg 常常是以 汇编 的方式显示方法代码的,可惜的是,现如今的汇编,有多少像我们这些速成系码农还看的懂呢?

接下来尖锐的问题就来了,如何将这些汇编代码转成 C# 源代码,如果转不成源代码转成 IL代码也好呀,起码我努努力还是能试着看的懂的。

本篇我就来分享下如//www.58yuanyou.com何把 dump 中的方法源码提取出来。

二、从 dump 文件中提取源代码

1、案例演示

为了能够演示方便,我用 .netcore 3.1 写了一个简单的demo,代码如下:

namespaceConsoleApp6

{

classProgram

{

staticvoidMain( string[] args )

{

Run;

}

staticvwww.58yuanyou.comoidRun( )

{

Console.WriteLine( "hello world!");

Console.ReadLine;

}

}

}

将程序跑起来后,使用 任务管理器 , adplus , procdump 随便哪一个抓取 dump 都可以。

2、使用 lm + savemodule 命令提取

如果你的程序足够简单,可以直接用 lm 获取程序中所有的模块,然后使用 savemodule //www.58yuanyou.com将模块导出为 exe/dll 物理文件,如下所示:

  • 使用 lm 提取出原由网所有模块

0: 000> lm

start end module name

000002c2` 264b0000 000002c2` 264b8000 ConsoleApp6_2c2264b0000 (deferred)

00007ff7`e4a50000 00007ff7` e4a7f000 ConsoleApp6( deferred)

00007ffa`a4b50000 00007ffa`a546d000 System_Private_CoreLib( deferred)

00007ffa`a5470000 00007ffa`a59df000 coreclr( deferred)

00007ffa`df070000 00007ffa`df1b2000 clrjit( deferred)

...

可以隐约的看到,我有一个名为 ConsoleApp6_2c2264b0000 的模块,这就是我要提取的 ConsoleApp6.exe ,顺便提一下,那个很碍眼的 ConsoleApp6 (deferred) 是 PE 文件,要问我怎么知道的?试一下就好啦

内容版权声明:除非注明原创否则皆为转载,再次转载请注明出处。

文章标题: dump文件怎么看编码

文章地址: www.58yuanyou.com/jiqiao/219404.html

相关推荐