首页 > 其他分享 >GDB反向调试命令介绍和操作演示

GDB反向调试命令介绍和操作演示

时间:2022-12-29 09:56:35浏览次数:42  
标签:演示 reverse bookmark 标签 程序调试 GDB 反向 执行 调试

反向调试命令汇总

命令 作用
record 开启记录模式
record stop 停止记录
bookmark 设置执行标签
info bookmarks 查看标签
goto-bookmark num 跳到num编号的标签
reverse-step (rs) 反向执行到上一行代码,遇函数则跳入
reverse-stepi (rsi) 反向执行到上一行汇编,遇函数则跳入
reverse-next (rn) 反向执行到上一行代码,遇函数则跳过
reverse-nexti (rni) 反向执行到上一行汇编,遇函数则跳过
reverse-continue (rc) 反向执行到上个断点
reverse-finish 反向执行到函数调用的位置
set exec-direction reverse 设置程序调试方向为反向,此时s/si/n/ni/continue/finish都为反向
set exec-direction forward 设置程序调试方向为正向

测试用例

/*================================================================
*  Author: LiuHanxu
*  Date: 2022-12-25
*  Description: This test used for reverse debugging
================================================================*/
#include<stdio.h>

int fun(int n) {
  int sum = 0;
  for (int i=0; i<=n; i++)
    sum += i;
  return sum;
}

int main() {
  int x = 10, y = 0;
  y = fun(x);
  printf("y = %d\n", y);
  return 0;
}

开启记录模式record

程序开始调试后,输入record开启记录和回放模式,生成程序执行日志,随后即可基于日志进行反向调试,任意切换正向反向。

record stop命令停止记录模式,然后自动删除执行日志。

image-20221225191757292

设置执行标签bookmark

开启记录和回放模式后,便会生成程序执行日志,可以根据调试需求在关键位置设置标签,方便后面一键反向到历史标签位置。bookmark设置执行标签;info bookmarks查看标签,第一个是标签编号,第二个是指令地址,第三个是执行日志中的排序;goto-bookmark num跳到num编号的标签。

image-20221225192609307

反向单步执行rn/rni/rs/rsi

reverse-next (rn)就是next(n)单步执行的反向命令,其他反向命令,以此类推。

反向调试rn和rs

反向调试rni和rsi

反向执行到上个断点rc

reverse-continue (rc)命令反向执行到程序记录的上个断点位置。

反向调试rc

反向执行到函数调用处reverse-finish

反向调试reverse-finish

设置程序调试方向set exec-direction reverse

默认程序调试方向为forward,当set exec-direction reverse设置程序调试方向为反向后,此时s/si/n/ni/continue/finish都直接变为反向命令。

程序调试方向设置为反向

标签:演示,reverse,bookmark,标签,程序调试,GDB,反向,执行,调试
From: https://www.cnblogs.com/liuhanxu/p/17011772.html

相关文章

  • 推荐几个好用的GDB图形化功能增强插件
    GDB插件汇总插件介绍GEF扩充GDB功能的python脚本Pwndbg强大的GDB功能扩展插件,工具众多gdb-dashboard增强gdb功能界面gdbguigdb浏览器前端调试界面......
  • GDB调试多进程的命令介绍和演示
    命令汇总命令作用infoinferiors查看所有进程inferiors2切换到编号为2的进程detachinferiors2detach掉编号为2的进程killinferiors2kill掉编......
  • Windows Service调试方法小结
    方法1:log记录这是一个通用的调试方法,效率比较低,但比较实用,通过查看日志,总能达到调试的目的方法2:附加到进程这是WindowsService程序调试的常用方法,缺点是对Windows环境......
  • 修改内核源码绕过反调试检测(Android10)
    一、Android反调试     反调试在代码保护中扮演着非常重要的角色,虽然不能完全阻止攻击者,但是能加大攻击者的分析时间成本。目前绝大多数Androidapp都加固了,为了防......
  • 【开源】基于.net6+gtksharp实现的Linux下的图形界面串口调试工具
    背景参考okeyl.com22年初从上家互联网公司离职以后,充分认识到互联网行业的风险,公司在没有自身稳定产品的情况下,互联网行业就是一个烧钱的行业,支出远远大于收入来......
  • 如何对生产环境的JAVA应用进行远程调试
    JAVA自身支持调试功能,并提供了一个简单的调试工具--JDB,类似于功能强大的GDB,JDB也是一个字符界面的调试环境,并支持设置断点,支持线程线级的调试。 1.在服务器上的进程启动参数......
  • 20221227ping命令+格西调试精灵的使用
      先用格西调试精灵,”通信接口“连接后才能ping通 ping是什么?ping就是windows、Unix或者Linux系统下达的一个命令,也可以说是一个通信协议,并且是TCP/IP协议的一......
  • 我是怎么调试 Element UI 源码的
    ​​上篇文章​​写了怎么调试antd的源码,反响很不错:但很多小伙伴是写Vue的,可能平时用的是ElementUI的组件库,所以这篇文章就来讲下怎么调试ElementUI的源码。首先,......
  • 【开源】基于.net6+gtksharp实现的Linux下的图形界面串口调试工具
    背景22年初从上家互联网公司离职以后,充分认识到互联网行业的风险,公司在没有自身稳定产品的情况下,互联网行业就是一个烧钱的行业,支出远远大于收入来源,上家公司就是如......
  • GDB调试精粹及使用实例
    一:列文件清单 1.List (gdb)listline1,line2 二:执行程序 要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明......