From 1103206fb24c468ea14bf2705ea47cb3f678f149 Mon Sep 17 00:00:00 2001 From: doronz Date: Mon, 11 Sep 2023 13:24:01 +0300 Subject: [PATCH] objc: remove pac from arm64e pointers --- hilda/get_objectivec_class_description.m | 10 ++++++++-- hilda/get_objectivec_symbol_data.m | 11 +++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/hilda/get_objectivec_class_description.m b/hilda/get_objectivec_class_description.m index ec903d6..3d45060 100644 --- a/hilda/get_objectivec_class_description.m +++ b/hilda/get_objectivec_class_description.m @@ -3,6 +3,12 @@ unsigned int outCount = 0; unsigned int i = 0, j = 0; +#ifdef __ARM_ARCH_ISA_A64 + #define STRIP_PAC(x) (((uintptr_t)x) & 0x0000000fffffffff) +#else + #define STRIP_PAC(x) ((uintptr_t)x) +#endif + Class objcClass = (Class)__class_address__; if (!objcClass) { objcClass = objc_getClass("__class_name__"); @@ -76,7 +82,7 @@ methodReturnType = method_copyReturnType(methods[i]); [classDescription[@"methods"] addObject:@{ @"name": [NSString stringWithCString:sel_getName(method_getName(methods[i])) encoding:NSUTF8StringEncoding], - @"address": [NSNumber numberWithLong:(uintptr_t)method_getImplementation(methods[i])], + @"address": [NSNumber numberWithLong:STRIP_PAC(method_getImplementation(methods[i]))], @"is_class": @YES, @"type": [NSString stringWithCString:method_getTypeEncoding(methods[i]) encoding:NSUTF8StringEncoding], @"return_type": [NSString stringWithCString:methodReturnType encoding:NSUTF8StringEncoding], @@ -104,7 +110,7 @@ methodReturnType = method_copyReturnType(methods[i]); [classDescription[@"methods"] addObject:@{ @"name": [NSString stringWithCString:sel_getName(method_getName(methods[i])) encoding:NSUTF8StringEncoding], - @"address": [NSNumber numberWithLong:(uintptr_t)method_getImplementation(methods[i])], + @"address": [NSNumber numberWithLong:STRIP_PAC(method_getImplementation(methods[i]))], @"is_class": @NO, @"type": [NSString stringWithCString:method_getTypeEncoding(methods[i]) encoding:NSUTF8StringEncoding], @"return_type": [NSString stringWithCString:methodReturnType encoding:NSUTF8StringEncoding], diff --git a/hilda/get_objectivec_symbol_data.m b/hilda/get_objectivec_symbol_data.m index c8ba370..2e875d4 100644 --- a/hilda/get_objectivec_symbol_data.m +++ b/hilda/get_objectivec_symbol_data.m @@ -1,5 +1,12 @@ @import ObjectiveC; @import Foundation; + +#ifdef __ARM_ARCH_ISA_A64 + #define STRIP_PAC(x) (((uintptr_t)x) & 0x0000000fffffffff) +#else + #define STRIP_PAC(x) ((uintptr_t)x) +#endif + unsigned int outCount = 0; unsigned int i = 0, j = 0; id objcObject = (id)__symbol_address__; @@ -114,7 +121,7 @@ methodReturnType = method_copyReturnType(methods[i]); [objectData[@"methods"] addObject:@{ @"name": [NSString stringWithCString:sel_getName(method_getName(methods[i])) encoding:NSUTF8StringEncoding], - @"address": [NSNumber numberWithLong:(uintptr_t)method_getImplementation(methods[i])], + @"address": [NSNumber numberWithLong:STRIP_PAC(method_getImplementation(methods[i]))], @"is_class": @YES, @"type": [NSString stringWithCString:method_getTypeEncoding(methods[i]) encoding:NSUTF8StringEncoding], @"return_type": [NSString stringWithCString:methodReturnType encoding:NSUTF8StringEncoding], @@ -142,7 +149,7 @@ methodReturnType = method_copyReturnType(methods[i]); [objectData[@"methods"] addObject:@{ @"name": [NSString stringWithCString:sel_getName(method_getName(methods[i])) encoding:NSUTF8StringEncoding], - @"address": [NSNumber numberWithLong:(uintptr_t)method_getImplementation(methods[i])], + @"address": [NSNumber numberWithLong:STRIP_PAC(method_getImplementation(methods[i]))], @"is_class": @NO, @"type": [NSString stringWithCString:method_getTypeEncoding(methods[i]) encoding:NSUTF8StringEncoding], @"return_type": [NSString stringWithCString:methodReturnType encoding:NSUTF8StringEncoding],