1.断点
条件断点语法:
常用语法:
条件断点示例:
bp myModule!myfun "$$对myModule模块中myfun函数下断点, 当函数执行到第0x0000023f次时,中断下来。
r $t0=@$t0+1;$$用伪寄存器$t0记录函数执行的次数
.printf \"====func excutions %d times.\\n\", @$t0;
.echo;
.if (@$t0 & 0x0`ffffffff) = 0x0`0000023f
{
$$ to do
}
.else{
gc;
}
"
设置断点的命令有:bp,bu,bm。bm设置符号断点,可以通过模式匹配一次性设置多个断点。bu可以为一个未加载的符号设置断点,当后面符号加载时会自动解析。pb为指定地址设置地址,当地址表达式无法解析时会自动转为bu断点。
如,
0:000> bm myprogram!mem*4: 0040d070 MyProgram!memcpy
5: 0040c560 MyProgram!memmove
6: 00408960 MyProgram!memset
全部断点语法:
用户模式断点语法:
[
~
Thread]
bp[
ID] [
Options] [
Address [
Passes]] [
"
CommandString
"]
[
~
Thread]
bu[
ID] [
Options] [
Address [
Passes]] [
"
CommandString
"]
[
~
Thread]
bm [
Options]
SymbolPattern [
Passes] [
"
CommandString
"]
内核模式断点语法:
bp[
ID] [
Options] [
Address [
Passes]] [
"
CommandString
"]
bu[
ID] [
Options] [
Address [
Passes]] [
"
CommandString
"]
bm [Options] SymbolPattern [Passes] [
"CommandString
"]
2. 脚本文件的输入
基本的语法有:
$<FileName
$><FileName
$$< FileName
$$>< FileName ------>例如: 0:000>$$><C:\windbgscript.txt
$$>a< FileName [arg1 arg2 arg3 ...] [; command] ----->可为脚本提供参数, 脚本中以${$argn}形式使用参数
只有一个$的,FileName前不能留空格;$$的,FileName前面可有空格;含>的表示文件中的命令被看成一个命令块,加载文件后会被执行。
脚本文件:
.echo 1=${$arg1}
.echo 3=${$arg3}
.echo 4=${$arg4}
recx
执行结果:
0:002> $$>a<F:\windbgscript.txt "asdf" asdf d; redx
1=asdf
3=d
4=${$arg4} ----------->因为只提供了三个参数,所以自动参数变量$arg4没有被解析
ecx=00000000
edx=77c7f17d
3.
待续。。。