反汇编工具objdump的使用简介
来源:互联网 发布:川航张芸芸事件知乎 编辑:程序博客网 时间:2024/06/11 03:47
《朱老师物联网大讲堂》学习笔记
学习网站:www.zhulaoshi.org
objdump是我们进行反汇编的工具
还记得Makefile文件吗?
led.bin: start.o
arm-linux-ld -Ttext 0x0 -o led.elf $^
下载烧录执行的bin文件,内部其实是一条一条的指令机器码。这些指令每一条都有一个指令地址,这个地址是连接的时候ld给指定的(ld根据我们写的链接脚本来指定)
arm-linux-objcopy -O binary led.elf led.bin
从可执行文件到可烧录的镜像文件
arm-linux-objdump -D led.elf > led_elf.dis
做反汇编的
gcc mkv210_image.c -o mkx210
./mkx210 led.bin 210.bin
%.o : %.S
arm-linux-gcc -o $@ $< -c
%.o : %.c
arm-linux-gcc -o $@ $< -c
clean:
rm *.o *.elf *.bin *.dis mkx210 -f
这里我们关注的是这一句
arm-linux-objdump -D led.elf > led_elf.dis
这里使用的是gcc工具中的反汇编
由编译链接好的elf格式的可执行程序来反过来得到汇编源代码
-D表示反汇编,由此可见这个工具还有其它功能
> 左边的是elf格式的可执行程序,也就是反汇编时候的原材料,右边的是反汇编生成的反汇编程序
led.elf: file format elf32-littlearmDisassembly of section .text:00000000 <_start>: 0:e59f006c ldrr0, [pc, #108]; 74 <delay_loop+0x10> 4:e59f106c ldrr1, [pc, #108]; 78 <delay_loop+0x14> 8:e5810000 strr0, [r1]0000000c <flash>: c:e3a00030 movr0, #48; 0x30 10:e59f1064 ldrr1, [pc, #100]; 7c <delay_loop+0x18> 14:e5810000 strr0, [r1] 18:eb00000f bl5c <delay> 1c:e3a00028 movr0, #40; 0x28 20:e59f1054 ldrr1, [pc, #84]; 7c <delay_loop+0x18> 24:e5810000 strr0, [r1] 28:eb00000b bl5c <delay> 2c:e3a00018 movr0, #24 30:e59f1044 ldrr1, [pc, #68]; 7c <delay_loop+0x18> 34:e5810000 strr0, [r1] 38:eb000007 bl5c <delay> 3c:e3a00028 movr0, #40; 0x28 40:e59f1034 ldrr1, [pc, #52]; 7c <delay_loop+0x18> 44:e5810000 strr0, [r1] 48:eb000003 bl5c <delay> 4c:e3a00030 movr0, #48; 0x30 50:e59f1024 ldrr1, [pc, #36]; 7c <delay_loop+0x18> 54:e5810000 strr0, [r1] 58:ebffffeb blc <flash>0000005c <delay>: 5c:e59f201c ldrr2, [pc, #28]; 80 <delay_loop+0x1c> 60:e3a03000 movr3, #000000064 <delay_loop>: 64:e2422001 subr2, r2, #1 68:e1520003 cmpr2, r3 6c:1afffffc bne64 <delay_loop> 70:e1a0f00e movpc, lr 74:11111111 tstner1, r1, lsl r1 78:e0200240 eorr0, r0, r0, asr #4 7c:e0200244 eorr0, r0, r4, asr #4 80:00989680 addseqr9, r8, r0, lsl #13Disassembly 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.
反汇编的原因有以下
1.逆向破解
2.我们在调试程序时侯,反汇编代码可以帮助我们理解程序
3.把c源代码编译链接生成的可执行程序,反汇编后得到对应汇编代码,可以帮助
我们理解c语言和汇编语言之间的对应关系,非常有助于深入理解c语言
尤其是在理解链接脚本,链接地址,时候帮助非常大
扩展:ARM汇编中用地址池方式来实现非法立即数
下面是上面反汇编代码的汇编代码
#define GPJ0CON0xE0200240 #define GPJ0DAT0xE0200244.global _start_start:ldr r0, =0x11111111ldr r1, =GPJ0CONstr r0, [r1]flash:ldr r0, =( (0<<3) | (1<<4) | (1<<5) )ldr r1, =GPJ0DATstr r0, [r1]bl delayldr r0, =( (1<<3) | (0<<4) | (1<<5) )ldr r1, =GPJ0DATstr r0, [r1]bl delayldr r0, =( (1<<3) | (1<<4) | (0<<5) )ldr r1, =GPJ0DATstr r0, [r1]bl delayldr r0, =( (1<<3) | (0<<4) | (1<<5) )ldr r1, =GPJ0DATstr r0, [r1]bl delayldr r0, =( (0<<3) | (1<<4) | (1<<5) )ldr r1, =GPJ0DATstr r0, [r1]bl flashdelay:ldr r2, =10000000ldr r3, =0x0delay_loop:sub r2, r2, #1cmp r2, r3bne delay_loopmov pc, lr
展望:反汇编工具帮助我们分析链接脚本
反汇编的时候得到的指令地址是链接器考虑了链接脚本之后得到的地址,而我们写代码时通过指定连接脚本来让链接器给我们链接合适的地址。
但是有时候我们写的链接脚本有误(或者我们不知道这个链接脚本会怎么样),这时候可以通过看反汇编文件来分析这个链接脚本的效果,看是不是我们想要的,如果不是可以改了再看。
- 反汇编工具objdump的使用简介
- 反汇编工具objdump的使用简介
- Linux下的objdump反汇编工具
- linux 下使用 objdump 反汇编
- Linux 下使用 objdump 反汇编
- objdump 反汇编一个函数的脚本
- linux 反汇编objdump
- objdump 反汇编
- objdump 反汇编
- objdump 反汇编
- objdump 反汇编
- objdump反汇编
- 学习ARM反汇编工具objdump和一个简单实例
- 反汇编工具使用
- 使用Objdump进行目标文件的反汇编和文件布局的简要分析
- lua 反汇编工具 ChunkSpy 的使用
- 反汇编工具capstone的使用
- gcc objdump 反汇编器
- Android中Parcelable接口用法
- Linux内核协议栈(附3)udp_lib_get_port函数
- 当指针指向一个字符串
- 磁条磁道介绍
- Android-Spinner的使用以及两种适配器
- 反汇编工具objdump的使用简介
- 正则表达式
- 关于理想团队的构建和对软件流程的理解
- 集合框架--LinkedList集合练习堆栈和队列
- Google开源单元测试框架Google Test:VS2012 配置
- NS2能量模型
- java jdbc连接数据库,并对指定表进行增删改查
- 1005. 继续(3n+1)猜想 (25)
- 粒子群算法