知识杂记之gdb命令(二)
注:常用 x/<n/f/u> 组合:
x/s+地址 查看字符串
x/wx+地址 查看DWORD
x/c+地址 单字节查看
x/16x $esp+12 查看寄存器偏移
break – b
- break 当不带参数时,在所选栈帧中执行的下一条指令处设置断点。
- break 在函数体入口处打断点。
- break
在当前源码文件指定行的开始处打断点。 - break -N break +N 在当前源码行前面或后面的 N 行开始处打断点,N 为正整数。
- break </filename:line> 在源码文件 filename 的 line 行处打断点。
- break </filename:function> 在源码文件 filename 的 function 函数入口处打断点。
- break </address/> 在程序指令的地址处打断点。
- break … if 设置条件断点,… 代表上述参数之一(或无参数),cond 为条件表达式,仅在 cond值非零时停住程序。
info
- info breakpoints – i b 查看断点,观察点和捕获点的列表。
-
- info breakpoints [list…]
-
- info break [list…]
-
- list… 用来指定若干个断点的编号(可省略),可以是 2, 1-3, 2 5 等。
- info display 打印自动显示的表达式列表,每个表达式都带有项目编号,但不显示其值。
- info reg 显示当前寄存器信息。
- info threads 打印出所有线程的信息,包含 Thread ID、Target ID 和 Frame。
- info frame 打印出指定栈帧的详细信息。
- info proc 查看 proc 里的进程信息。
disable – dis
禁用断点,参数使用空格分隔。不带参数时禁用所有断点。
- disable [breakpoints] [list…] breakpoints 是 disable 的子命令(可省略),list… 同info breakpoints 中的描述。
clear
在指定行或函数处清除断点。参数可以是行号,函数名称或 * 跟一个地址。
- clear 当不带参数时,清除所选栈帧在执行的源码行中的所有断点。
- clear </function/>, clear </filename:function> 删除在命名函数的入口处设置的任何断点。
- clear </line/>, clear </filename:line> 删除在指定的文件指定的行号的代码中设置的任何断点。
- clear </address/> 清除指定程序指令的地址处的断点。
delete – d
删除断点。参数使用空格分隔。不带参数时删除所有断点。
- delete [breakpoints] [list…]
tbreak
设置临时断点。参数形式同 break 一样。当第一次命中时被删除。
step – s
单步执行程序,直到到达不同的源码行。
- step [N] 参数 N 表示执行 N 次(或由于另一个原因直到程序停止)。
next – n
单步执行程序,执行完子程序调用。
- next [N]
与 step 不同,如果当前的源代码行调用子程序,则此命令不会进入子程序,而是继续执行,将其视为单个源代码行。
continue – c
在信号或断点之后,继续运行被调试的程序。
- continue [N]
如果从断点开始,可以使用数字 N 作为参数,这意味着将该断点的忽略计数设置为 N - 1(以便断点在第 N 次到达之前不会中断)。
run – r
启动被调试的程序。可以直接指定参数,也可以用 set args 设置(启动所需的)参数。还允许使用 >, <, 或 >> 进行输入和输出重定向。
甚至可以运行一个脚本,如:
run `python2 -c 'print "A"*100'`
backtrace – bt
打印整个栈的回溯。
- bt 打印整个栈的回溯,每个栈帧一行。
- bt n 类似于上,但只打印最内层的 n 个栈帧。
- bt -n 类似于上,但只打印最外层的 n 个栈帧。
- bt full n 类似于 bt n,还打印局部变量的值。
注意:使用 gdb 调试时,会自动关闭 ASLR,所以可能每次看到的栈地址都不变。
thread apply all bt
打印出所有线程的堆栈信息。
常用命令:
file 路径 附加文件
r 开始执行
step 单步步入
next 单步步过
b *地址 下断点
enable 激活断点
info b 查看断点
del num 删除断点(num表示断点编号)
x/wx $esp 以4字节16进制显示栈中内容
stack 100 插件提供的,显示栈中100项
find xxx 快速查找
s 按字符串输出
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十六进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
c 按字符格式显示变量。
f 按浮点数格式显示变量。