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 =
    7634df40 comdlg32!GetFileVersionInfoW =
    76328471 comdlg32!VerifyOpen =
    .......
    .......


    至此你应该了解 ld 指令的重要性了


你可能感兴趣的:(Windows操作系统,windebug)