gdb 相关备忘¶
转载自:鹤翔万里的笔记本
Abstract
和 gdb 相关的一些指令备忘、插件安装方式等
gdb 命令¶
运行¶
(gdb) run直接运行 (r)(gdb) continue继续运行 (c)(gdb) step运行到下一条源码 (s)(gdb) stepi运行到下一条指令 (si)(gdb) next单步运行,跳过函数 (n)(gdb) finish运行完当前函数 (fin)(gdb) attach <pid>连接程序(gdb) detach从当前程序断连(gdb) target remote localhost:1234连接 qemu
断点¶
(gdb) break main断在符号处 (b)(gdb) break *0x....断在地址(gdb) info breakpoints查看断点及状态 (i b)(gdb) delete / clear清除所有断点 (d/cl)(gdb) delete <breakpoint#>删除某一断点(从 i b 得来断点号)(gdb) clear ...清除某一符号、地址处的断点(gdb) disable <breakpoint#>禁用某一断点(gdb) enable <breakpoint#>启用某一断点(gdb) watch ...在某处增加观察点,delete、enable、disable 与断点共用(gdb) break/watch <where> if <condition>如果条件满足则断(gdb) condition <breakpoint#> <condition>更改条件
调用栈¶
(gdb) backtrace查看调用栈 (bt)(gdb) frame查看当前帧栈(gdb) up/down移动当前帧栈(向 main / 远离 main)(gdb) info locals查看当前帧栈变量(gdb) info args查看函数参数
查看寄存器/变量/内存¶
(gdb) print/format <what>format- a: pointer
- c: int -> char
- d: signed decimal
- f: floating point number
- o: int -> octal
- s: treat as string
- t: int -> bin
- u: unsigned decimal
- x: int -> hex
<what>- 可以是类 C 表达式
- 可以是 file_name::variable_name
- 可以是 function::variable_name
- 可以是 {type}address
- 可以是 $register
(gdb) display/format <what>(gdb) undisplay <display#>(gdb) enable display <display#>(gdb) disable display <display#>(gdb) x/nfu <address>显示内存- n 表示查找、打印几个单位
- f 表示 format,在前面写了
- u 表示单位:b 一字节、h 两字节、w 四字节、g 八字节
(gdb) info register查看所有寄存器 (i r)(gdb) info register <register>查看某一寄存器
gdb 插件¶
gdb-peda¶
每条指令带寄存器、汇编、内存数据回显