windbg 常用命令

? ?@@masm(...) 使用MASM表达式
?? ?@@c++(...) 使用c++表达式

C++表达式支持运算符:
+ - * / % mod & and ^ xor l or >> << >>> == <=...
hi low
by wo
dwo pwo
poi
取地址&,引用指针*,->,.,::, dynamic_cast,static_cast,const_cast,reinterpret_cast
##CONTAINING_RECOARD(Address, Type, Field)
#FIELD_OFFSET(Type,Filed)
#RTL_NUMBER_OF(Array)

注释:$$后的注释以 ; 结束,*后的所有内容都为注释

/ma ASCII string
/mu Unicode string
/msa ANSI_STRING
/msu UNICODE_STRING
/e environment string
/f file data

固定别名 $u0-$u9
r $.u0=kernel32!CreateFileW
.echo $u0
kernel32!CreateFileW

as 创建别名
as kt nt!KiServiceTable
al 查看所有别名
ad* 删除别名

别名的替换规则:
1.如果别名和命令部分是连续的(dd kt+8 14),那么必须使用${}把别名包装或用空格分隔(dd ${kt}+8 14)
2.使用固定别名时,不需要大括号包装,dd $u0+8 14

循环执行:
!for_each_frame !for_each_local dt @#Local
j <条件表达式> ['Command1'];['Command2']
r ecx; j (ecx<2) 'r ecx';'r eax'

进程与线程限定符:
|. 当前进程 ~. 当前线程
|# 导致当前调试事件的进程 ~# 导致当前调试事件的线程
|* 当前进程的所有进程 ~* 当前进程所有线程
|Number 序号为Number的进程 ~Number 序号为Number的线程
|~[PID] 进程ID等于PID的进程 ~~[TID] 线程ID等于TID的线程

登录会话上下文: !session
进程上下文: .process .context
线程上下文: .thread
局部变量上下文: .frame

$fnsucc(FnAddress,RetVal,Flag):RetVal作为返回评估函数是否成功,TRUE,FALSE
$iment(Address):返回模块印象入口地址
$scmp -1,same-0,1
$sicmp -1,same-0,1
$spat 匹配Pattern, match-1,0
$vvalid(Address,Length) valid-1, invalid-0

Run Script File
$<Filename
$><Filename
$$<Filename
$$><Filename
$$>a<Filename [arg1 arg2 arg3 ...]

$$>a<D:Debuggerwindbg-scriptscript_createfilew.txt C: est1.txt
-----------------------------x86---------------------------

".block{r @$t0=poi(@esp+0x4);.if (@$t0<10485760){gc;}}"

bp ntdll!NtCreateFile "as /msu $Name poi(poi(@esp+0xc)+8);.block{.if($spat("${$Name}","*1.txt")){.echo ${$Name}}.else{gc}}"

bp kernel32!CreateFileW "as /mu $Name poi(@esp+0x4);.block{.if($spat("${$Name}","*1.txt")){.echo ${$Name}}.else{gc}}"

bp kernel32!CreateFileW "as /mu $Name poi(@esp+0x4);.block{.if($sicmp("${$Name}","C: est1.txt")){gc}.else{.echo ${$Name}}}"

------------------------------x64-------------------------------

bp ntdll!NtCreateFile "as /msu $Name poi(r8+10);.block{.if($spat("${$Name}","*1.txt")){}.else{gc}}"
bp ntdll!NtCreateFile "as /msu $Name poi(r8+10);.block{.if($sicmp(@"${$Name}",@"C: est1.txt")){gc}.else{}}"
bp ntdll!NtCreateFile "as /msu $Name poi(r8+10);.block{.echo ${$Name}};gc"

bp kernel32!CreateFileW "as /mu $Name @rcx;.block{.if($sicmp("${$Name}","C: est1.txt")){gc}.else{.echo ${$Name}}}"

---------------------------------------------------------------------------

原文地址:https://www.cnblogs.com/hanawasakuraki/p/13502828.html