您的位置:首页 > 其它

windbg

2015-08-10 17:37 232 查看
 windbg

1.基本概念:DUMP文件

.DUMP文件,也可以叫CORE文件,或者叫进程内存镜像,或者叫转存文件。

.进程的整个内存在某一时刻的镜像。

.通常是在程序异常终了时自动生成,或使用工具从运行中的进程中获取的,反映该进程的一个内存映象(同时加上调试信息),主要是用来调试的。

2 产生dump文件

 windows7之后可以通过注册表,来制定dump文件输出路径和dump文件类型

要开启这个功能需要进行如下配置

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps]

"DumpFolder"="c:\\dumpfile"

"DumpType"=dword:00000002

3 符号库的设置

SRV*E:\windbg\Symbol\SysSymbol*http://msdl.microsoft.com/download/symbols;srv*;E:\windbg\Symbol\UserSymbol

srv*表示是符号服务器,使用了一些复杂ID作为版本标识。对于microsoft的符号文件,使用srv*是没有问题的。对于应用程序符号文件夹,一般不要用srv*,否则导致找不到符号文件。除非使用symstore建立了应用符号服务器。关于symstore参考相关文档

4 WindDbg主要以命令方式工作,主要有三类命令:标准命令,元命令和扩展命令。

标准命令

    标准命令用来提供适用于所有调试目标的基本调试功能。

    所有基本命令都是实现在WinDBG内部的, 执行这些命令时不需要加载任何扩展模块。大多数标准命令是一两个字符或者符号, 只有version等少数命令除。标准命令的第一个字符是不分大小写的, 第二个字符可能区分大小写。迄今为止, WinDBG调试器共实现了130多条标准命令, 分为60多个系列。为了便于记忆, 可以根据功能将标准命令归纳为如下18个子类。

5 用户态调试(命令详情)

!peb

查看进程环境信息,可查看进程所有模块的基地址。

ln

将地址转化成符号,如函数名。

uf

反汇编并显示汇编代码 。

例子:.结合SysLog 定位

System log中

障害が発生しているモジュール名: NvPROBaseAPIMgr.dll、

バージョン: 4.0.0.7、タイム スタンプ: 0x4d5332cb

例外コード: 0xc0000005

障害オフセット: 0x00042ec0

首先找到崩溃模块基地址

0:000> !peb



    1130000 4d5332cb Feb 10 08:35:23 2011 C:\Program Files\NEC\UMF\Operations\Manager\bin\NvPROBaseAPIMgr.dll



通过基地址加偏移地址找到在该模块的哪个位置

0:000> ln 1130000+00042ec0

e:\nvp\si\build\si\src\lib\nvprobaseapi\dalloc.c(78)

(01172eb0)   NvPROBaseAPIMgr!nvdFree+0x10   |  (01172f30) 

NvPROBaseAPIMgr!nvdAlloc

通过反汇编以及起始地址加偏移查看具体哪个语句出错

0:000> uf NvPROBaseAPIMgr!nvdFree

NvPROBaseAPIMgr!nvdFree [e:\nvp\si\build\si\src\lib\nvprobaseapi\dalloc.c @ 73]:

   73 01172eb0(***) 56              push    esi

   76 01172eb1 8b742408        mov     esi,dword ptr [esp+8]

   76 01172eb5 85f6            test    esi,esi

   76 01172eb7 7452            je      NvPROBaseAPIMgr!nvdFree+0x5b (01172f0b)

NvPROBaseAPIMgr!nvdFree+0x9 [e:\nvp\si\build\si\src\lib\nvprobaseapi\dalloc.c @ 76]:

   76 01172eb9 57              push    edi

   76 01172eba 8d9b00000000    lea     ebx,[ebx]

NvPROBaseAPIMgr!nvdFree+0x10(***) [e:\nvp\si\build\si\src\lib\nvprobaseapi\dalloc.c @ 78]:

   78 01172ec0(***) f6460801     test    byte ptr [esi+8],1 

   78 01172ec4 8b3e            mov     edi,dword ptr [esi]

   78 01172ec6 7409            je      NvPROBaseAPIMgr!nvdFree+0x21 (01172ed1)

NvPROBaseAPIMgr!nvdFree+0x18 [e:\nvp\si\build\si\src\lib\nvprobaseapi\dalloc.c @ 79]:

   79 01172ec8 8b4610          mov     eax,dword ptr [esi+10h]

   79 01172ecb 50              push    eax

   79 01172ecc e804e4fbff      call    NvPROBaseAPIMgr!ILT+720(_nvcMemFree (011312d5)



通过e:\nvp\si\build\si\src\lib\nvprobaseapi\dalloc.c(78)

70 //jc dnode のリストを開放する

71 DWORD WINAPI

72 nvdFree(LPNVDNODE dphead)

73 {

74    LPNVDNODE dp, nextdp;

75

76    for (dp = dphead; dp; dp = nextdp) {

77       nextdp = dp->dn_dnext;

78       if (dp->dn_option & DN_COMPNAME) { ★ここでコアダンプ★

79          (void) nvcMemFree(dp->dn_compname);

80       }

81    略
96 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ss