sharkie's inn

Back

gdb 的使用Blur image

gdb 常用命令#

run             # 启动程序
shell

断点 (Breakpoint)#

# 设置断点 (break / b)
b main                      # 在 main 函数入口设置断点
b *0x400ed0                 # 在地址 0x400ed0 处设置断点

# 查看所有断点
info b

# 删除断点 (delete / d)
d                           # 删除所有断点
d 1                         # 删除编号为 1 的断点
shell

布局 (Layout)#

layout                      # 查看视图帮助
layout asm                  # 开启汇编视图

# 按 Ctrl + X + A 退出布局,再按一下恢复之前的布局。
shell

执行 (Execution)#

si                  # 单步汇编指令,同 stepi
s                   # 单步代码,同 step

ni                  # 单步跳出汇编指令,同 nexti
n                   # 单步跳出代码,同 next
shell

信息 (Information)#

info                # 查看 info 指令的帮助

info r              # 查看当前寄存器信息
info frame          # 查看当前栈帧信息
info args           # 查看当前栈帧的所有参数
shell

检查 (Examination)#

x 命令可以查看内存。

格式:x/nfu address

nn 指明查看的单位个数,默认为 1,可省略。

ff 表示显示的格式:

  • x:按十六进制显示
  • s:按字符串显示
  • c:按字符显示
  • d:按照十进制
  • o:按照八进制
  • a:按照地址格式
  • f:按浮点数格式显示

uu 表示单位大小:

  • b:byte
  • h:halfword
  • w:word
# Example
x/8xb $pc           # 从 pc 所指向的地址开始,读取连续的 8 个字节值,然后用 16 进制展示出来。
x/s 0x400da0        # 从 0x400da0 地址开始,读取在该地址的字符串,并展示出来。
shell

还有一种常见的用法:以指令为单位查看内存

# Example
x/10i $pc           # 从 pc 所指向的地址开始,读取连续 10 个汇编指令,然后展示出来。
shell

打印表达式 (Print)#

使用 p 表达式 可以表达式的值。

# Example
print mai                  # mai 是变量名
print *(int *) $eax        # 将 $eax 所指向的地址转换为 int *,再将其解引用,得到对应地址的一个 int 值。
shell

反汇编 (Disassemble)#

# 使用 disas / disassemble 将对应代码反汇编
disas                      # 直接反汇编当前所在的函数
disas function_name        # 指定函数进行反汇编
shell

初始化文件#

在 gdb 启动时,gdb 会寻找 home 目录和当前目录下的 .gdbinit 文件,并执行里面的指令。

可以使用 -n 指示 gdb 忽略初始化文件。

指定脚本运行 gdb#

使用 -x 命令可以为 gdb 指定脚本,在进入 gdb 的时候自动执行该脚本里的命令。

# Example:指定脚本文件 script.gdb 
gdb ./your_program -x script.gdb
shell

其他#

为调试的程序指定 args#

在程序运行之前,使用 set args <参数1> <参数2> <...> 为程序指定参数。

# Example
set args -o main                    # 等价于 ./your_program -o main
set args < input.in                 # 将进程的标准输入重定向
shell
gdb 的使用
https://sharkie.cn/blog/usage-of-gdb
Author sharkie
Published at May 5, 2025
Comment seems to stuck. Try to refresh?✨