B和BL的基本用法
ARM64常用跳转指令为B指令以及BL指令。
我们可以使用objdump -D 程序 > 程序.dis 输出反汇编内容。
B指令:简单的程序跳转,跳转到目标标号处执行。
BL指令:带链接程序跳转,也就是要带返回地址。在发生跳转前,将当前PC-4保存到R14中。
B:0x17向前跳转,0x14向后跳转
BL:0x97向前跳转 0x94向后跳转
BL指令 97 向前跳转演示
偏移地址计算过程:
(目标地址 - 指令地址 - 4 )/ 4 = 偏移
FFFFFF - [ ( 70F0570 - 4EA1A54 - 4 ) / 4 ] ==>
FFFFF - 893AC6 = 76C539
最终值 = 9776C539
BL指令 94 向后跳转演示
( 90E6840 - 70F05A0 ) / 4 = 7FD8A8
最终值 = 947FD8A8