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.

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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
|---------H.264encode(h264编码代码) |---------h264的编解码库和头文件,采用ffmpeg和x264编译(h264交叉编译ffmpeg) |--------- H264Player.rar(H264播放器源代码纯C++) |--------- |--------- H264的经典算法优化 |--------- JM H264解码程序 |--------- h264的编解码库和头文件, |--------- 采用ffmpeg和x264编译 h264和mepg4协议标准 |--------- H264流媒体源代码和相关资料.rar9 |--------- h264实时分析工具H264Visa |--------- h264视频采集 |--------- h264相关资料和源代码 |--------- ,decode264是一个使用ffmpeg sdk开发h264解码的例子 |--------- H264资料打包(二) |--------- H264资料打包(一) |--------- x264视频编解码在linux下实现的源码 |--------- [pdf文档] h264中文协议(中英文对照)9 |--------- T-REC-H.264 |--------- H264新手入门(H264乐园聊天记录 |--------- h24-tw(台湾教程) |--------- h264解码之CAVLC编码实例 |--------- h264_encoder(一个最经典的c语言的源代码) |--------- PDFH.264_GraphShow 2.linux_ffmpeg_h264视频音频编码界面(不断更新更新的内容通过邮箱发布)----- |---------linux环境下视频编程流程 |--------- 基于Linux高清视频无线传输系统设计研究 |--------- 基于嵌入式Linux的远程网络视频监控系统 |--------- 基于linux_V4L视频采集摄像程序 |--------- 基于Linux视频传输系统(完整方案) |---------嵌入式Linux应用开发完全手册视频源码 |---------arm-linux平台的视频监控程序 |---------交叉编译ffmpeg_+_x264_编码H264_(arm_Linux 3.android视频音频_h264_ffmpeg------------------------ |---------JVT-G050 |--------- FFMPEG移植到Android |--------- 视频的源码,很详细并有注释可用于学习 Android视频采集和实现 |--------- ,采用h264视频编码,3gp格式 android中调用FFMPEG4解码方法与so文 |--------- jm15.0 |--------- ffmpeg for android library anroid手机上的一个音视频编解码库 |--------- |--------- 利用Android 浏览器引擎Webkit 加载具有视频监控功能的插件,以此插件为核心模块扩展浏览器的功能,从而实现手机监控 |--------- ffmpeg H264学习指南介绍 |--------- android opencore框架下的视频编码源码实现 android 视频监控的,开启本地摄像机,设置好端口即可 |--------- android 视频实时采集并上传到服务器上 android的视频监视器,捕捉接收远程的监视视频并显示在手机上
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值