当前位置: 首页 > article >正文

CPU眼里的C/C++: 1.3 汇编级单步调试函数执行过程

1. 目的

2. 基于 GDB 的汇编级单步调试

原始代码

#include <stdio.h>

long test()
{
    long a = 1;
    a += 2;
    return a;
}

int main()
{
    int ret = test();
    printf("test return %d\n", ret);
    return 0;
}

关键 gdb 命令

  • si 指令执行汇编级的单步调试
  • info registers 读取寄存器值
  • push rbp 会将 rbp 值存放在 rsp 下方, 然后让 rsp 寄存器的值减8
  • x 命令: 查看内存

配置 gdb

~/.gdbinit

set disassembly-flavor intel
set breakpoint pending on
set history save # 退出 gdb 后,直接在当前目录下的 .gdb_history 中看到命令记录
set verbose off
set print pretty on
set print array off
set print array-indexes off
set disable-randomization on

set target-async 1
set pagination off
set non-stop on

gdb 完整命令

通过 gdb 单步调试汇编指令,可以验证 rsp 的取值变化:

g++ test3.cpp
gdb ./a.out
b main
r
disassemble
si
si
disassemble
si
disassemble
info registers rsp rbp
si
disassemble
info registers rsp rbp
x /1xg $rsp
q

在这里插入图片描述

3. 基于 LLDB

4. 基于 Visual Studio

5. 基于 WinDBG


http://www.kler.cn/news/107249.html

相关文章:

  • C# 超链接 LinkLabel 类 控件
  • 最新Unity DOTS系列之Aspect核心机制分析
  • 多分类loss学习记录
  • 安防监控项目---boa服务器的移植
  • MySQL索引优化实战指南(InsCode AI 创作助手)
  • ilr normalize isometric log-ratio transformation
  • 291_C++_发送json数据给对于的URL【JSON数据交互】
  • 面向对象设计原则之依赖倒置原则
  • 香港服务器如何做负载均衡?
  • Python中json的用法
  • 1818_ChibiOS的计数信号量
  • Jenkins CLI二次开发工具类
  • CANOE 仿真+测试
  • 高可用系统架构——关于语雀宕机的思考
  • 使用es实现轻量级分布式锁
  • 【python学习笔记——列表】
  • 【@EnableWebMvc的原理】
  • 【广州华锐互动】城市水处理VR仿真实训平台
  • 计算线阵相机 到 拍摄产品之间 摆放距离?(隐含条件:保证图像不变形)
  • C#开发的OpenRA游戏之金钱系统(6)
  • Java New对象分配内存流程
  • 【网络】详解http协议
  • Clion 初始化 QT
  • 怎么在电脑上多屏播放和实时视频输入,ProVideoPlayer 功能介绍
  • Linux权限及Xshell运行原理
  • AQS 为什么要使用双向链表?
  • win10下Mariadb绿色版安装步骤
  • 第二章前端开发ES6基础
  • matlab simulink 直线一级倒立摆控制(自起摆和稳态控制)
  • Java中split方法简介