首页 > 解决方案 > arm64 程序集:向前分支 n 个字节

问题描述

嘿,所以我试图进入 64 位 arm 中的较低级别系统编程,并且我试图向前分支 64 个字节,特别是跳过Image header。我注意到在 arm64 下,PC 不再是可访问的寄存器。我如何相对于 arm64 程序集中的当前位置向前分支 64 个字节?我需要它来适应两个或更少的指令(code0 和 code1)。谢谢

标签: assemblyarmarm64bare-metal

解决方案


像这样的东西(给或取一个字/字节来微调它)

b hello
.word 0,0,0,0,0,0,0,0
.word 0,0,0,0,0,0,0,0
.word 0,0,0,0,0,0,0,0
.word 0,0,0,0,0,0,0,0
hello:

Disassembly of section .text:

0000000000000000 <hello-0x84>:
   0:   14000021    b   84 <hello>
    ...

然后导致

b hello
.word 0,0,0,0,0,0,0,0
.word 0,0,0,0,0,0,0,0
.word 0,0,0,0,0,0,0,0
.word 0,0,0,0,0,0,0,0
hello:
.inst 0x14000021

Disassembly of section .text:

0000000000000000 <hello-0x84>:
   0:   14000021    b   84 <hello>
    ...

0000000000000084 <hello>:
  84:   14000021    b   108 <hello+0x84>

好吧,所以我不能正确数到 64...但是您明白了,我想我的意思是使用 .byte 而不是 .word ...

您可以使用标签,或者如果您想要一个固定的偏移量,请使用机器代码。

一些汇编器(汇编是由汇编器而不是目标定义的)可能支持这样的东西:

hello:
b .+64

Disassembly of section .text:

0000000000000000 <hello>:
   0:   14000010    b   40 <hello+0x40>

但我希望它是非常特定于汇编程序(汇编语言)的,而不是跨 aarch64 汇编程序的移植。( .word 0x14000010 的一些味道会移植)


推荐阅读