arm 跳转指令跳转范围
B 和 BL 指令都是 相對跳轉(短跳轉) 指令,通過偏移量跳轉, 最大跳轉距離是 ±32M
使用 mov pc, <>可以實現 對跳轉(長跳轉)(不會保存當前 PC 值)
關于B指令和BL指令最大跳轉距離是 ±32M:
ARM匯編每條指令占用 4byte,生成機器碼 B 、BL存放在bits[31:24], bits[23:0]是立即數空間,可以表示 2^24個地址。由于每條匯編指令占用4byte字節(最低兩位都為 0),因此可以使用 24位二進制數來表示 26 位的尋址空間。
B指令和BL指令的區別:
B指令在使用時不會對當前 PC 值進行保存,為保證跳轉指令執行后能正常返回,要手動對其進行保存
BL (帶連接的跳轉指令)能夠在跳轉時對當前 PC 值自動進行保存。
Thumb的B系列指令跳轉范圍只有256字節,然而大多數情況下跳轉范圍都會大,所以一般inlinehhok采用LDR PC, [PC, ?]構造跳轉指令。
B,BL指令保存的是偏移地址,這個地址的計算方法是:
假設跳轉指令處的地址是A,跳轉目標處的地址是B.
1.B-(A+8).A+8是因為ARM的流水線使得指令執行到A處時,PC實際的值是A+8.
2.第一步得到的值是4的倍數,因為ARM的指令是4對齊的,即最低兩位為00.于是將這個值右移兩位.
3.得到最終偏移
所以跳轉的范圍為正負32M(-2^25 ~ 2^25有一位符號位)
總結
以上是生活随笔為你收集整理的arm 跳转指令跳转范围的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bl 和 ldr跳转程序的区别
- 下一篇: 绕过TracerPid检测