GDB
命令 | 作用 |
---|---|
启动 | |
gdb <program> [core dump] |
指定程序启动,可选core文件 |
gdb <-p|--pid> <pid> |
附加到运行中的进程上,可选带参数 |
gdb --args <program> <args...> |
带参数 |
gdb <program> -ex <'command'> |
执行命令 |
gdb -batch <program> |
处理后退出,可结合-ex 执行命令,比如 gdb -batch -ex 'run' a.out |
运行和停止 | |
q[uit] |
退出 |
r[un] [args...] |
运行,可选带参数 |
k[ill] |
停止程序 |
Ctrl-C |
终止当前命令 |
Ctrl-D |
退出 |
信息 | |
where /b[ack]t[race] /i[nfo] stack |
显示当前地址和调用栈 |
i[nfo] b[reakpoints] |
显示所有断点信息 |
i[nfo] watchpoints |
显示所有观察点信息 |
i[nfo] r[egisters] |
显示寄存器内容 |
i[nfo] args |
显示函数参数 |
i[nfo] proc m[appings] |
显示内存映射信息 |
i[nfo] signals |
显示信号量设置 |
i[nfo] inferiors |
显示 gdb 中的所有进程 |
maint[enance] i[nfo] sections |
显示段信息 |
h[elp] |
帮助信息 |
断点和观察点 | |
b[reak] |
在当前代码执行位置设置断点 |
b[reak] <functionName> |
对指定函数入口设置断点 |
b[reak] <lineNumber> |
对指定代码行设置断点 |
b[reak] *<address> |
对指定地址设置断点 |
rb[reak] <RegEx> |
对符合正则表达式的函数名设置断点 |
tb[reak] |
设置临时断点,遇到一次后清除 |
watch <expression> |
对表达式设置观察点,内存内容改变时停止 |
rwatch <expression> |
发生读行为时停止 |
awatch <expression> |
发生访问(读写)时停止 |
catch syscall [name|number] |
遇到指定系统调用时停止 |
conmm[ands] <i> |
每当停在断点 i 时,执行设置的命令 |
cond[ition] <i> <expression> |
满足表达式中的条件时,才会停在断点处 |
ignore <i> <n> |
n 次忽略断点 i |
d[elete] [i] |
删除所有断点,删除编号为 i 的断点 |
disable [i] |
禁用所有断点,禁用编号为 i 的断点 |
enable [i] |
启用所有断点,启用编号为 i 的断点 |
clear [functionName] |
清除所有断点,清除设置在函数名上的断点 |
调试 | |
s[tep] [n] |
执行 1 或 n 次 |
n[ext] [n] |
执行 1 或 n 次,不进入函数调用 |
s[tep]i [n] |
执行 1 或 n 条汇编语句 |
n[ext]i [n] |
执行 1 或 n 条汇编语句,不进入函数调用 |
c[ontinue] |
继续运行直到下一个断点 |
u[ntil] <i> |
继续运行直到遇到编号为 i 的断点 |
fin[ish] |
继续运行直到当前函数返回 |
reverse-stepi |
反向执行指令 |
打印与内存 | |
p[rint] /f <expression/register> |
按格式打印表达式或寄存器内容。 x(16), d(10), u(unsigned), o(8), t(2), a(addr), c(char), f, s(string), z(zero-pad hex) |
x /nfu <address> |
n-数量,f-格式:x, i(instructions), s,u-单位:b(1), h(2), w(4), g(8) |
set [var] x = 10 |
修改变量 x 的值为 10 |
源代码 | |
l[ist] |
显示当前代码行的附近 10 行 |
l[ist] <line1, line2> |
显示代码行范围内的代码 |
l[ist] <functionName> |
显示函数附近的 10 行代码 |
l[ist] *<address> |
显示地址附近的 10 行代码 |
dir [dirname] |
置空源代码路径,添加目录到源路径 |
show directories |
显示源路径 |
窗口 | |
tui enable /Ctrl-X + a |
启用 TUI |
tui disable /Ctrl-X + a |
禁用 TUI |
refresh /Ctrl-L |
刷新窗口 |
Ctrl-X + 1/2 |
单/双窗口模式 |
layout src/asm/regs |
显示源代码/汇编/寄存器窗口 |
layout split |
同时显示源代码和汇编 |
layout next/prev |
显示下一个/上一个窗口 |
f[ocu]s src/asm/regs/cmd |
聚焦在源代码/汇编/寄存器/指令窗口 |
反汇编 | |
disas[semble] [functionName] |
反汇编当前函数,反汇编指定函数 |
disas[semble] <address> |
反汇编指定地址处的函数 |
disas[semble] <addr1 addr2> |
反汇编地址范围内的代码 |
其它 | |
show commands |
显示历史命令 |
shell <command> [args...] |
执行 shell 中的命令 |
set logging on |
记录所有输出保存在 gdb.txt |
GDB dashboard§
Modular visual interface for GDB in Python
curl https://raw.githubusercontent.com/cyrus-and/gdb-dashboard/master/.gdbinit > ~/.gdbinit
GEF§
GDB Enhanced Features - a modern experience for GDB with advanced debugging features for exploit developers & reverse engineers
bash -c "$(curl -fsSL https://gef.blah.cat/sh)"
peda§
Python Exploit Development Assistance for GDB
git clone https://github.com/longld/peda.git ~/peda
echo "source ~/peda/peda.py" >> ~/.gdbinit