反彙編工具objdump的使用簡介
《朱老師物聯網大講堂》學習筆記
學習網站: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-littlearm
Disassembly of section .text:
00000000 <_start>:
0: e59f006c ldr r0, [pc, #108] ; 74 <delay_loop+0x10>
4: e59f106c ldr r1, [pc, #108] ; 78 <delay_loop+0x14>
8: e5810000 str r0, [r1]
0000000c <flash>:
c: e3a00030 mov r0, #48 ; 0x30
10: e59f1064 ldr r1, [pc, #100] ; 7c <delay_loop+0x18>
14: e5810000 str r0, [r1]
18: eb00000f bl 5c <delay>
1c: e3a00028 mov r0, #40 ; 0x28
20: e59f1054 ldr r1, [pc, #84] ; 7c <delay_loop+0x18>
24: e5810000 str r0, [r1]
28: eb00000b bl 5c <delay>
2c: e3a00018 mov r0, #24
30: e59f1044 ldr r1, [pc, #68] ; 7c <delay_loop+0x18>
34: e5810000 str r0, [r1]
38: eb000007 bl 5c <delay>
3c: e3a00028 mov r0, #40 ; 0x28
40: e59f1034 ldr r1, [pc, #52] ; 7c <delay_loop+0x18>
44: e5810000 str r0, [r1]
48: eb000003 bl 5c <delay>
4c: e3a00030 mov r0, #48 ; 0x30
50: e59f1024 ldr r1, [pc, #36] ; 7c <delay_loop+0x18>
54: e5810000 str r0, [r1]
58: ebffffeb bl c <flash>
0000005c <delay>:
5c: e59f201c ldr r2, [pc, #28] ; 80 <delay_loop+0x1c>
60: e3a03000 mov r3, #0
00000064 <delay_loop>:
64: e2422001 sub r2, r2, #1
68: e1520003 cmp r2, r3
6c: 1afffffc bne 64 <delay_loop>
70: e1a0f00e mov pc, lr
74: 11111111 tstne r1, r1, lsl r1
78: e0200240 eor r0, r0, r0, asr #4
7c: e0200244 eor r0, r0, r4, asr #4
80: 00989680 addseq r9, r8, r0, lsl #13
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.
反彙編的原因有以下
1.逆向破解
2.我們在除錯程式時侯,反彙編程式碼可以幫助我們理解程式
3.把c原始碼編譯連結生成的可執行程式,反彙編後得到對應彙編程式碼,可以幫助
我們理解c語言和組合語言之間的對應關係,非常有助於深入理解c語言
尤其是在理解連結指令碼,連結地址,時候幫助非常大
擴充套件:ARM彙編中用地址池方式來實現非法立即數
下面是上面反彙編程式碼的彙編程式碼
#define GPJ0CON 0xE0200240
#define GPJ0DAT 0xE0200244
.global _start
_start:
ldr r0, =0x11111111
ldr r1, =GPJ0CON
str r0, [r1]
flash:
ldr r0, =( (0<<3) | (1<<4) | (1<<5) )
ldr r1, =GPJ0DAT
str r0, [r1]
bl delay
ldr r0, =( (1<<3) | (0<<4) | (1<<5) )
ldr r1, =GPJ0DAT
str r0, [r1]
bl delay
ldr r0, =( (1<<3) | (1<<4) | (0<<5) )
ldr r1, =GPJ0DAT
str r0, [r1]
bl delay
ldr r0, =( (1<<3) | (0<<4) | (1<<5) )
ldr r1, =GPJ0DAT
str r0, [r1]
bl delay
ldr r0, =( (0<<3) | (1<<4) | (1<<5) )
ldr r1, =GPJ0DAT
str r0, [r1]
bl flash
delay:
ldr r2, =10000000
ldr r3, =0x0
delay_loop:
sub r2, r2, #1
cmp r2, r3
bne delay_loop
mov pc, lr
展望:反彙編工具幫助我們分析連結指令碼
反彙編的時候得到的指令地址是連結器考慮了連結指令碼之後得到的地址,而我們寫程式碼時通過指定連線指令碼來讓連結器給我們連結合適的地址。
但是有時候我們寫的連結指令碼有誤(或者我們不知道這個連結指令碼會怎麼樣),這時候可以通過看反彙編檔案來分析這個連結指令碼的效果,看是不是我們想要的,如果不是可以改了再看。
相關文章
- 反彙編專用工具——objdumpOBJ
- ARM-GUN彙編簡介
- IDA Pro for Mac(最強反彙編工具)Mac
- Java 反彙編、反編譯、volitale解讀Java編譯
- 反彙編命令U
- 反彙編測試
- apkTool---一個簡單好用的apk反編譯工具APK編譯
- Go彙編語法和MatrixOne使用介紹Go
- 10.4 認識Capstone反彙編引擎
- 互動式反彙編ida pro
- java反編譯工具Java編譯
- C#反編譯工具:.NET Reflector基礎使用C#編譯
- GBase8s管理工具之SQL編輯器使用簡介SQL
- 使用匯編和反彙編引擎寫一個x86任意地址hookHook
- java中的編碼簡介Java
- 使用ilasm 和 ildasm編譯和反編譯工具對DLL檔案修改ASMLDA編譯
- CRM工具簡介
- liunx進行 idea java 執行時反彙編IdeaJava
- x64dbg(程式逆向反彙編修改神器)
- .net反彙編(gray wolf) v1.88下載
- Jira使用簡介 HP ALM使用簡介
- C++ 反彙編:關於Switch語句的優化措施C++優化
- Android反編譯工具Apktool淺析Android編譯APK
- x86彙編反編譯到c語言之——(2)if語句編譯C語言
- 這誰頂得住?java反編譯的彙編程式碼private volatile static Singleton instanceJava編譯
- C++ 反彙編:關於函式呼叫約定C++函式
- badamczewski/PowerUp:Rust/Go語言的反編譯工具RustGo編譯
- 效能分析工具簡介
- Verilog 編譯指令簡介編譯
- 編譯過程簡介編譯
- Kubernetes – 容器編排簡介
- HTML 編輯器簡介HTML
- Mach-O Inside: 命令列工具集 otool objdump od 與 dwarfdumpMacIDE命令列OBJ
- certutil工具的使用介紹
- 深入解析二進位制世界:Hex-Rays IDA Pro forMac/win互動式反彙編工具ORMMac
- 常見的感測器技術彙總簡介
- 使用RSocket進行服務通訊的反應性服務簡介 - Rafał Kowalski
- 2020-12-6(從反彙編理解指標和引用的區別)指標
- Go編譯器簡介【譯】Go編譯