[工具]GDB的命令和使用

目录

简介

一、GDB命令

1.1 断点
1.2 执行
1.3 信息查看
1.4 其他

二、GDB启动

2.1 用gcc编译程序
2.2 使用GDB调试

简介

GDB是一个跨操作系统的调试器,是Linux系统分析漏洞、调试溢出程序常用的调试工具。

一、GDB命令

1.1 断点

GDB命令 参数 作用 示例
break(简写为b) 地址(类型包括:函数名、源文件行号,*内存地址) 下断点 break main
break 10
break *0x08000000
watch 表达式 当表达式的值被改变,程序将停止执行 watch *((int*)0x80d1ba0)
clear 地址 和break相反,清除指定地址上的断点 clear main
clear 10
clear *0x08000000
info break 显示断点信息(断点的编号、种类、使能状态、地址以及位置) info break
disable 断点编号 禁用指定断点 disable 1
enable 断点编号 启用一个被禁用的断点 enable
delete(简写为d) 断点编号 删除指定断点 delete 1

1.2 执行

`
GDB命令 参数 作用 示例
run(简写为r) 命令行参数 运行程序 run XFOCUS
attach 进程号 调试正在运行的程序 attach 1022
continue(简写为c) 次数(可选) 继续执行,参数表示忽略几次断点 c
c 4
next(简写为n) 次数(可选) 单步(不进入函数调用),参数表示执行几次next n
n 4
nexti(简写为ni) 次数(可选) 单步(不仅如此函数调用) ni
ni 4
step(简写为s) 次数(可选) 单步(跟入函数调用) s
s 4
stepi(简写si) 次数(可选) 单步(跟入函数调用) si
si 4
until(简写为u) 源文件行号 执行到指定地址后中断 u 18
finish 运行当前函数知道函数退出 finish
return 立即退出当前函数 return
注意:调试正在运行的命令,更常用的是:
gdb /path/program 1022

1.3 信息查看

`
GDB命令 参数 作用 示例
info(简写为i) reg
break
files
args
frame
functions
显示各种信息 info reg
info break
backtrace(简写为bt) 帧的数目 显示当前函数调用栈信息 bt
print(简写为p) /f exp
(f为修饰,exp为表达式)
显示表达式的值,格式有
x 十六进制
c 字符
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(简写为l) 行号、函数或地址 如果调试的是带符号的编译的程序,那么list命令可以列出程序源码 l file.c:19
disass 函数名 翻汇编指定函数,如果没有指定参数默认为当前参数 disass main

1.4 其他常用命令

`
GDB命令 参数 作用 示例
回车 重复执行上一条命令
set 参数很多,建议输入help set查看 设置值 set var i=4
set {int}0xbffffc52=50
set {int}($esp+4)=$eip
shell 外部shell命令 执行外部shell命令 shell ps -ef
quit(简写为q) 退出gdb quit

二、GDB启动

2.1 用gcc编译程序

gcc -g a.c -o a

注:添加参数-g,会保留代码的文字信息。

2.2 使用GDB调试

gdb a

如果要减少不必要的提示信息,可以加-q参数,即

gcc -q a

参考资料

linux下gdb调试方法与技巧整理
gcc编译为什么要加-g选项
RUNOOB gdb参数详解
《网络渗透技术》许治坤著


原创不易,感谢支持。

你可能感兴趣的:(C语言,C++,经验总结,linux,开发工具,gcc/gdb编译调试)