当前位置:首页 > 消费电子 > 消费电子
[导读]1、反汇编的原理&为什么需要反汇编ARM-linux-objdump -D led.elf > led_elf.disobjdump是gcc工具链中的反汇编工具,作用是由编译链接好的elf格式的可执行程序,来反过来得到

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

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

objdump是gcc工具链中的反汇编工具,作用是由编译链接好的elf

格式的可执行程序,来反过来得到汇编源代码。

-D表示反汇编。

>左边的是ELF的可执行程序(反汇编时候的原材料)

>右边的是反汇编生成的反汇编程序。其实就是一个汇编语言。

一般情况下我们写一个源代码

类似于我们WINDOW里面是EXE的格式,PE格式是官方的名字。

2、为什么我们需要进行反汇编,我们要的就是可执行程序。

反汇编的原因有以下:

1、逆向破解

你想盗版的原来的程序,最终得到程序的源代码。

2、调式程序的时候,反汇编代码可以帮助我们理解程序。

(我们学习时使用objdump主要目的是这个),

尤其是在理解链接脚本,链接地址等概念时候。

尤其是在理解链接的时候,用反汇编对你的理解非常大。

如果你是C语言写的源代码,反汇编之后得到的汇编语言的源代码,

可以有助于你理解C和汇编之间的关系,

非常有助于理解深入理解C语言。

3、反汇编文件的分析:

(1)第一个是标号比如000000这些是代表当前的地址

(2)第二个标号比如e59f0050:代表的是机器码的意思,其实我们写的所有的可执行程序都是机器码

只不过汇编语言就是相当于一句汇编语言对应一个机器码,这样我们编程就不用像以前那么辛苦了。

0:e59f0050 ldrr0, [pc, #80]; 58

这句话是 ldr r0, =0x11111111 // 从后面的=可以看出用的是ldr伪指令,因为需要编译器来判断这个数

编译器翻译出来就是上面的一句话,0x11111111这个数是ARM伪指令提供的。

那么到底机器把这句话放置在哪里呢?

把这句话放置在58这个地址中,后面已经有注释了:

再往下看58地址中,可以看到显示11111111

led.elf: file format elf32-littlearm

Disassembly of section .text:

00000000<_start>:

0:e59f0050 ldrr0, [pc, #80]; 58

4:e59f1050 ldrr1, [pc, #80]; 5c

8:e5810000 strr0, [r1]

0000000c:

c:e3e00008 mvnr0, #8

10:e59f1048 ldrr1, [pc, #72]; 60

14:e5810000 strr0, [r1]

18:eb000008 bl40

1c:e3e00010 mvnr0, #16

20:e59f1038 ldrr1, [pc, #56]; 60

24:e5810000 strr0, [r1]

28:eb000004 bl40

2c:e3e00020 mvnr0, #32

30:e59f1028 ldrr1, [pc, #40]; 60

34:e5810000 strr0, [r1]

38:eb000000 bl40

3c:eafffff2 bc

00000040:

40:e59f201c ldrr2, [pc, #28]; 64

44:e3a03000 movr3, #0

00000048:

48:e2422001 subr2, r2, #1

4c:e1520003 cmpr2, r3

50:1afffffc bne48

54:e1a0f00e movpc, lr

58:11111111 tstner1, r1, lsl r1

5c:e0200240 eorr0, r0, r0, asr #4

60:e0200244 eorr0, r0, r4, asr #4

64:00895440 addeqr5, r9, r0, asr #8

Disassembly of section .ARM.attributes:

00000000 <.arm.attributes>:

0:00001a41 andeqr1, r0, r1, asr #20

4:61656100 cmnvsr5, r0, lsl #2

8:01006962 tsteqr0, r2, ror #18

c:00000010 andeqr0, r0, r0, lsl r0

10:45543505 ldrbmir3, [r4, #-1285]; 0x505

14:08040600 stmdaeqr4, {r9, sl}

18:Address 0x00000018 is out of bounds.

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

标号地址、标号名字、指令地址、指令机器码

指令机器码反汇编到的指令

扩展:ARM汇编中用地址池的方式实现非法立即数。

指令和地址是一一对应的,

我们下载烧录的bin文件,内部其实就是

一条一条的指令机器码,这些指令每一条都有一个指令地址。

这个地址是连接的ld给根据我们写的链接脚本来指定的。

-Ttext :指定我们的起始地址的。

所有的地址都从别的地址开始执行,根据你的地址来执行。

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

反汇编的时候得到的地址是链接器考虑了链接脚本之后得到的地址,而

我们写代码是通过指定链接脚本来让链接器给我们链接合适的地址。

但是有时候我们写的链接脚本有误,或者我们不知道

这个链接脚本会怎么样?

这时候可以通过看反汇编文件分析这个链接脚本的效果。

看是不是我们想要的,如果不是的话可以改了再看。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭