知识杂记

知识杂记之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 按浮点数格式显示变量。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值