0%

gdb调试

这篇文章主要是说如何用qemu+gdb在本机上调试arm架构的程序,主要参考这篇文章:ARM pwn 环境搭建和使用,以及介绍gdb的一些使用。

需要用到的工具

  • qemu-user
  • gdb-multiarch

qemu+gdb调试

第一步,使用qemu启动需要调试的程序,

1
qemu-arm -L /usr/arm-linux-gnueabi -g1234 a.out

我这里假设是arm架构的程序,用qemu-arm启动,-L跟的是对应架构的动态链接库所处的根目录,-g后面跟的是gdb调试用的端口号,a.out就是要调试的程序。

第二步,运行gdb-multiarch

1
gdb-multiarch -q a.out

-q参数是可选的,安静模式不显示gdb版本信息,a.out就是要调试的程序,用于读取符号信息。

第三步,在gdb控制台设置架构

1
set architecture arm

我这里是用于调试arm架构的程序,可以根据需要修改

第四步,连接qemu远程调试

1
target remote localhost:1234

由于我qemu和gdb都运行在本机上,所以ip使用localhost,1234是之前qemu指定的端口号,可以根据情况自己修改

至此已经可以进行调试了

gdb常用命令

我主要参考了这篇文章:GDB常用命令,也可以自行在gdb内输入help all查看全部命令。

一些小提示,按tab键可以补全命令,部分常用命令都有缩写,以及补充一些汇编相关的命令和文章中没有提到但是我用到的

  • si/ni,单汇编指令调试,si是会进入跳转到函数内部,ni不会进入指令内部
  • p $寄存器名称,可以查看寄存器以及给寄存器赋值
  • b *汇编地址,可以在指定地址打断点
  • 有时候gdb不会自动加载动态库的符号表,可以用file xxx.so手动加载动态库的符号表
  • info function可以查看加载的所有函数名,用于打断点。
  • 可以把一些每次调试都要执行的gdb指令写在一个文本文件里面,下一次打开的时候用source xxx来执行。

IDA Pro或Ghidra使用gdb远程调试

这两个都研究了一下,Ghidra远程调试的教程几乎没有,我也不知道为什么连不上。IDA Pro能连接上,但是不会使用,感觉不如在终端使用gdb顺手。先开坑,后续再补上。