1 PAC
有關PAC
可以參看《一文搞懂 ARM 64: PACIBSP》。
2 指令語法
AUTIBSP
3 指令語義
上面指令對暫存器X30
或者說暫存器LR
的值進行PAC
驗證。
指令AUTIBSP
的B
代表使用金鑰B
,同時SP
表示「上下文」使用暫存器SP
的值。
下面是一個執行AUTIBSP
後,X30
的值的變化例子:
// 驗證前
(lldb) p/x $x30
(unsigned long) 0x3f57fc010817f7bc
// 驗證後
(lldb) p/x $x30
(unsigned long) 0x000000010817f7bc
從上面輸出可以看到,驗證成功之後,指標高bit
的「簽名」被移除掉,指標恢復成原來的值。
4 同類指令
4.1 AUTIB
AUTIB <Xd>, <Xn|SP>
金鑰
: 金鑰B
。
上下文
: 暫存器Xn
或者暫存器SP
的值。
指標地址
: 暫存器Xd
的值。
4.2 AUTIB1716
AUTIB1716
金鑰
: 金鑰B
。
上下文
: 暫存器X16
的值。
指標地址
: 暫存器X17
的值。
4.3 AUITBZ
AUTIBZ
金鑰
: 金鑰B
。
上下文
: 0
。
指標地址
: 暫存器X30
或者說暫存器LR
的值。
4.4 AUTIZB
AUTIZB <Xd>
金鑰
: 金鑰B
。
上下文
: 0
。
指標地址
: 暫存器Xd
的值。
4.5 金鑰 A 指令
指令AUTIASP
AUTIA
AUTIA1716
AUTIAZ
AUTIZA
除了使用金鑰A
進行PAC
驗證之外,其它都與對應的AUTIB*
指令一樣。