ARM 反汇编工具objdump的使用简介

news2024/11/15 12:38:52

一、反汇编的原理 & 为什么要反汇编

arm-linux-objdump -D led.elf > led_elf.dis

-D, --disassemble-all    Display assembler contents of all sections

objdump 是 gcc 工具链中的反汇编工具,作用是由编译链接好的 elf 格式的可执行程序反过来得到汇编源代码.

-D 表示反汇编,> 左边的是 elf 的可执行程序(反汇编时的原材料),> 右边的是反汇编生成的反汇编程序。

反汇编的原因有以下:

  1. 逆向破解。
  2. 调试程序时,反汇编代码可以帮助我们理解程序(我们学习时使用 objdump 主要目的是这个),尤其是在理解链接脚本、链接地址等概念时。
  3. 把 C 语言源代码编译链接生成的可执行程序反汇编后得到对应的汇编代码,可以帮助我们理解 C 语言和汇编语言之间的对应关系。非常有助于深入理解 C 语言。

二、反汇编文件的格式和看法

(汇编 assembly 反汇编 dissembly)
标号地址、标号名字、指令地址、指令机器码、指令机器码反汇编到的指令
扩展:ARM汇编中用地址池方式来实现非法立即数

1. 初识指令地址

下载烧录执行的 bin 文件,内部其实是一条一条的指令机器码。这些指令每一条都有一个指令地址,这个地址是连接的时候 ld 给指定的(ld根据我们写的链接脚本来指定)。

在这里插入图片描述


2. 展望:反汇编工具帮助我们分析链接脚本

反汇编的时候,得到的指令地址是链接器考虑了链接脚本之后得到的地址,而我们写代码时通过指定连接脚本来让链接器给我们链接合适的地址。

但是有时候我们写的链接脚本有误(或者我们不知道这个链接脚本会怎么样),这时候可以通过看反汇编文件来分析这个链接脚本的效果,看是不是我们想要的,如果不是可以改了再看。

root@ubuntu:/home/aston/workspace/git_xxx# arm-linux-ld --help | grep "Set address"
                              Set address of named section
  -Tbss ADDRESS               Set address of .bss section
  -Tdata ADDRESS              Set address of .data section
  -Ttext ADDRESS              Set address of .text section
  -Ttext-segment ADDRESS      Set address of text segment
root@ubuntu:/home/aston/workspace/git_xxx# cat Makefile 
led.bin: led.o 
	arm-linux-ld -Ttext 0x0 -o led.elf $^
	arm-linux-objcopy -O binary led.elf led.bin
	arm-linux-objdump -D led.elf > led_elf.dis
	gcc mkv210_image.c -o mkx210
	./mkx210 led.bin 210.bin
	
%.o : %.S
	arm-linux-gcc -o $@ $< -c

%.o : %.c
	arm-linux-gcc -o $@ $< -c 

clean:
	rm *.o *.elf *.bin *.dis mkx210 -f

arm-linux-ld -Ttext 0x0 -o led.elf $^命令中的 -Ttext 指定代码段的起始地址,我们可以指定 0 地址,或者其他地址也行。

在这里插入图片描述

在这里插入图片描述


源自朱有鹏老师.

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

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

相关文章

【期末大作业】基于HTML+CSS+JavaScript网上订餐系统(23个页面)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

26-38-javajvm-类加载器子系统

26-javajvm-类加载器子系统&#xff1a; 1.内存结构概述 2.类加载子系统 2.1 类加载器子系统的作用 1&#xff09;、类加载器子系统负责从文件系统或者网络中加载Class文件&#xff0c;class文件在文件开头有特定的文件标识。 2&#xff09;、ClassLoader只负责class文件的加…

常用的shell命令

常用的shell命令 1、ls命令 功能&#xff1a;显示文件和目录的信息 ls 以默认方式显示当前目录文件列表 ls -a 显示所有文件包括隐藏文件 ls -l 显示文件属性&#xff0c;包括大小&#xff0c;日期&#xff0c;符号连接&#xff0c;是否可读写及是否可执行 ls -lh 显示文件的…

1547_AURIX_TC275_CPU子系统_数据存储接口

全部学习汇总&#xff1a; GreyZhang/g_TC275: happy hacking for TC275! (github.com) 这个可以对比PMI来看一下&#xff0c;相比于PMI&#xff0c;DMI的结构简单很多。 1. 之前在看cache以及其对指令读取速度影响的时候&#xff0c;可能弄错了一个概念。如果cache不命中&…

【JavaEE】认识多线程(一)

✨哈喽&#xff0c;进来的小伙伴们&#xff0c;你们好耶&#xff01;✨ &#x1f6f0;️&#x1f6f0;️系列专栏:【JavaEE】 ✈️✈️本篇内容:了解多线程(初阶) &#x1f680;&#x1f680;代码存放仓库gitee&#xff1a;JavaEE初阶代码存放&#xff01; ⛵⛵作者简介&#x…

单变量微积分重点(2)

泰勒公式 用柯西定理证明 拉格朗日余项 麦克劳林展开式&#xff1a; 皮亚诺余项的泰勒公式&#xff1a; 弧长的微分 注意s(t)需要在后面证明&#xff08;定积分的知识&#xff09; 不定积分&#xff1a; 注意&#xff0c;不同的积分方法经常会得到不同的结果&#xff0c;但它们…

IDEA如何配置 Gradle 及 Gradle 安装过程(详细版)

IDEA如何配置 Gradle&#xff08;详细版&#xff09; 一、安装 Gradle 1、下载 Gradle 安装包 官网下载链接&#xff1a;https://gradle.org/releases/ 2、下载后解压 3、文件夹如图所示 二、环境变量配置 1、点击我的电脑->属性->高级系统设置->环境变量 2、新建&…

[附源码]JAVA毕业设计抗击新冠疫情专题宣传网站(系统+LW)

[附源码]JAVA毕业设计抗击新冠疫情专题宣传网站&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 …

JSP+MySQL绿色环境保护网站的设计于实现

环保已经是当前中国的一个基本国策,国家领导人和各地政府也制定了一系列相关的政策来号召全民积极的参加到环保事业中来,为了能够更好的响应多家的号召我们开发了本JSP&#xff1a;MySQL&#xff1a;SSH 绿色环保网站,希望更多的人能够积极的参加到环保事业中来,本网站通过环境…

华为模拟器手把手安装教程-HCIE(华为网络工程师)

一、准备工作 请各位提前准备好eNSP_Setup安装程序、VirtualBox安装程序、Wireshark-win64位安装程序和WinPcap安装程序&#xff08;在wireshark安装过程中可以一起安装&#xff0c;也可以单独安装&#xff09;&#xff0c;获取相关安装程序文件可以联系小编哦&#xff01; 二、…

【蓝桥杯】第十四届模拟赛第一期及第二期填空汇总

目录 1.A题&#xff08;进制位数&#xff09; 位运算符 第一期 问题描述 解析 第二期 解析 代码 2.B题&#xff08;日期问题&#xff09; 第一期 问题描述 解析 代码实现 执行结果 第二期 问题描述 解析 3.C题&#xff08;数学问题&#xff09; 第一期 问题…

windows域控上批量修改域账号密码

目录 一、查询密码过期域账号信息 &#xff08;一&#xff09;根据OU组织架构查询密码过期账号 &#xff08;二&#xff09;查询域控所有密码过期账号 &#xff08;三&#xff09;导出dsquery查询的信息 二、批量修改过期域账号密码 &#xff08;一&#xff09;根据dsque…

【YOLO系列改进NO.47】改进激活函数为GELU

文章目录前言一、解决问题二、基本原理三、​添加方法四、总结前言 作为当前先进的深度学习目标检测算法YOLOv7&#xff0c;已经集合了大量的trick&#xff0c;但是还是有提高和改进的空间&#xff0c;针对具体应用场景下的检测难点&#xff0c;可以不同的改进方法。此后的系列…

Go-Excelize API源码阅读(四十)——SetCellRichText

Go-Excelize API源码阅读&#xff08;四十&#xff09;——SetCellRichText 开源摘星计划&#xff08;WeOpen Star&#xff09; 是由腾源会 2022 年推出的全新项目&#xff0c;旨在为开源人提供成长激励&#xff0c;为开源项目提供成长支持&#xff0c;助力开发者更好地了解开…

Android 虚拟分区详解(二) 虚拟分区布局

文章目录0. 导读1. Android 传统 A/B 分区和动态分区布局2. Android 虚拟分区布局3. 虚拟分区的思考2.1 分区只有一套&#xff0c;如何实现 A/B 系统特性&#xff1f;2.2 部分分区还有 A/B 两套&#xff0c;只要一套不行吗&#xff1f;2.3 为什么不把所有分区都放到动态分区里&…

自动化运维工具-----Ansible

一、主流自动 1.1 Puppet Puppet 是早期的 Linux 自动化运维工具&#xff0c;是一种 Linux、Unix、Windows 平台的集中配置管理系统&#xff0c;发展至今目前已经非常成熟&#xff0c;可以批量管理远程服务器&#xff0c;模块丰富&#xff0c;配置复杂&#xff0c;基于 Ruby …

[附源码]Python计算机毕业设计Django楼盘销售管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Netty系列(四):源码解读 backlog 参数作用

sun.nio.ch.ServerSocketChannelImpl#bind方法 在ServerSocketChannel接口中&#xff0c;有一个bind方法&#xff0c;这个方法的作用是将通道的套接字绑定到本地地址并配置套接字以侦听连接。即用于在套接字和本地地址之间建立关联。而一旦建立关联&#xff0c;套接字将保持绑…

html5期末大作业——HTML+CSS公益关爱残疾人( 6个页面)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

Metabase学习教程:系统管理-3

保持条理化 当用户、问题和仪表盘的数量不可避免地增加时&#xff0c;如何保持分析的组织性。 如果您想保持竞争力&#xff0c;您需要让组织中的人员访问他们需要的数据&#xff0c;以便做出更好的决策。然而&#xff0c;这种数据自主化的代价是不可避免的大量分析——这会使…