gdb_learn


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 的信息

文章作者: cfrost
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 cfrost !
  目录