完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
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 ldr r0, [pc, #80] ; 58 编译器翻译出来就是上面的一句话,0x11111111这个数是ARM伪指令提供的。 那么到底机器把这句话放置在哪里呢? 把这句话放置在58这个地址中,后面已经有注释了: 再往下看58地址中,可以看到显示11111111 led.elf: file format elf32-littlearm Disassembly of section .text: 00000000 <_start>: 0: e59f0050 ldr r0, [pc, #80] ; 58 4: e59f1050 ldr r1, [pc, #80] ; 5c 8: e5810000 str r0, [r1] 0000000c c: e3e00008 mvn r0, #8 10: e59f1048 ldr r1, [pc, #72] ; 60 14: e5810000 str r0, [r1] 18: eb000008 bl 40 1c: e3e00010 mvn r0, #16 20: e59f1038 ldr r1, [pc, #56] ; 60 24: e5810000 str r0, [r1] 28: eb000004 bl 40 2c: e3e00020 mvn r0, #32 30: e59f1028 ldr r1, [pc, #40] ; 60 34: e5810000 str r0, [r1] 38: eb000000 bl 40 3c: eafffff2 b c 00000040 40: e59f201c ldr r2, [pc, #28] ; 64 44: e3a03000 mov r3, #0 00000048 48: e2422001 sub r2, r2, #1 4c: e1520003 cmp r2, r3 50: 1afffffc bne 48 54: e1a0f00e mov pc, lr 58: 11111111 tstne r1, r1, lsl r1 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. 4、反汇编文件的格式和看法 标号地址、标号名字、指令地址、指令机器码 指令机器码反汇编到的指令 扩展:ARM汇编中用地址池的方式实现非法立即数。 指令和地址是一一对应的, 我们下载烧录的bin文件,内部其实就是 一条一条的指令机器码,这些指令每一条都有一个指令地址。 这个地址是连接的ld给根据我们写的链接脚本来指定的。 -Ttext :指定我们的起始地址的。 所有的地址都从别的地址开始执行,根据你的地址来执行。 5、展望:反汇编工具帮助我们分析链接脚本 反汇编的时候得到的地址是链接器考虑了链接脚本之后得到的地址,而 我们写代码是通过指定链接脚本来让链接器给我们链接合适的地址。 但是有时候我们写的链接脚本有误,或者我们不知道 这个链接脚本会怎么样? 这时候可以通过看反汇编文件分析这个链接脚本的效果。 看是不是我们想要的,如果不是的话可以改了再看。 |
|
|
|
只有小组成员才能发言,加入小组>>
2555 浏览 0 评论
1153浏览 2评论
752浏览 1评论
505浏览 0评论
269浏览 0评论
436浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 14:52 , Processed in 1.495088 second(s), Total 48, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号