一文搞懂 ARM 64: AUTIBSP

chaoguo1234發表於2024-11-13

1 PAC

有關PAC可以參看《一文搞懂 ARM 64: PACIBSP》

2 指令語法

AUTIBSP

3 指令語義

上面指令對暫存器X30或者說暫存器LR的值進行PAC驗證。

指令AUTIBSPB代表使用金鑰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*指令一樣。

相關文章