GDB是GNU开源组织发布的一个强大的UNIX(或类UNIX)环境下的程序调试工具。要使用GDB调试程序,在编译程序生成执行文件时要加上相应选项。
1 断点相关命令,见表1。
表1 断点相关命令
GDB命令 |
参数 |
意义 |
常用示例 |
break |
地址 |
下断点,可简写为b。地址类型包括: 函数名 源文件行号 *内存地址 |
break main break 12 break *(0x08048373) |
watch |
表达式 |
表达式的值被改变,程序将停止执行 |
watch *((int*)0x80d1ba8) |
clear |
地址 |
和break相反,清除指定地址上的断点 |
clear main clear 12 clear *(0x08048373) |
info |
break |
显示断点信息,包括所有断点的编号、种类、使能状态、地址及位置 |
info break |
disable |
断点编号 |
禁用一个断点 |
disable 1 |
enable |
断点编号 |
启用一个被禁用的断点 |
enable 1 |
delete |
断点编号 |
删除一个断点,可简写为d |
delete 1 |
2 执行相关命令,见表2。
表2 执行相关命令
GDB命令 |
参数 |
意义 |
常见示例 |
run |
命令行参数 |
运行程序,可简写为r。 |
run ARGUMENT1 |
attach |
进程号 |
调试已运行的进程 |
attach 1022 |
continue |
次数(可选) |
继续执行,可简写为c。 |
c c 4 |
next |
次数(可选) |
单步(不进入函数调用),可简写为n |
n n 4(相当于执行4次n) |
nexti |
次数(可选) |
单步指令(不进入函数调用),可简写为ni |
同上 |
step |
次数(可选) |
单步(跟入函数调用),可简写为s |
同上 |
stepi |
次数(可选) |
单步指令(跟入函数调用),可简写为s |
同上 |
until |
源文件行号 |
执行到指定的地址后中断,可简写为u |
u 18 |
finish |
- |
运行当前函数,直到函数退出 |
- |
return |
- |
立即退出当前函数 |
- |
3 信息查看相关命令,见表3。
表3 信息查看相关命令
GDB命令 |
参数 |
意义 |
常见示例 |
info |
reg break files args frame functions … |
显示各种信息,info可以简写为i |
info reg info break |
backtrace |
帖的数目 |
显示当前函数调用栈信息,可简写为bt |
bt |
|
/f exp f:参数 exp:表达式 |
显示表示的值。格式有: x 十六进制 c 字符 等,print可简写为p |
p/c 0x41 p/x 1024 p str p/x $eax |
x |
/nfu addr N: 个数 F: U: 如果没有指定地址则按接着上一次x命令显示之后的地址。 |
显示指定地址的内容。格式有: x 十六进制 s 字符串 i 指令 等 单元大小有: b h w g b为一个字节,其他依次比前一个大一倍 |
x/4i $pc x/16xb $sp x/s*(argv+1) x/s 0xbffffc52 |
list |
行号,函数或地址 |
如果调试的是带符号编译的程序,那么list命令可以列出程序源码。list可简写为l |
l file.c:19 |
disass |
函数名 |
反汇编指定函数,如果没有指定参数默认为当前函数 |
dismass main |
4 其他常见命令,见表4。
表1 断点相关命令
GDB命令 |
参数 |
意义 |
常用示例 |
回车 |
- |
重复执行上一次命令 |
- |
set |
参数非常多 |
设置值 |
set var i=40 set {int} 0xbffffc52=50 set {int}($esp+4)=$eip |
shell |
外部shell命令 |
执行外部shel命令 |
shell ps -ef |
show |
参数多 |
显示参数相关信息 |
show language |
注意:表1-4中的命令均可以通过输入help+GDB命令来获得帮助。
参考资料:
1 许治坤等,网络渗透技术,电子工业出版社,2005年4月
2 GDB完全手册
3 GDB手册