Gdb的使用

939 阅读2分钟

  caspp的lab要用到gdb进行程序调试, 下面是相关操作:

界面

  在命令行输入 gdb -tui ctarget 进入gdb的图形界面, 截图如下:
上面是用来看代码的窗口, 下面是输入命令的窗口。在命令窗口输入layout命令可以改变代码窗口显示的内容, 输入help layout可以查看相关的命令, 这里使用layout split可以同时查看多个窗口。
用winheight可以调整窗口高度,比如winheight asm +5 让显示汇编的窗口高度增加5。用focus命令可以改变当前聚焦窗口, 比如focus asm 之后就可以用上下键移动asm窗口。这些命令都可以用help查看,在这里就不多说了。

查看

  p用来查看对应变量
  p gets_cnt 就是输出gets_cnt
  p *0x12345 就是输出对应地址0x12345下的内容, 可以用p/x 来表示用16进制输出, p/s表示用字符串格式输出,和c语言printf语法很接近。
  x 命令用来查看内存
  x/8x $rsp 表示查看rsp寄存器储存的值(一个地址)所指向的内容, 8 表示一次查看8个单元,x表示用16进制打印出来。x/8xb 表示一个单元是一个字节(byte), x 和 p其实大同小异。

断点

  b test 表示在test函数开头设置一个断点, info b 输出所有断点信息, enable b 3 和 disable b 3 表示让断点3起作用作用和不起作用。
  b *0x12345 表示在这个地址处设置一个断点, 更多的操作用help查看。

运行

  n 表示运行下一句(不进入函数), s 表示运行下一句(进入函数)。要注意的是这两条命令都是源代码层面的, 所谓的语句是指C语言中用分号隔开的语句。如果要运行汇编层次的单语句就要使用ni、si。c表示运行到下一个断点。

其他

  r < raw.txt -q 表示用参数q运行这个程序(参数什么意思看对应的程序), 以raw.txt 作为输入
  什么也不输入直接回车表示再次执行上一条命令