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

news2024/9/28 9:30:59

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.coloradmin.cn/o/1130342.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

黑豹程序员-架构师学习路线图-百科:API接口测试工具Postman

文章目录 1、为什么要使用Postman&#xff1f;2、什么是Postman&#xff1f; 1、为什么要使用Postman&#xff1f; 目前我们开发项目大都是前后端分离项目&#xff0c;前端采用h5cssjsvue基于nodejs&#xff0c;后端采用java、SpringBoot、SSM&#xff0c;大型项目采用SpringC…

设计模式(五)—— 建造者模式/生成器模式

先简单记一下&#xff0c;以后再来认真写 还是造房子那个例子&#xff0c;一个房子分为①打地基 ② 砌墙 ③封顶三步&#xff0c;如果不用设计模式去写的话。就是一个超类&#xff0c;然后多个子类继承超类去重写 但是这样有两个缺点&#xff1a; &#xff08;1&#xff09;产…

centos服务器搭建安装Gitlab教程使用教程

1、更新服务器&#xff1a; sudo yum update -y && sudo yum upgrade -y 2、下载Gitlab的RPM包 https://packages.gitlab.com/gitlab/gitlab-cece表示开源el表示centos 选64位el8对应CentOS8 本教程以centos8为例&#xff0c;在服务器中&#xff0c;下载centos8的…

JS操作DOM及CSS

JS创造于1994年&#xff0c;其目的是为浏览器显示的文档赋予动态行为。 1 Web编程基础 本节讲解如何编写Web应用中的js程序&#xff0c;如果将这些程序加载到浏览器&#xff0c;以及如何获取输入、产出输出&#xff0c;如何运行响应事件的异步代码。 1.1 js 脚本 虽然现在不…

2023 10月最新Vmd 下载安装教程,WindowsLinux

文章目录 下载Vmdwindows版本安装LINUX版本安装 下载Vmd 谷歌搜索VMD 点击左下角download VMD 可选择对应版本 注&#xff1a;点击后会出现输入用户名和密码&#xff0c;由于我已注册&#xff0c;界面不见了&#xff0c;所以直接描述一下。 输入用户名和密码然后会出现让登记…

(ubuntu)安装nginx

文章目录 前言回顾Linux命令在线安装&#xff1a;相关命令&#xff1a;相关路径常用配置&#xff1a; 卸载nginxbug相关: 前言 提示&#xff1a;别再问我的规划是什么了&#xff1a;呼吸&#xff0c;难道不算一个吗&#xff1f; --E.M齐奥朗 回顾Linux命令 # 查看当前进程的所…

Boundary-Aware RGBD Salient Object Detection With Cross-Modal Feature Sampling

方法 体会 实验做得比较详细&#xff0c;但未公布代码

面试题总结 20231024

1.桶排序的应用案例&#xff1a;上亿元素排行榜 step1: 桶排序本质是一种分治算法 step2:每个桶都代表了一个元素的范围 step3:每个桶中的元素都排好序后&#xff0c;取出来&#xff0c;这样子就有序了 2.简述你们框架中用到的线程模型 1.actor思想(单线程处理) 2.xdb加锁(类…

T01西门子#DPRD_DAT

关键字&#xff1a;无系统常数&#xff1b;目前没有可显示的系统常数&#xff1b;没有设备标识符。 西门子300PLC在博图V15.1中是没有系统常数&#xff0c;没有设备标识符。 在博图V15.1中使用DPRD_DAT时&#xff0c;LADDR参数如何选择&#xff1f; LADDR为待读取数据的 模块的…

CSAPP 练习题 2.25

#include<stdio.h>float sum_elements(float a[], unsigned length) {int i;float result 0;for (i 0; i < length-1; i) {result a[i];}return result; }int main() {float a[0];printf("array sum: %f\n", sum_elements(a, 0)); } 调整代码后&#xff…

ChatGLM系列一——ChatGLM的介绍与使用

下面是官方对ChatGLM的介绍&#xff1a; ChatGLM-6B&#xff0c;结合模型量化技术&#xff0c;用户可以在消费级的显卡上进行本地部署&#xff08;INT4 量化级别下最低只需 6GB 显存&#xff09;。经过约 1T 标识符的中英双语训练&#xff0c;辅以监督微调、 反馈自助、人类反…

权限系统设计(转载)

1 为什么需要权限管理 2 权限模型 2.1 权限设计 2.2 为什么需要角色 2.3 权限模型的演进 2.4 用户划分 2.5 理想的RBAC模型 3 权限系统表设计 3.1 标准RBAC模型表设计 3.2 理想RBAC模型表设计 4 结语 1 为什么需要权限管理 日常工作中权限的问题时时刻刻伴随着我们&a…

白嫖在线云服务器,免费在 linux 服务器使用 docker 。 附视频+附文档

白嫖在线云服务器&#xff0c;免费在 linux 服务器使用 docker 。 附视频附文档 文章目录 前言启动 Nginx 案例最后 视频&#xff1a;https://www.bilibili.com/video/BV1WN411W79V/ 国内互联网经过多年发展&#xff0c;单体应用已经无法支持我们的互联网业务&#xff0c;分布…

css面试题及答案 【集合目录】

前言&#xff1a; 欢迎浏览和关注本专栏《 前端就业宝典 》&#xff0c; 不管是扭螺丝还是造火箭&#xff0c; 多学点知识总没错。 这个专栏是扭螺丝之上要造火箭级别的知识&#xff0c;会给前端工作学习的小伙伴带来意想不到的帮助。 本专栏将前端知识拆整为零&#xff0c;主要…

Redis单Reactor单线程网络模型

Redis单线程单Reactor网络模型 redis单线程里不能执行十分耗时的流程&#xff0c;不然会客户端响应不及时 解决方法一&#xff1a; beforesleep里删除过期键操作若存在大量过期键时&#xff0c;会耗费大量时间&#xff0c;redis采用的策略之一就是采用timelimit方案超过阈值就…

Hadoop部署过程中问题总结

Hadoop伪分布式集群部署问题总结 一、HDFS初始化失败 初始化失败&#xff0c;HDFS初始化操作如下&#xff1a; hdfs namenode -format然后我运行后报错&#xff1a;error parsing conf core-site.xml 出现这个信息就说明core-site.xml配置文件出错了&#xff0c;用vim命令可…

【AI视野·今日NLP 自然语言处理论文速览 第五十八期】Thu, 19 Oct 2023

AI视野今日CS.NLP 自然语言处理论文速览 Thu, 19 Oct 2023 Totally 74 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Understanding Retrieval Augmentation for Long-Form Question Answering Authors Hung Ting Chen, Fangyuan…

STM32 TIM(一)定时中断

STM32 TIM&#xff08;一&#xff09;定时中断 定一个时间&#xff0c;然后让定时器每隔这个时间产生一个中断&#xff0c;来实现每隔一个固定时间执行一段程序的目的&#xff0c;比如你要做个时钟、秒表&#xff0c;或者使用一些程序算法的时候&#xff0c;都需要用到定时中断…

06数据结构——图

6.2图的存储及基本操作 6.2.1邻接矩阵法 图的邻接矩阵存储结构定义如下&#xff1a; #define MaxVertexNUm 100 //顶点数目的最大值 typedef char VertexType; //顶点的数据类型 typedef int EdgeType; //带权图中边上权值的数据类型 ty…

webrtc-stream编译报错记录

磁盘空间不足错误 错误信息 677.2 fatal: cannot create directory at blink/web_tests/external/wpt: No space left on device说明&#xff1a;这个错误是由于本地在配置docker资源时所给磁盘空间太小导致&#xff0c;直接根据镜像大小合理分配资源大小即可 pushd和popd执…