Skip to content

Commit 36cd5df

Browse files
committed
Add PAuth helpers for signing, stripping and authentication of pointers
Add UC_CTL_PAUTH_SIGN, UC_CTL_PAUTH_STRIP and UC_CTL_PAUTH_AUTH as an architecture-independent interface to pointer authentication operations without having to execute instructions on the virtual CPU. This is useful in many scenarios, for instance when rebasing signed pointers as part of loading code that runs with PAuth. The C interfaces are covered by a unit test. The Python interfaces have been tested in a real world project.
1 parent d93ecc9 commit 36cd5df

File tree

22 files changed

+508
-0
lines changed

22 files changed

+508
-0
lines changed

bindings/dotnet/UnicornEngine/Const/Arm64.fs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,3 +340,12 @@ module Arm64 =
340340
let UC_ARM64_INS_WFI = 5
341341
let UC_ARM64_INS_ENDING = 6
342342

343+
// ARM64 PAuth keys
344+
345+
let UC_ARM64_PAUTH_KEY_IA = 0
346+
let UC_ARM64_PAUTH_KEY_IB = 1
347+
let UC_ARM64_PAUTH_KEY_DA = 2
348+
let UC_ARM64_PAUTH_KEY_DB = 3
349+
let UC_ARM64_PAUTH_KEY_GA = 4
350+
let UC_ARM64_PAUTH_KEY_ENDING = 5
351+

bindings/dotnet/UnicornEngine/Const/Common.fs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,9 @@ module Common =
152152
let UC_CTL_TLB_TYPE = 12
153153
let UC_CTL_TCG_BUFFER_SIZE = 13
154154
let UC_CTL_CONTEXT_MODE = 14
155+
let UC_CTL_PAUTH_SIGN = 15
156+
let UC_CTL_PAUTH_STRIP = 16
157+
let UC_CTL_PAUTH_AUTH = 17
155158
let UC_CTL_CONTEXT_CPU = 1
156159
let UC_CTL_CONTEXT_MEMORY = 2
157160

bindings/go/unicorn/arm64_const.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,4 +334,13 @@ const (
334334
ARM64_INS_SYSL = 4
335335
ARM64_INS_WFI = 5
336336
ARM64_INS_ENDING = 6
337+
338+
// ARM64 PAuth keys
339+
340+
ARM64_PAUTH_KEY_IA = 0
341+
ARM64_PAUTH_KEY_IB = 1
342+
ARM64_PAUTH_KEY_DA = 2
343+
ARM64_PAUTH_KEY_DB = 3
344+
ARM64_PAUTH_KEY_GA = 4
345+
ARM64_PAUTH_KEY_ENDING = 5
337346
)

bindings/go/unicorn/unicorn_const.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,9 @@ const (
147147
CTL_TLB_TYPE = 12
148148
CTL_TCG_BUFFER_SIZE = 13
149149
CTL_CONTEXT_MODE = 14
150+
CTL_PAUTH_SIGN = 15
151+
CTL_PAUTH_STRIP = 16
152+
CTL_PAUTH_AUTH = 17
150153
CTL_CONTEXT_CPU = 1
151154
CTL_CONTEXT_MEMORY = 2
152155
)

bindings/java/src/main/java/unicorn/Arm64Const.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,4 +337,13 @@ public interface Arm64Const {
337337
public static final int UC_ARM64_INS_WFI = 5;
338338
public static final int UC_ARM64_INS_ENDING = 6;
339339

340+
// ARM64 PAuth keys
341+
342+
public static final int UC_ARM64_PAUTH_KEY_IA = 0;
343+
public static final int UC_ARM64_PAUTH_KEY_IB = 1;
344+
public static final int UC_ARM64_PAUTH_KEY_DA = 2;
345+
public static final int UC_ARM64_PAUTH_KEY_DB = 3;
346+
public static final int UC_ARM64_PAUTH_KEY_GA = 4;
347+
public static final int UC_ARM64_PAUTH_KEY_ENDING = 5;
348+
340349
}

bindings/java/src/main/java/unicorn/UnicornConst.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,9 @@ public interface UnicornConst {
149149
public static final int UC_CTL_TLB_TYPE = 12;
150150
public static final int UC_CTL_TCG_BUFFER_SIZE = 13;
151151
public static final int UC_CTL_CONTEXT_MODE = 14;
152+
public static final int UC_CTL_PAUTH_SIGN = 15;
153+
public static final int UC_CTL_PAUTH_STRIP = 16;
154+
public static final int UC_CTL_PAUTH_AUTH = 17;
152155
public static final int UC_CTL_CONTEXT_CPU = 1;
153156
public static final int UC_CTL_CONTEXT_MEMORY = 2;
154157

bindings/pascal/unicorn/Arm64Const.pas

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,5 +338,14 @@ interface
338338
UC_ARM64_INS_WFI = 5;
339339
UC_ARM64_INS_ENDING = 6;
340340

341+
// ARM64 PAuth keys
342+
343+
UC_ARM64_PAUTH_KEY_IA = 0;
344+
UC_ARM64_PAUTH_KEY_IB = 1;
345+
UC_ARM64_PAUTH_KEY_DA = 2;
346+
UC_ARM64_PAUTH_KEY_DB = 3;
347+
UC_ARM64_PAUTH_KEY_GA = 4;
348+
UC_ARM64_PAUTH_KEY_ENDING = 5;
349+
341350
implementation
342351
end.

bindings/pascal/unicorn/UnicornConst.pas

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,9 @@ interface
150150
UC_CTL_TLB_TYPE = 12;
151151
UC_CTL_TCG_BUFFER_SIZE = 13;
152152
UC_CTL_CONTEXT_MODE = 14;
153+
UC_CTL_PAUTH_SIGN = 15;
154+
UC_CTL_PAUTH_STRIP = 16;
155+
UC_CTL_PAUTH_AUTH = 17;
153156
UC_CTL_CONTEXT_CPU = 1;
154157
UC_CTL_CONTEXT_MEMORY = 2;
155158

bindings/python/unicorn/arm64_const.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,3 +332,12 @@
332332
UC_ARM64_INS_SYSL = 4
333333
UC_ARM64_INS_WFI = 5
334334
UC_ARM64_INS_ENDING = 6
335+
336+
# ARM64 PAuth keys
337+
338+
UC_ARM64_PAUTH_KEY_IA = 0
339+
UC_ARM64_PAUTH_KEY_IB = 1
340+
UC_ARM64_PAUTH_KEY_DA = 2
341+
UC_ARM64_PAUTH_KEY_DB = 3
342+
UC_ARM64_PAUTH_KEY_GA = 4
343+
UC_ARM64_PAUTH_KEY_ENDING = 5

bindings/python/unicorn/unicorn_const.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,5 +145,8 @@
145145
UC_CTL_TLB_TYPE = 12
146146
UC_CTL_TCG_BUFFER_SIZE = 13
147147
UC_CTL_CONTEXT_MODE = 14
148+
UC_CTL_PAUTH_SIGN = 15
149+
UC_CTL_PAUTH_STRIP = 16
150+
UC_CTL_PAUTH_AUTH = 17
148151
UC_CTL_CONTEXT_CPU = 1
149152
UC_CTL_CONTEXT_MEMORY = 2

0 commit comments

Comments
 (0)