寫一段小程序研究STM32反匯編,本人小學文化英語字母都讀不全,那種班里倒數(shù)后三名類型的。看資料全靠百度翻譯瞎蒙。。
0050 0020
就是棧頂啊, 下面就是向量表
1d00 0000
復位向量
5900 0000
nmi_handler
5b00 0000
hard_fault
5d00 0000
memory_fault
5f00 0000
bus_fault
6100 0000
usage_fault
下面是復位向量指向的地址0x1c
00f0 00f8
bl # + 0x00 也就是0x1c + 0x00 + 4 = 跳到0x20
00f0 02f8
bl # + 0x04 就是0x20+ 0x04 + 4 = 跳到0x28
00f0 00b8
b # + 0x00 @ 0x24 + 4 = 0x28 跳到 0x28
為什么跳到同一個地址? 因為 B # + 0X00 可以去掉,我胡亂打了很多 BL 跟B
0e48
ldr r0, [pc, # + 0x38] 把沒見過的放到后面的文字池里
也就是0x64 看那里是什么東西 1810 0240 這不是APB2ENR么
4ff0 3901
mov r1, # 0x39
0160
str r1, [r0]
0d48
ldr r0, [pc, # + 0x34 ] 沒見過甩到池子里
0e49
ldr r1, [pc, # + 0x38] 甩后面池子里
0160
str r1, [r0]
4ff0 0102
mov r2, # 0x01
4ff0 0003
mov r3, # 0x00
0c4e
ldr r6, [pc, # 0x30] 后邊去
7047
bx lr
3260
str r2, [r6]
搞什么啊 鬧了半天程序?qū)戝e了啊。。上一條指令都bx lr了下面指令都沒法執(zhí)行了,上面成了死循環(huán)了。
0b49
ldr r1, [pc, # + 0x30]
0139
subs r1, # 1
7ff4 fdaf
bne # - 0x06
3360
str r2, [r6]
0949
ldr r1, [pc, # + 0x38]
0139
subs r1, # 1
7ff4 fdaf
bne # - 0x06
7047
bxlr
7047
bxlr
7047
bxlr
7047
bxlr
7047
bxlr
7047
bxlr
下面的就是文字池了, 從0000那開始 |