学习ARM反汇编工具objdump和一个简单实例

出处:eefocus 发布于:2018-08-06 14:04:27

  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、展望:反汇编工具帮助我们分析链接脚本

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

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

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

  这个链接脚本会怎么样?

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

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


关键词:ARM

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

广告
上传BOM文件: BOM文件
*公司名:
*联系人:
*手机号码:
QQ:
应用领域:

有效期:
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:

0571-85317607

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!