diff --git a/api/python/src/MachO/enums.cpp b/api/python/src/MachO/enums.cpp index 827220b66..6bb99fccf 100644 --- a/api/python/src/MachO/enums.cpp +++ b/api/python/src/MachO/enums.cpp @@ -116,7 +116,8 @@ void init_enums(nb::module_& m) { .value(PY_ENUM(DYLD_CHAINED_PTR_FORMAT::PTR_ARM64E_USERLAND)) .value(PY_ENUM(DYLD_CHAINED_PTR_FORMAT::PTR_ARM64E_FIRMWARE)) .value(PY_ENUM(DYLD_CHAINED_PTR_FORMAT::PTR_X86_64_KERNEL_CACHE)) - .value(PY_ENUM(DYLD_CHAINED_PTR_FORMAT::PTR_ARM64E_USERLAND24)); + .value(PY_ENUM(DYLD_CHAINED_PTR_FORMAT::PTR_ARM64E_USERLAND24)) + .value(PY_ENUM(DYLD_CHAINED_PTR_FORMAT::PTR_ARM64E_SHARED_CACHE)); } } diff --git a/include/LIEF/MachO/ChainedPointerAnalysis.hpp b/include/LIEF/MachO/ChainedPointerAnalysis.hpp index 708415beb..42ed20c4b 100644 --- a/include/LIEF/MachO/ChainedPointerAnalysis.hpp +++ b/include/LIEF/MachO/ChainedPointerAnalysis.hpp @@ -239,6 +239,7 @@ class LIEF_API ChainedPointerAnalysis { case DYLD_CHAINED_PTR_FORMAT::PTR_ARM64E: case DYLD_CHAINED_PTR_FORMAT::PTR_ARM64E_USERLAND: case DYLD_CHAINED_PTR_FORMAT::PTR_ARM64E_USERLAND24: + case DYLD_CHAINED_PTR_FORMAT::PTR_ARM64E_SHARED_CACHE: return 8; case DYLD_CHAINED_PTR_FORMAT::PTR_ARM64E_KERNEL: @@ -270,6 +271,7 @@ class LIEF_API ChainedPointerAnalysis { case DYLD_CHAINED_PTR_FORMAT::PTR_64_OFFSET: case DYLD_CHAINED_PTR_FORMAT::PTR_64_KERNEL_CACHE: case DYLD_CHAINED_PTR_FORMAT::PTR_X86_64_KERNEL_CACHE: + case DYLD_CHAINED_PTR_FORMAT::PTR_ARM64E_SHARED_CACHE: return sizeof(uint64_t); case DYLD_CHAINED_PTR_FORMAT::PTR_32_FIRMWARE: diff --git a/include/LIEF/MachO/DyldChainedFormat.hpp b/include/LIEF/MachO/DyldChainedFormat.hpp index 09f5d8602..07c408a4f 100644 --- a/include/LIEF/MachO/DyldChainedFormat.hpp +++ b/include/LIEF/MachO/DyldChainedFormat.hpp @@ -41,6 +41,7 @@ enum class DYLD_CHAINED_PTR_FORMAT { PTR_ARM64E_FIRMWARE = 10, // stride 4, unauth target is vmaddr PTR_X86_64_KERNEL_CACHE = 11, // stride 1, x86_64 kernel caches PTR_ARM64E_USERLAND24 = 12, // stride 8, unauth target is vm offset, 24-bit bind + PTR_ARM64E_SHARED_CACHE = 13, // stride 8, regular/auth targets both vm offsets. Only A keys supported }; LIEF_API const char* to_string(DYLD_CHAINED_FORMAT fmt); diff --git a/src/MachO/DyldChainedFormat.cpp b/src/MachO/DyldChainedFormat.cpp index db8d976dd..1f691e909 100644 --- a/src/MachO/DyldChainedFormat.cpp +++ b/src/MachO/DyldChainedFormat.cpp @@ -50,6 +50,7 @@ const char* to_string(DYLD_CHAINED_PTR_FORMAT e) { ENTRY(PTR_ARM64E_FIRMWARE), ENTRY(PTR_X86_64_KERNEL_CACHE), ENTRY(PTR_ARM64E_USERLAND24), + ENTRY(PTR_ARM64E_SHARED_CACHE), }; #undef ENTRY