是否有一个windbg命令来检索转储的module_name



我正在使用windbg,使用我在Internet上找到的脚本来研究C 应用程序的转储文件。

该脚本启动了两个命令:一个确定转储中存在的所有符号(至少是我认为的),一个用于显示所有变量的内存地址和类型。

第一个命令:x /2 *!*

结果包含以下条目:

0042da68          <application>!CMap<int,int,CStringArray *,CStringArray *>
...
74c06448          mfc110u!CStringArray

第二个命令更复杂,并给出以下结果:

006cabe0    <application>!CMap<int,int,CStringArray *,CStringArray *>
...
006f0280    mfc110u!CStringArray

我对CMapCStringArray对象的大小感兴趣,因此我要启动以下命令:

dt <application>!CMap<int,int,CStringArray *,CStringArray *> m_nCount 006cabe0
dt <application>!CStringArray m_nSize 006f0280    

这很好,我得到了我需要的信息。
另外,这似乎很好:

dt CStringArray m_nSize 006f0280    

但是这是失败的:

dt CMap<int,int,CStringArray *,CStringArray *> m_nCount 006cabe0

这意味着我需要获取dumpfile的应用名称(似乎在某种格式期间已经消失)。

我可以使用!analyze -v命令(在MODULE_NAME上执行grep)来检索此功能,但这看起来很糟糕,只是为了获取应用程序的名称。

有人知道我需要运行的windbg命令以了解我正在调查的转储的应用吗?

可以使用 |

找到可执行的可执行讨论。
0:000> |
.  0    id: 13ac    create  name: C:Program Files (x86)Notepad++notepad++.exe

但是,可执行名称可能与其模块名称有显着不同:

0:000> lm m note*
Browse full module list
start    end        module name
01150000 013bf000   notepad__   (no symbols)  

lm的输出中,我们可以看到与模块关联的地址。如果我们能够将入口点映射到特定模块,我们将有一个解决方案。

幸运的是,有$exentry为我们提供了入口点,而lm接受了lm a <address>的地址,因此我们有:

0:000> lm a $exentry
Browse full module list
start    end        module name
01150000 013bf000   notepad__   (no symbols)  

这仍然需要大量解析,但是您也可以使用lm 1m方法:

0:000> lm 1ma $exentry
notepad__

相关内容

最新更新