-
Win7系统中使用WinDbg与虚拟机调试驱动程序的操作方法和要点(4)
- 作者:宋惜瑶 分类:win7 发布时间:2017-10-12 21:37:56
断点指令:BP,BM,BA,BL,BC,BD,BE BP 在指定的地址设置断点 bp notepad!WinMain,在Notepad的WinMain函数处下断点。 断点的位置可以用符号表示,也以直接使用...
断点指令:BP,BM,BA,BL,BC,BD,BE
BP 在指定的地址设置断点
bp notepad!WinMain,在Notepad的WinMain函数处下断点。
断点的位置可以用符号表示,也以直接使用地址及Windbg的Pseudo-Register(虚拟寄存器),如$exentry表示进程的入口点,可以使用bp @$exentry在进程的入口点设置断点,对于Notepad当前入口点为01006420,也可以直接 bp 01006420,等效于bp notepad!WinMainCRTStartup.
BM 使用模式匹配设置断点,需要符号表支持
bm 值一提,在符号表合法的情况下(符号表中包含私有符号的时候),bm可能通过模式一次下多个断点,bm mydriver!FastIo*指定可以将所有与FastIo*模式相匹配的函数下断点,如FastIoRead,FastIoWrite等。但是bm 需要full or export symbols支持,Microsoft的提供的符号表不是都支持的,通常我们自己编译的程序的符号表(Windbg显示为private pdb symbols)默认是支持的。
BA (Break on Access)
顾名思义,对内存访问下断点。对于在多核或多处理器调试的时候很有用,对于调试多线程也很有用,应该说用处很多,比如对一个全局变量设置断点,ba mydriver!gMonitoredDevices,如果如果你认为这个变量的值被莫名的修改了,相信通过BA设置的断点,你很快就能找到是谁修改的。
BL(List),BC(Clear),BE(Enable),BD(Disable)
这四个指令是分别用于列表,清除,开启和禁用断点,也是使用非常频繁的指令。
条件断点
以上所提到的断点指令通过与J指令很容易形成条件断点。比如:
bp USER32!GetMessageW “r $t1=poi(esp+4);r $t2=poi(@$t1+4); j(@$t2 = 0x102 ) ‘du @$t1+8 L2;gc’;‘gc’”
这个条件断点,截取WM_CHAR消息,并将字符(包括中文)显示出来。
条件断点的最简形式:bp Address “j (Condition) ‘OptionalCommands’; ‘gc’ ”
Address是指令的地址,Condition是一个条件表达式,如果@eax=1,‘OptionalCommands’是在断点被击中并且表达式成立时要执行的指令;gc指定是从一个条件断点返回,是不可少的一部分。
数据查看指令 d{a|b|c|d|D|f|p|q|u|w|W}
d{b|c|d|D|f|p|q}分别是显示:
byte&ASCII, double-word&ASCII,double-word,double-precision,float,pointer-sized,quad-word数据;
DA用于显示ASCII,DU用于显示UNICODE;
BYB,BYD,显示binary和Byte及binary和DWORD
补充一个DV,用于查看本地变量用的
这些指令区分大小。
栈指令k[b|p|P|v]
这四条指令显示的内容类似,但是每个指令都有特色,KB显示三个参数,Kp显示所有的参数,但需要Full Symbols或Private PDBSymbols支持。KP与Kp相似,只是KP将参数换行显示了。Kv用于显示FPO和调用约定,KD,用于显示Stack的Dump,在跟踪栈时比较有用。
这些指令区分大小。
KD显示的内容:
0012fbd0 0012fbf0
0012fbd4 77e2158f USER32!UserCallWinProc+0x18
0012fbd8 0016011e
0012fbdc 00000030
0012fbe0 750a0c3f
0012fbe4 00000000
0012fbe8 00000000
0012fbec dcbaabcd
0012fbf0 0012fc2c
0012fbf4 77e1279c USER32!DefDlgProcWorker+0xbf
0012fbf8 004018e0 DGGuarder!MainDLGproc [j:/mydriver/dgguarder2/dgguarder.c @ 350]
0012fbfc 0016011e
0012fc00 00000030
0012fc04 750a0c3f
0012fc08 00000000
0012fc0c 00629d08
0012fc10 00000030
0012fc14 00619828
0012fc18 77e0f626 USER32!__ClientLoadMenu+0x38
0012fc1c 77e0f635 USER32!__ClientLoadMenu+0x47
KP显示的内容:
ChildEBP RetAddr
0012fbd0 77e2158f DGGuarder!MainDLGproc(
struct HWND__ * hwnd = 0x0016011e,
unsigned int message = 0x30,
unsigned int wParam = 0x750a0c3f,
long lParam = 0)+0x227 [j:/mydriver/dgguarder2/dgguarder.c @ 415]
猜您喜欢
- Win7笔记本小技巧:如何关闭触摸板,..2024-04-30
- win7安全证书过期,如何轻松解决?快..2024-04-30
- Win7本本无线网络不显示?这5招轻松解..2024-04-29
- windows7开机密码遗忘?别急,教你轻松..2024-04-29
- Win7电脑锁屏壁纸轻松换,让你的Wind..2024-04-29
- win7电脑开机无法进入桌面?看这里,..2024-04-29
相关推荐
- win7系统如何卸载百度安全组件服务程..2022-07-03
- 修复Win7丢失libcurl.dll没有找到libcurl...2017-10-12
- win7笔记本时间不能自动更新如何修复..2022-09-17
- Win7系统删除OEM证书和Key的方法【图】..2023-04-25
- Win7旗舰版图标重影怎么处理呢?Win7旗..2020-12-20
- win7开启远程桌面无法全屏的如何恢复..2022-09-07