64位arm内函数的跳转

向下跳转

前8位0101 0100与末尾位的0或1决定是BEQ还是BNE 中间的20位中,舍弃最高位,剩余24位的值乘2为当前地址向下跳转的距离 例如 向下跳转 5 4 0 0 0 0 C 0 0101 0100 0000 0000 0000 0000 1100 0000 =BEQ 0x18 54+末尾的0=BEQ 0x18=(0xC)*2 5 4 0 0 0 2 E 1 0101 0100 0000 0000 0000 0010 1110 0001 =BNE 0x5C 54+末尾的1=BNE 0x5C=(0x2E)*2

向上跳转

前8位0101 0100与末尾的0或1决定是BEQ或是BNE 中间的20位中,舍弃最高位,剩余的24位的补码的值乘2位当前地址向上跳转的距离 例如 向上跳转 5 4 F F F F 6 1 0101 0100 1111 1111 1111 1111 0110 0001 =BNE 0x14(向上) 111 1111 1111 1111 0110的补码是000 0000 0000 0000 1001+1=0x9+1=0xA 0x14=(0xA)*2    

love loli,love live!