windbg学习------条件断点
使用j命令的条件断点的基本语法如下:
使用.if命令的条件断点的基本语法如下:
其实结合起来看就是双引号括起来了判断条件语句
要注意的是,一旦使用别名:
1.必须使用.block{}把使用别名的包含在里面
2.必须在使用别名前,先用ad命令把别名删除掉
0:000> as /mu $ustr poi(@esp+4) 0:000> al Alias Value ------- ------- $str C:\Windows\system32\shell32.dll $ustr imm32.dll 0:000> ad* 0:000> al No aliases 0:000> as /mu $ustr poi(@esp+4) 0:000> al Alias Value ------- ------- $ustr imm32.dll 0:000> ? $spat(@"$ustr", @"*mm32.dll") Evaluate expression: 1 = 00000001 0:000> ad /q $ustr 0:000> al No aliases
综合起来
0:000> ad* 0:000> bc* 0:000> bu Kernel32!LoadLibraryW"aS /mu $ustr poi(@esp+0x4);.block{r @$t0=$spat(@\"$ustr\", @\"*32.dll\");.if(0==@$t0){gc;}}" 0:000> g eax=00000001 ebx=00000001 ecx=76b36833 edx=773c7094 esi=76b367cf edi=00000000 eip=7687ef42 esp=00aff2ec ebp=00aff30c iopl=0 nv up ei pl nz na po nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000202 kernel32!LoadLibraryW: 7687ef42 8bff mov edi,edi 0:000> al Alias Value ------- ------- $ustr imm32.dll 0:000> ad* 0:000> g这里要注意的是不要在.if中加ad*,不然下次就断到未知名的地方了,具体原因不清楚!
0:000> al Alias Value ------- ------- $ustr advapi32.dll 0:000> ad* 0:000> g
0:000> al Alias Value ------- ------- $ustr C:\Windows\system32\ole32.dll 0:000> ad* 0:000> g去掉.block试下:
0:000> bu Kernel32!LoadLibraryW"aS /mu $ustr poi(@esp+0x4);r @$t0=$spat(@\"$ustr\", @\"*32.dll\");.if(0==@$t0){gc;}" 0:000> BL 0 e 7687ef42 0001 (0001) 0:**** kernel32!LoadLibraryW "aS /mu $ustr poi(@esp+0x4);r @$t0=$spat(@\"$ustr\", @\"*32.dll\");.if(0==@$t0){gc;}" 0:000> G
直接跑完了,一个都没断下来