|
本帖最后由 diddom 于 2012-6-3 06:03 编辑
主题: 紫水晶 WinDBG 使用教学(三)
这篇将讲述 lm, ld, x 指令
以及用 ld 指令下载和装载 Symbol File
一. 当你建立了 Kernel Debug (Local Mode) 的 Debuggee连接后,
(假设你已经设定好 Symbol File Path)
在 WinDBG 命令列输入 .reload, 重新 Reload Module
然后使用 lm 指令, [Enter]之後, 出现如下讯息
lkd> lm
start end module name
00e60000 00e96000 kext (deferred)
01000000 01096000 windbg (deferred)
01120000 0113d000 ndiskd (deferred)
017c0000 0187b000 kdextx86 (deferred)
.....
.....
因我们是在 Kernel Debug, 所以使用 lm 指令後
你将会看到列出系统已经载入的驱动以及 WinDBG 载入的 Dll file
(这里假设你还没下载全部的 Symbol File)
这时我们可以利用 ld 这指令来帮我们下载 Symbol File
在 WinDBG 命令列输入 ld *, 米字号 "*" 代表全部的意思
这时你会在命令列左边的提示字元看到 BUSY (WinDBG正在下载)
完毕后,
我们再次使用 lm 查看一下
01000000 01096000 windbg (pdb symbols) c:\windows\symbols\windbg.pdb\A4400557801246B3B5C61DD7C782010D1\windbg.pdb
014c0000 014dd000 ndiskd (pdb symbols) c:\windows\symbols\ndiskd.pdb\5E27749CB56344DDA1967760098DCF701\ndiskd.pdb
01520000 015db000 kdextx86 # (pdb symbols) c:\windows\symbols\kdextx86.pdb\421A8D241\kdextx86.pdb
01600000 01636000 kext (pdb symbols) c:\windows\symbols\kext.pdb\31003F7986F74F9D9E48751A39FCC0321\kext.pdb
01900000 0196b000 exts (pdb symbols) c:\windows\symbols\exts.pdb\604EB7F6149B44AEB2CEBE19825DA0B61\exts.pdb
01d00000 01d48000 symsrv (pdb symbols) c:\windows\symbols\symsrv.pdb\D7739E23E6054BC88758AA0321E24D9C1\symsrv.pdb
02000000 02386000 dbgeng (pdb symbols) c:\windows\symbols\dbgeng.pdb\A2230C4AE916481CAC103CADA24289811\dbgeng.pdb
03000000 03121000 dbghelp (pdb symbols) c:\windows\symbols\dbghelp.pdb\99A1A8F3877B4CA5BEEADFB737F52EB61\dbghelp.pdb
嘿嘿~ WinDBG 已经乖乖的帮我们下载和装载好了 Symbol File
二. 一般我们都是利用 Kernel Debug 快速的建立一个 Debuggee连接
然后查看指定的 Windows 的档案 (这里假设要查看 comdlg32, 也已经下载好 Symbol File)
但要查看之前一定要用 ld 这指令载入 comdlg32.DLL
在 WinDBG 命令列输入
lkd> ld comdlg32
No modules matched 'comdlg32'
为何还会出 No modules matched 的错误讯息
这在刚学 WinDBG 的人会遇到的困境
为什麽?
因为 ld 这指令只对已经载入的 module 去帮你找出符合的 Symbol File 载入
而 Kernel Debug 并没有载入 comdlg32.dll
这样要怎办呢?
没错, 用我上一篇文章教的指令 .load
lkd> .load comdlg32
然后 Reload Module 一下
lkd> .reload
再来
lkd> ld comdlg32
Symbols loaded for comdlg32
这时我们就可以大大方方的用 x 指令查看 comdlg32 的资料了
lkd> x comdlg32!*
763510e0 comdlg32!cxVScroll = <no type information>
7634df40 comdlg32!GetFileVersionInfoW = <no type information>
76328471 comdlg32!VerifyOpen = <no type information>
.......
.......
至此你应该了解 ld 指令的重要性了
如有错误,请各位大侠帮忙指正一下, thx |
评分
-
查看全部评分
|