这篇将讲述 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 指令的重要性了
相关文章
- Jmeter 快速入门教程(三-3) -- 使用参数化
- 为什么spring单例要使用三级缓存
- 【react 条件渲染】在render的html中使用 三元运算符 进行条件渲染
- Android中三种计时器Timer、CountDownTimer、的使用
- 8050型号三极管,基极电流为15mA应使用多大电阻?如何选择合适的三极管?
- C++第三方库【JSON】nlohman/json-使用
- 关于 Spring Boot 后端项目使用 Maven 打包命令、JAR/WAR 对比、内嵌服务器与第三方服务器对比,以及热部署配置的详细说明
- vi编辑器的学习使用(三)
- [原]调试实战——使用windbg调试崩溃在ole32!CStdMarshal::DisconnectSrvIPIDs
- [原]调试实战——使用windbg调试崩溃在ComFriendlyWaitMtaThreadProc