GDB learn
一、gdb 常用命令
对一个可执行文件而言,使用gdb的前提条件是有跳转表信息,即编译时使用g++ -d xxx
生产有跳转表等信息的可执行文件,而gdb加断点的原理则为代码插桩,当程序运行到断点后,将程序的控制权限交给用户。
## 开始或停止
quit # 退出gdb
run(r) # 运行程序
kill # 停止程序
## 断点
break(b) multstore # 在函数 multstore 入口处设置断点
break * 0x400540 # 在地址 0x400540 处设置断点
delete 1 # 删除断点 1
delete # 删除所有断点
## 执行
stepi(st) # 执行一条指令
stepi 4 # 执行4条指令
nexti(n) # 类似于 stepi,但以函数调用为单位
continue # 继续执行
finish # 运行到当前函数返回
## 检查代码
disas # 反汇编当前函数
disas mulstore # 反汇编函数mulstore
disas 0x400544 # 反汇编位于地址 0x400544 附近的函数
disas 0x400540, 0x40054d # 反汇编指定地址范围内的代码
print /x $rip # 以16进制输出程序计数器的值
## 检查数据
print $rax # 以十进制输出 %rax 的内容
print /x $rax # 以十六进制输出 %rax 的内容
print /t $rax # 以二进制输出 %rax 的内容
print 0x100 # 输出 0x100 的十进制表示
print /x 555 # 输出 555 的十六进制表示
print /x ($rsp + 8) # 以十六进制输出 %rsp 的内容加上8
print *(long*) 0x7fffffffe818 # 输出位于地址 0x7fffffffe818 的长整数
print *(long*) ($rsp + 8) # 输出位于地址 %rsp + 8 处的长整数
x/2g 0x7fffffffe818 # 检查从地址 0x7fffffffe818 开始的双(8字节)字
x/20b multstore # 检查函数 multstore 的前20个字节
## 有用的信息
info frame # 有关当前栈帧的信息
info registers # 所有寄存器的值
help # 获取有关 gdb 的信息