IDA 中的@PAGE 和@PAGEOFF 符号是什么?
逆向工程
艾达
拆卸
2021-06-12 01:08:42
1个回答
在 AArch64 中,所有指令都是 32 位长的。显然,这不足以编码 AArch64 可能需要处理的 64 位地址。所以有两个选择:
使用放置在指令附近的常量池中的 64 位指针,并使用指令加载它们
LDR
。这是可行的,但如果在非默认地址加载图像,则需要更新(重新定位)此类指针。使用相对于 PC 的寻址以从当前位置(PIC 代码)的固定偏移量加载地址。这是更常见的方法,但偏移量仍受指令大小的限制。所以 ARM 设计者想出了一个聪明的办法:使用两条指令来允许更大的范围。
ADRP 指令将 4KB页的地址加载到当前指令的 +/-4GB(33 位)范围内的任何位置(占用偏移量的 21 位高位)。这由@PAGE
操作员表示。然后,我们可以使用LDR
或STR
读取或写入该页面内的任何地址,或者ADD
使用剩余的 12 位偏移量(由 表示@PAGEOFF
)计算最终地址。
所以基本上你可以将这些指令对视为最后一个直接访问之前位置的最终地址,@
如果你不打算重新组装文件,你可以忽略后缀。
另见https://stackoverflow.com/questions/34003338/llvm-arm64-assembly-getting-a-symbol-label-address