S5PV210 朱有鹏老师视频 反汇编了解

朱老师讲义:
1.4.14.反汇编工具objdump的使用简介
1.4.14.1、反汇编的原理&为什么要反汇编
arm-linux-objdump -D led.elf > led_elf.dis
objdump是gcc工具链中的反汇编工具,作用是由编译链接好的 elf格式的可执行程序反过来得到汇编源代码
-D表示反汇编 > 左边的是elf的可执行程序(反汇编时的原材料),>右边的是反汇编生成的反汇编程序
反汇编的原因有以下:
1.逆向破解。
2.调试程序时,反汇编代码可以帮助我们理解程序(我们学习时使用objdump主要目的是这个),尤其是在理解链接脚本、链接地址等概念时。
3. 把C语言源代码编译链接生成的可执行程序反汇编后得到对应的汇编代码,可以帮助我们理解C语言和汇编语言之间的对应关系。非常有助于深入理解C语言。
1.4.14.2、反汇编文件的格式和看法
(汇编 assembly 反汇编 dissembly)
标号地址、标号名字、指令地址、指令机器码、指令机器码反汇编到的指令
扩展:ARM汇编中用地址池方式来实现非法立即数
1.4.14.3、初识指令地址
下载烧录执行的bin文件,内部其实是一条一条的指令机器码。这些指令每一条都有一个指令地址,这个地址是连接的时候ld给指定的(ld根据我们写的链接脚本来指定)
1.4.14.4、展望:反汇编工具帮助我们分析链接脚本
反汇编的时候得到的指令地址是链接器考虑了链接脚本之后得到的地址,而我们写代码时通过指定连接脚本来让链接器给我们链接合适的地址。
但是有时候我们写的链接脚本有误(或者我们不知道这个链接脚本会怎么样),这时候可以通过看反汇编文件来分析这个链接脚本的效果,看是不是我们想要的,如果不是可以改了再看。

个人笔记:
objdump

led.bin: start.o
arm-linux-ld -Ttext 0x0 -o led.elf $^ -Ttext用来指定代码段起始地址
arm-linux-objcopy -O binary led.elf led.bin
arm-linux-objdump -D led.elf > led_elf.dis -D就是反汇编
gcc mkv210_image.c -o mkx210
./mkx210 led.bin 210.bin

elf格式文件在windows中类似于. exe文件格式.
一般是汇编程序编译链接得到可执行程序
反汇编就是把编译链接好的程序反过来得到汇编程
后缀名为 .dis的就是反汇编的文件名

在Linux中 .a文件代表 静态链接库
在Linux中 .s文件代表 汇编文件
led.elf 是一个二进制文档 可以用 WinHex 软件来打开.
在led.efl不光有可执行文件还有符号的可执行文件.
led.bin文件是将符号全部去除了的文件,只留下可执文件.

littlearm 小端格式文件
.text文件代表的是文本段, 也可以是代码段.在汇编语言中标号的实质就是地址。

例:
00000000 < _start>: 标号 _start 标号的地址 00000000
0: e59f0050 ldr r0, [pc, #80] ; 58 <delay_loop+0x10>
4: e59f1050 ldr r1, [pc, #80] ; 5c <delay_loop+0x14>
8: e5810000 str r0, [r1]

在地址 00000000里面的机器码是 e59f0050 能烧录到CPU的就是机器码
机器码对应的代码就是 ldr r0, [pc, #80]
反汇编中的 ldr r0, [pc, #80] 对应 汇编中的 ldr r0 =0x11111111
指令ldr r0 =0x11111111 会被 指令ldr r0, [pc, #80] 所代替

指令地址:
CPU通过得到地址得到相应的机器码。

地址池 ARM汇编里面处理非法立即数
led.elf: file format elf32-littlearm


Disassembly of section .text:

00000000 <_start>:
0: e59f0050 ldr r0, [pc, #80] ; 58 <delay_loop+0x10>
4: e59f1050 ldr r1, [pc, #80] ; 5c <delay_loop+0x14>
8: e5810000 str r0, [r1]
由于流水线,超前两天指令 所以当前的PC在这行指令,地址为 000000 08

0000000c <flash>:
c: e3e00008 mvn r0, #8
10: e59f1048 ldr r1, [pc, #72] ; 60 <delay_loop+0x18>
14: e5810000 str r0, [r1]
18: eb000008 bl 40 <delay>
1c: e3e00010 mvn r0, #16
20: e59f1038 ldr r1, [pc, #56] ; 60 <delay_loop+0x18>
24: e5810000 str r0, [r1]
28: eb000004 bl 40 <delay>
2c: e3e00020 mvn r0, #32
30: e59f1028 ldr r1, [pc, #40] ; 60 <delay_loop+0x18>
34: e5810000 str r0, [r1]
38: eb000000 bl 40 <delay>
3c: eafffff2 b c <flash>

00000040 <delay>:
40: e59f201c ldr r2, [pc, #28] ; 64 <delay_loop+0x1c>
44: e3a03000 mov r3, #0

00000048 <delay_loop>:
48: e2422001 sub r2, r2, #1
4c: e1520003 cmp r2, r3
50: 1afffffc bne 48 <delay_loop> PC地址为00000080
54: e1a0f00e mov pc, lr
58: 11111111 tstne r1, r1, lsl r1 PC地址为00000088
5c: e0200240 eor r0, r0, r0, asr #4
60: e0200244 eor r0, r0, r4, asr #4
64: 00895440 addeq r5, r9, r0, asr #8

Disassembly of section .ARM.attributes:

00000000 <.ARM.attributes>:
0: 00001a41 andeq r1, r0, r1, asr #20
4: 61656100 cmnvs r5, r0, lsl #2
8: 01006962 tsteq r0, r2, ror #18
c: 00000010 andeq r0, r0, r0, lsl r0
10: 45543505 ldrbmi r3, [r4, #-1285] ; 0x505
14: 08040600 stmdaeq r4, {r9, sl}
18: Address 0x00000018 is out of bounds.

总之反汇编是一种工具,帮助我们理解程序.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值