46.windbg-条件ブレークポイント(windbg script)
2455 ワード
jコマンドを使用する条件ブレークポイントの基本構文は、次のとおりです.
0:000> bp Address "j ( Condition ) ' OptionalCommands '; 'gc' "
.ifコマンドを使用する条件ブレークポイントの基本構文は、次のとおりです.
0:000> bp Address ".if ( Condition ) { OptionalCommands } .else {gc}"
実は結合して見ると二重引用符で判断条件文を囲んでいます
windbg検索conditinal breakpointsで関連例を調べることができます
別名を使用すると、次のことに注意してください.
1.必ず.block{}を使用して別名を含む
2.別名を使用する前に、まずadコマンドで別名を削除する必要があります
総合的に
そのまま走り終わって、一つも切れなかった.
0:000> bp Address "j ( Condition ) ' OptionalCommands '; 'gc' "
.ifコマンドを使用する条件ブレークポイントの基本構文は、次のとおりです.
0:000> bp Address ".if ( Condition ) { OptionalCommands } .else {gc}"
実は結合して見ると二重引用符で判断条件文を囲んでいます
windbg検索conditinal breakpointsで関連例を調べることができます
別名を使用すると、次のことに注意してください.
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
そのまま走り終わって、一つも切れなかった.