gdb查看汇编代码的例子
gdb查看汇编代码的例子
操作步骤
- 用 gdb 启动可执行文件:
gdb executable_file - 在 gdb 中设置断点:
break function_name或者break *memory_address - 运行程序:
run - 当程序停止在断点处时,使用
disassemble命令来查看汇编代码:
- 查看当前函数的汇编代码:
disassemble - 查看某个地址的汇编代码:
disassemble memory_address - 查看当前函数某个范围内的汇编代码:
disassemble start_address,end_address - 查看当前函数的某个汇编指令的源代码位置:
list *instruction_address
注意:如果您使用的是 Intel 架构的处理器,可以在 gdb 中使用 set disassembly-flavor intel 命令来切换汇编代码的格式为 Intel 格式。默认情况下,汇编代码是 AT&T 格式的。
范例x86
#include <stdio.h>int add(int a, int b) {return a + b;
}int main() {int a = 10, b = 20;int c = add(a, b);printf("The sum of %d and %d is %d\n", a, b, c);return 0;
}
现在可以使用 gdb 工具来查看该程序的汇编代码。以下是一个示例 gdb 会话:
$ gdb test
(gdb) break main
Breakpoint 1 at 0x1189: file test.c, line 9.
(gdb) run
Starting program: /path/to/test Breakpoint 1, main () at test.c:9
9 int a = 10, b = 20;(gdb) disassemble add
Dump of assembler code for function add:0x000000000000112d <+0>: push %rbp0x000000000000112e <+1>: mov %rsp,%rbp0x0000000000001131 <+4>: mov %edi,-0x4(%rbp)0x0000000000001134 <+7>: mov %esi,-0x8(%rbp)0x0000000000001137 <+10>: mov -0x8(%rbp),%eax0x000000000000113a <+13>: add -0x4(%rbp),%eax0x000000000000113d <+16>: pop %rbp0x000000000000113e <+17>: retq
End of assembler dump.
(gdb) disassemble main
Dump of assembler code for function main:0x0000000000001189 <+0>: push %rbp0x000000000000118a <+1>: mov %rsp,%rbp0x000000000000118d <+4>: sub $0x10,%rsp0x0000000000001191 <+8>: movl $0xa,-0x4(%rbp)0x0000000000001198 <+15>: movl $0x14,-0x8(%rbp)0x000000000000119f <+22>: mov -0x8(%rbp),%edx0x00000000000011a2 <+25>: mov -0x4(%rbp),%eax0x00000000000011a5 <+28>: mov %edx,%esi0x00000000000011a7 <+30>: mov %eax,%edi0x00000000000011a9 <+32>: callq 0x112d <add>0x00000000000011ae <+37>: mov %eax,-0xc(%rbp)0x00000000000011b1 <+40>: mov -0x4(%rbp),%eax
范例arm64
#include <stdio.h>int add(int a, int b) {return a + b;
}int main() {int a = 10, b = 20;int c = add(a, b);printf("The sum of %d and %d is %d\n", a, b, c);return 0;
}
假设将该程序保存为 test.c,并使用以下命令将其编译为可执行文件:
aarch64-linux-gnu-gcc -g -o test test.c
现在可以使用 gdb 工具来查看该程序的汇编代码。以下是一个示例 gdb 会话:
$ aarch64-linux-gnu-gdb test
(gdb) break main
Breakpoint 1 at 0x40068c: file test.c, line 9.
(gdb) run
Starting program: /path/to/test Breakpoint 1, main () at test.c:9
9 int a = 10, b = 20;(gdb) disassemble add
Dump of assembler code for function add:0x0000000000400664 <+0>: stp x29, x30, [sp, #-16]!0x0000000000400668 <+4>: mov x29, sp0x000000000040066c <+8>: str w0, [sp, #8]0x0000000000400670 <+12>: str w1, [sp, #4]0x0000000000400674 <+16>: ldr w0, [sp, #8]0x0000000000400678 <+20>: ldr w1, [sp, #4]0x000000000040067c <+24>: add w0, w0, w10x0000000000400680 <+28>: mov sp, x290x0000000000400684 <+32>: ldp x29, x30, [sp], #160x0000000000400688 <+36>: ret
End of assembler dump.
(gdb) disassemble main
Dump of assembler code for function main:0x000000000040068c <+0>: stp x29, x30, [sp, #-16]!0x0000000000400690 <+4>: mov x29, sp0x0000000000400694 <+8>: mov w1, #200x0000000000400698 <+12>: mov w0, #100x000000000040069c <+16>: bl 0x400664 <add>0x00000000004006a0 <+20>: str w0, [sp, #4]0x00000000004006a4 <+24>: ldr w0, [sp, #4]0x00000000004006a8 <+28>: mov w1, #200x00000000004006ac <+32>: mov w2, #10相关文章:
gdb查看汇编代码的例子
gdb查看汇编代码的例子 操作步骤 用 gdb 启动可执行文件:gdb executable_file在 gdb 中设置断点:break function_name 或者 break *memory_address运行程序:run当程序停止在断点处时,使用 disassemble 命令来查看汇编代码&#…...
第四讲:如何将本地代码与服务器代码保持实时同步
一、前言 在我们进行 Ambari 二次开发时,通常会先在服务器上部署一套可以使用的 Ambari 环境。 二次开发,就肯定是要改动代码的,我们不能老是在服务器上用vim编辑文件,那样效率太低,始终不是长久之计。 所以我们需要在本地打开我们的Ambari源码项目,比如用idea工具,可…...
cuda调试(一)vs2019-windows-Nsight system--nvtx使用,添加nvToolsExt.h文件
cuda调试 由于在编程过程中发现不同的网格块的结构,对最后的代码结果有影响,所以想记录一下解决办法。 CUDA的Context、Stream、Warp、SM、SP、Kernel、Block、Grid cuda context (上下文) context类似于CPU进程上下,表示由管理层 Drive …...
向Spring容器中注入bean有哪几种方式?
文章前言: 写这篇文章的时候,我正在手机上看腾讯课堂的公开课,有讲到 Spring IOC 创建bean有哪几种方式,视频中有提到过 set注入、构造器注入、注解方式注入等等;于是,就想到了写一篇《Spring注入bean有几种…...
如何用 Python采集 <豆某yin片>并作词云图分析 ?
嗨害大家好鸭!我是小熊猫~ 总有那么一句银幕台词能打动人心 总有那么一幕名导名作念念不忘 不知道大家有多久没有放松一下了呢? 本次就来给大家采集一下某瓣电影并做词云分析 康康哪一部才是大家心中的经典呢? 最近又有哪一部可能会成为…...
Python装饰器的具体实用示例
示例1:普通装饰器 def name(n):def func(x):res n(xx)return resreturn funcname def run(x): # run name(run)print(x)if __name__ __main__:run(1) # 2def name(n):def func(*x):res n(xx)return resreturn funcname def run(x): # run name(run)pr…...
谈谈我对Retrofit源码的理解
文章目录一、Retrofit简介二、使用介绍2.1 app / build.gradle添加依赖2.2 创建 Retrofit 实例2.3 创建 API 接口定义文件2.4 使用 Retrofit 进行网络请求三、源码分析3.1 创建 Retrofit 实例: 建造者模式创建Retrofit3.2 实例化API接口: 动态代理模式3.3 获取Observable返回值…...
八股文(三)
目录 一、 如何理解原型与原型链 二、 js继承 三、 vuex的使用 1.mutation和action的区别 mutation action 2.Vuex都有哪些API 四、 前端性能优化方法 五、 类型判断 题目 (1)typeof判断哪个类型会出错(即结果不准确)&…...
2023最新实施工程师面试题
1、两电脑都在同一个网络环境中,A 电脑访问不到 B 电脑的共享文件。此现象可能是哪些 方面所导致?怎样处理? 答:首先你要确定是不是在一个工作组内,只有在一个工作组内才可以共享文件,然后看一个看一看有没有防火墙之类的,然后确定文件是不是已经共享 2、 电脑开机时风扇…...
安卓逆向_6 --- JNI 和 NDK
Java 本机接口规范内容:https://docs.oracle.com/en/java/javase/19/docs/specs/jni/index.html JNI官方中文资料:https://blog.csdn.net/yishifu/article/details/52180448 NDK 官方文档:https://developer.android.google.cn/training/ar…...
Pod控制器
K8S之控制器详解#简介#在kubernetes中,按照Pod的创建方式可以将其分为两类:自主式:kubernetes直接创建出来的Pod,这种Pod删除后就没有了,也不会重建。控制器创建pod:通过Pod控制器创建的Pod,这种Pod删除之后还会自动重…...
微服务到云原生
微服务到云原生 微服务 微服务架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。 微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各…...
Spring Security 实现自定义登录和认证(1):使用自定义的用户进行认证
1 SpringSecurity 1.1 导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId> </dependency>1.2 编写配置类 在spring最新版中禁用了WebSecurityConfigurerAdapter…...
Spring Cloud(微服务)学习篇(七)
Spring Cloud(微服务)学习篇(七) 1.使用代码的方式实现流量限制规则 1.1 变更SentinelController类 1.1.1 加入的代码 //流控限制 (一个或多个资源限流), postConstruct注解的作用是保证项目一启动就会加载,// 一个rule就是一个规则PostConstructpublic void FlowRule(){Li…...
嵌入式安防监控项目——前期知识复习
目录 一、概述 二、C语言 三、数据结构 四、IO进程 五、网络 六、ARM体系结构和接口技术 七、系统移植 八、内核驱动 一、概述 我再报班之前学过51和32,不过都是自学的。报班开始先从应用层入手的,C语言和数据结构。只要是个IT专业的大学这都是必…...
SpringAOP——基础知识
AOP AOP全称是Aspect Oriented Programming 即面向切面编程,是对一类统一事务的集中处理 例如,我们的网页许多地方都需要进行登陆验证,这时就需要在很多地方添加重复的验证代码,而AOP可以集中配置需要登陆验证的地方,…...
kafka3.0安装使用
一:定义 Kafka传 统定义:Kafka是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。 Kafka最 新定义 : Kafka是 一个开源的 分 布式事件流平台 (Event St…...
Centos7(阿里云)_安装Mysql8.0
1.安装MySQL 新人可以试用一个月的阿里云,centos7的 一开始可能确实会自带mariadb,所以可以在网上随便找个教程开始尝试安装MySQL,当然大概率出错,然后此时你的rpm下面已经有了一个版本的mysql安装包。 以我为例,随便…...
【Java】JVM
一、介绍 1.什么是JVM? JVM是一种用于计算设备的规范,它是一个虚构出来的机器,是通过在实际的计算机上仿真模拟各种功能实现的。JVM包含一套字节码指令集,一组寄存器,一个栈,一个垃圾回收堆和一个存储方法域。JVM屏…...
Linux 和数据库笔记-06
今日内容介绍全天内容无需立马掌握MySQL 的高级功能应用数据库设计ER模型定义: E 代表实体(数据表), R 代表联系(数据表之间对应的字段)关系常见分类一对一一对多多对多外键如果…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...
windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...
