使用gdb打印寄存器和地址的值

news2024/12/23 17:40:32

目录

  • 一、文件介绍:
    • 1、源码
    • 2、目标文件test1
    • 3、使用dynamorio工具生成的注释文件(后面简称它注释文件吧)
  • 二、使用gdb调试目标文件
    • 1、设置断点
    • 2、设置汇编格式为intel
    • 3、打开tui界面(汇编+c语言)
    • 4、run
    • 5、查看当前指令
    • 5、查看寄存器的值
  • 三、阅读mytest函数汇编

一、文件介绍:

1、源码

#include <stdio.h>

// 演示函数参数的传递过程
// 可以使用vscdoe调试,或者gdb调试
// 编译命令 icx test1.c -o test1 -g -O0 -static

int mytest(int rdi, int rsi, int rdx, int rcx, int r8, int r9, int rsp8, int rsp9) {
    if (rdi==1){
        return rdi+rsi+rdx+rcx+r8+r9+rsp8+rsp9;
    } else {
        return 1;
    }
}

void mytest2(int *a) {
    int b[8];
    for (int i=0; i<8; i++){
        b[i] = a[i];
    }
}

int main()
{
    int a[8] = {1, 2, 3, 4, 5, 6, 7, 8};
    int sum = mytest(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7]);
    mytest2(a);

    return 0;
}

2、目标文件test1

编译命令

icx test1.c -g -O0 -static -o test1
或者 gcc test1.c -g -O0 -static -o test1

使用IDA PRO可以查看目标文件的反汇编,在函数列表那里可以搜索main函数,切换到汇编的窗口。如图
在这里插入图片描述
同理,可以查看mytest函数和mytest2函数的汇编。当然也可以,双击main函数里的mytest来进行函数跳转
在这里插入图片描述

3、使用dynamorio工具生成的注释文件(后面简称它注释文件吧)

我之前写了个小工具,用于自动打印每条汇编对应的寄存器的值,工具链接
假设生产的文件名为test1.asm

二、使用gdb调试目标文件

主要参考之前gdb调试的文档,此处略写

1、设置断点

$ b main
$ b mytest
$ b mytest2
$ info b

2、设置汇编格式为intel

$ set disassembly-flavor intel 

在这里插入图片描述

3、打开tui界面(汇编+c语言)

在这里插入图片描述

使用命令
$ layout split
 注意:由于我们有源码,所以可以同时打开asm和src两个界面
 然后可以使用focus cmd来选中命令窗口(之前的文档里有写这一步的作用)

在这里插入图片描述

4、run

$ run

在这里插入图片描述
代码在第一个断点处停下来。

5、查看当前指令

(注意:可以发现我们的断点是在main+15处停下来的,而不是main处停下来的,这是因为gdb帮我们跳过了前面的一部分,前面的一般是申请堆栈内存+保存现场等)
当前指令如图
在这里插入图片描述
它对应于IDApro中的指令,如图
在这里插入图片描述
对应自己写的小工具的注释:
在这里插入图片描述

5、查看寄存器的值

首先,注释文件里已经打印出了源操作数的值,即[0x00491eb0]的值为0x00000002 0x00000001
下面我们在gdb中验证一下
命令为(x命令)

一次打印两个32bit的数据(16进制)
$ x /2wx 0x491eb0

可以看到,值分别为1和2,和注释文件里的值是一样的。
在这里插入图片描述

三、阅读mytest函数汇编

main函数的汇编,暂时略过。
在gdb中使用命令c跳到第二个断点,即mytest函数处
在这里插入图片描述
参数顺序参考下图
在这里插入图片描述

每条汇编的注释如下(ida中添加注释的快捷键为冒号和分号,我常用的是冒号)
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/827986.html

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

相关文章

tomcat8的安装与服务启动脚本的配置并部署jpress应用

目录 一.了解tomcat8 二.下载安装包 三.安装jdk与tomcat 1.安装jdk 2.安装tomcat &#xff08;1&#xff09;解压安装包并创建软链接 &#xff08;2&#xff09;设置启动用户并更改权限 &#xff08;3&#xff09;编写系统服务文件 &#xff08;4&#xff09;重新加载文件…

【计算机视觉|语音分离】期望在嘈杂环境中聆听:一个用于语音分离的不依赖于讲话者的“音频-视觉模型”

本系列博文为深度学习/计算机视觉论文笔记&#xff0c;转载请注明出处 标题&#xff1a;Looking to Listen at the Cocktail Party: A Speaker-Independent Audio-Visual Model for Speech Separation 链接&#xff1a;Looking to listen at the cocktail party: a speaker-in…

数据采集的方法有哪些?

近年来&#xff0c;国家和各大企业都在部署大数据战略。“大数据”这个词也越来越频繁地出现在我们的生活中。当我们在进行网上冲浪时&#xff0c;页面总会跳出我们想要搜索的相关产品或关联事物。大数据&#xff0c;似乎总是能够“算”出我们“心中所想”。那么&#xff0c;大…

键入网址到网页显示,期间发生了什么

HTTP 浏览器做的第一步工作是解析URL 首先浏览器做的第一步工作就是要对URL进行解析&#xff0c;从而生成发送给 web 服务器的请求信息。 所以图中长长的URL实际上是请求服务器里的文件资源。 如果图中的蓝色部分URL元素省略了&#xff0c;那应该请求哪个文件呢&#xff1f; 当…

arcgis--连接到数据库失败--外部数据库驱动程序(1)

问题描述&#xff1a; 在加载Excel表格时出现以下问题&#xff0c;无法加载进来。 经过百般尝试&#xff0c;终于找到解决方法。 解决方案&#xff1a; 在微软官网下载accessDataEngine程序&#xff0c;并按照相关位数&#xff08;32位或64位&#xff09;安装&#xff0c;具…

FastAPI(七)应用配置

目录 一、在apps下新建文件夹config 二、新建配置文件app_conf.py 一、在apps下新建文件夹config 二、新建配置文件app_conf.py from functools import lru_cachefrom pydantic.v1 import BaseSettingsclass AppConfig(BaseSettings):app_name: str "Windows10 插件&qu…

git上传代码

gitee 1.生成密钥 输入ssh-keygen -t rsa 不断回车 2.查看密钥 3.设置里上传密钥 4.在git bash里输入ssh -T gitgitee.com

Boost开发指南-3.11pool_alloc

pool_alloc pool_alloc提供了两个可以用于标准容器模板参数的内存分配器&#xff0c;分别是pool_alloc和fast_pool_allocator&#xff0c;它们的行为与之前的内存池类有一点不同——当内存分配失败时会抛出异常std::bad_alloc。它们位于名字空间boost&#xff0c;需要包含头文…

uniapp h5支付宝支付后端返回Form表单,前端如何处理

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1.调取接口拿到后端返回的form表单 前言 uniapp h5 支付宝支付&#xff0c;后端返回一串form表单&#xff0c;前端如何拿到支付串并且调用支付 1.调取接口拿到…

[Docker实现测试部署CI/CD----Jenkins集成相关服务器(3)]

目录 7、 Jenkins 集成 SonarQubeJenkins 中安装 SonarScanner下载移动修改配置文件 8、Jenkins配置SonarQube安装插件添加SonarQube添加 SonarScanner 9、Jenkins集成目标服务器 7、 Jenkins 集成 SonarQube Jenkins 中安装 SonarScanner SonarScanner 是一种代码扫描工具&am…

维视智造人工智能产学研用交流会现场精彩回顾

2023年7月28日&#xff0c;维视智造人工智能产学研用交流会在维视智造西安公司成功举办&#xff0c;众多院校专家教授、企业代表齐聚一堂&#xff0c;共同交流探讨行业趋势&#xff0c;共享人才培养经验。 从2015年的《中国制造2025》&#xff0c;到今年的《新一代人工智能发展…

基于方向编码的模板匹配算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ........................................................................... %选择移动个…

C++库函数——String类的模拟实现

目录 ①String类的主体 ②String类的具体实现 1.构造函数、拷贝构造函数、赋值运算符、析构函数 ⑴构造函数 ⑵拷贝构造函数 ⑶赋值运算符 ⑷析构函数 2.迭代器&#xff08;范围for的实现原理&#xff09; 3.修改:push_back, apppend, , clear, swap, c_str ⑴push_b…

【BASH】回顾与知识点梳理(七)

【BASH】回顾与知识点梳理 七 七.前六章知识点总结及练习7.1 总结7.2 练习 七.前六章知识点总结及练习 7.1 总结 由于核心在内存中是受保护的区块&#xff0c;因此我们必须要透过『 Shell 』将我们输入的指令与 Kernel 沟通&#xff0c;好让 Kernel 可以控制硬件来正确无误的…

【Spring】深究SpringBoot自动装配原理

文章目录 前言1、main入口2、SpringBootApplication3、EnableAutoConfiguration4、AutoConfigurationImportSelector4.1、selectImports()4.2、getAutoConfigurationEntry()4.3、getCandidateConfigurations()4.4、loadFactoryNames() 5、META-INF/spring.factories6、总结 前言…

以beam search为例,详解transformers中generate方法(下)

以beam search为例&#xff0c;详解transformers中generate方法&#xff08;下&#xff09; 1. beam search原理回顾2. 代码流程概览3. BeamSearchScorer4. BeamHypotheses5. beam_search过程5.1 beam score初始化5.2 准备输入5.3 前向forward5.4 计算下一个step每个token的得分…

网络安全知识点整理(作业2)

目录 一、js函数声明->function 第一种 第二种 第三种 二、this关键字 this使用场合 1.全局环境 2.构造函数 3.对象的方法 避免多层this 三、js的同步与异步 定时器 setTimeout和setInterval 同步与异步的例子 四、宏任务与微任务 分辨宏任务与微任务 一、js…

深度学习——划分自定义数据集

深度学习——划分自定义数据集 以人脸表情数据集raf_db为例&#xff0c;初始目录如下&#xff1a; 需要经过处理后返回 train_images, train_label, val_images, val_label 定义 read_split_data(root: str, val_rate: float 0.2) 方法来解决&#xff0c;代码如下&#xff1a…

【C++】开源:matplotlib-cpp静态图表库配置与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍matplotlib-cpp图表库配置与使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&…

RK3588开发板 (armsom-w3) 之 USB摄像头图像预览

硬件准备 RK3588开发板&#xff08;armsom-w3&#xff09;、USB摄像头&#xff08;罗技高清网络摄像机 C93&#xff09;、1000M光纤 、 串口调试工具 v4l2采集画面 v4l2-ctl是一个用于Linux系统的命令行实用程序&#xff0c;用于控制视频4 Linux 2&#xff08;V4L2&#xff0…