├── .clang-format ├── .gitignore ├── .gitmodules ├── LICENSE ├── README.md ├── jevxpctrace-test ├── CaptainHook.h ├── CoreSymbolication.h ├── FridaGadget.config ├── FridaGadget.dylib ├── frida-gumpp.xcconfig ├── gen-frida-gumpp-xcconfig.sh ├── jevxpctrace-test-client │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── Assets.xcassets │ │ ├── AccentColor.colorset │ │ │ └── Contents.json │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ ├── Base.lproj │ │ └── Main.storyboard │ ├── ViewController.h │ ├── ViewController.mm │ ├── jevxpctrace_test_client.entitlements │ └── main.m ├── jevxpctrace-test-service │ ├── Info.plist │ ├── jevxpctrace_test_service.h │ ├── jevxpctrace_test_service.m │ ├── jevxpctrace_test_serviceProtocol.h │ └── main.mm ├── jevxpctrace-test.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata │ │ └── xcschemes │ │ ├── jevxpctrace-test-client.xcscheme │ │ ├── jevxpctrace-test-service.xcscheme │ │ └── libxcselectpp-test.xcscheme ├── libdlpp.cpp ├── libdlpp.h ├── libxcselectpp-test │ └── main.mm ├── libxcselectpp.cpp ├── libxcselectpp.h └── privroot │ └── System │ └── Library │ └── PrivateFrameworks │ └── CoreSymbolication.framework │ ├── CoreSymbolication.tbd │ └── Versions │ ├── A │ └── CoreSymbolication.tbd │ └── Current └── notes.txt /.clang-format: -------------------------------------------------------------------------------- 1 | BasedOnStyle: WebKit 2 | IndentWidth: 4 3 | UseTab: Never 4 | ColumnLimit: 120 5 | AllowShortBlocksOnASingleLine: Empty 6 | AllowShortFunctionsOnASingleLine: Empty 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## User settings 6 | xcuserdata/ 7 | 8 | ## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) 9 | *.xcscmblueprint 10 | *.xccheckout 11 | 12 | ## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) 13 | build/ 14 | DerivedData/ 15 | *.moved-aside 16 | *.pbxuser 17 | !default.pbxuser 18 | *.mode1v3 19 | !default.mode1v3 20 | *.mode2v3 21 | !default.mode2v3 22 | *.perspectivev3 23 | !default.perspectivev3 24 | 25 | ## Gcc Patch 26 | /*.gcno 27 | 28 | # Xcode 29 | # 30 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 31 | 32 | ## User settings 33 | xcuserdata/ 34 | 35 | ## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) 36 | *.xcscmblueprint 37 | *.xccheckout 38 | 39 | ## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) 40 | build/ 41 | DerivedData/ 42 | *.moved-aside 43 | *.pbxuser 44 | !default.pbxuser 45 | *.mode1v3 46 | !default.mode1v3 47 | *.mode2v3 48 | !default.mode2v3 49 | *.perspectivev3 50 | !default.perspectivev3 51 | 52 | ## Obj-C/Swift specific 53 | *.hmap 54 | 55 | ## App packaging 56 | *.ipa 57 | *.dSYM.zip 58 | *.dSYM 59 | 60 | # CocoaPods 61 | # 62 | # We recommend against adding the Pods directory to your .gitignore. However 63 | # you should judge for yourself, the pros and cons are mentioned at: 64 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 65 | # 66 | # Pods/ 67 | # 68 | # Add this line if you want to avoid checking in source code from the Xcode workspace 69 | # *.xcworkspace 70 | 71 | # Carthage 72 | # 73 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 74 | # Carthage/Checkouts 75 | 76 | Carthage/Build/ 77 | 78 | # fastlane 79 | # 80 | # It is recommended to not store the screenshots in the git repo. 81 | # Instead, use fastlane to re-generate the screenshots whenever they are needed. 82 | # For more information about the recommended setup visit: 83 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 84 | 85 | fastlane/report.xml 86 | fastlane/Preview.html 87 | fastlane/screenshots/**/*.png 88 | fastlane/test_output 89 | 90 | # Code Injection 91 | # 92 | # After new code Injection tools there's a generated folder /iOSInjectionProject 93 | # https://github.com/johnno1962/injectionforxcode 94 | 95 | iOSInjectionProject/ 96 | 97 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jevinskie/jevxpctrace/166339ab24e4a65426a248fe856af8c5d347c723/.gitmodules -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 2-Clause License 2 | 3 | Copyright (c) 2022, Jevin Sweval 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | 2. Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 20 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 22 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 23 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # jevxpctrace 2 | Hopefully an insightful XPC tracer that helps vulerability research by tracing server and client call stacks 3 | -------------------------------------------------------------------------------- /jevxpctrace-test/CoreSymbolication.h: -------------------------------------------------------------------------------- 1 | // 2 | // CoreSymbolication.h 3 | // 4 | // Created by R J Cooper on 05/06/2012. 5 | // This file: Copyright (c) 2012 Mountainstorm 6 | // API: Copyright (c) 2008 Apple Inc. All rights reserved. 7 | // 8 | // Permission is hereby granted, free of charge, to any person obtaining a copy 9 | // of this software and associated documentation files (the "Software"), to 10 | // deal in the Software without restriction, including without limitation the 11 | // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 12 | // sell copies of the Software, and to permit persons to whom the Software is 13 | // furnished to do so, subject to the following conditions: 14 | // 15 | // The above copyright notice and this permission notice shall be included in 16 | // all copies or substantial portions of the Software. 17 | // 18 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 23 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 24 | // IN THE SOFTWARE. 25 | // 26 | 27 | // 28 | // Derived by looking at use within the dtrace source and a little bit of IDA 29 | // work 30 | // 31 | // See the unit testcases for examples of how to use the API; its a really nice 32 | // symbol api, a real shame Apple dont make it a public framework. 33 | // 34 | // Things you might want to know; 35 | // - a Symbolicator is a top level object representing the kernel/process etc 36 | // - a Symbolicator contains multiple SymbolOwners 37 | // 38 | // - a SymbolOwner represents a blob which owns symbols e.g. executable, 39 | // library 40 | // - a SymbolOwner contains multiple regions and contains multiple symbols 41 | // 42 | // - a Region represents a continuous block of memory within a symbol owner 43 | // e.g. the __TEXT __objc_classname section 44 | // - a Region contains multiple symbols ... not it doesn't own them, just 45 | // contains them 46 | // 47 | // - a Symbol represents a symbol e.g. function, variable 48 | // 49 | 50 | #pragma once 51 | 52 | #ifdef __cplusplus 53 | extern "C" { 54 | #endif 55 | 56 | #include 57 | #include 58 | 59 | /* 60 | * Types 61 | */ 62 | // Under the hood the framework basically just calls through to a set of C++ 63 | // libraries 64 | struct sCSTypeRef { 65 | void* csCppData; // typically retrieved using CSCppSymbol...::data(csData & 66 | // 0xFFFFFFF8) 67 | void* csCppObj; // a pointer to the actual CSCppObject 68 | }; 69 | typedef struct sCSTypeRef CSTypeRef; 70 | 71 | typedef CSTypeRef CSSymbolicatorRef; 72 | typedef CSTypeRef CSSourceInfoRef; 73 | typedef CSTypeRef CSSymbolOwnerRef; 74 | typedef CSTypeRef CSSectionRef; 75 | typedef CSTypeRef CSSegmentRef; 76 | typedef CSTypeRef CSSymbolRef; 77 | typedef CSTypeRef CSRegionRef; 78 | typedef CSTypeRef CSUUIDRef; 79 | 80 | struct sCSRange { 81 | unsigned long long location; 82 | unsigned long long length; 83 | }; 84 | typedef struct sCSRange CSRange; 85 | 86 | // Note: this structure may well be wrong 87 | typedef struct sCSNotificationData { 88 | CSSymbolicatorRef symbolicator; 89 | union { 90 | struct { 91 | long value; 92 | } ping; 93 | 94 | struct { 95 | CSSymbolOwnerRef symbolOwner; 96 | } dyldLoad; 97 | } u; 98 | } CSNotificationData; 99 | 100 | typedef void* CSDictionaryKeyCallBacks; 101 | typedef void* CSDictionaryValueCallBacks; 102 | typedef void* CSSetCallBacks; 103 | 104 | typedef int (^CSNotification)(uint32_t notification_type, CSNotificationData data); 105 | typedef int (^CSRegionIterator)(CSRegionRef region); 106 | typedef int (^CSSymbolOwnerIterator)(CSSymbolOwnerRef owner); 107 | typedef int (^CSSectionIterator)(CSSectionRef section); 108 | typedef int (^CSSourceInfoIterator)(CSSourceInfoRef sourceInfo); 109 | typedef int (^CSSymbolIterator)(CSSymbolRef symbol); 110 | typedef int (^CSSegmentIterator)(CSSegmentRef segment); 111 | 112 | /* 113 | * Defines 114 | */ 115 | #define kCSNull ((CSTypeRef) { NULL, NULL }) 116 | #define kCSNow 0x80000000u 117 | // we've no idea what value kCSSymbolOwnerDataFoundDsym has; its only use in 118 | // dtrace has been optimised out 119 | #define kCSSymbolOwnerDataFoundDsym 0 120 | #define kCSSymbolOwnerIsAOut 0 121 | #define kCSSymbolicatorTrackDyldActivity 1 122 | 123 | #define kCSNotificationPing 1 124 | #define kCSNotificationInitialized 0x0010 125 | #define kCSNotificationDyldLoad 0x0100 126 | #define kCSNotificationDyldUnload 0x0101 127 | // kCSNotificationTimeout must be a value greater than 0x1001 128 | #define kCSNotificationTimeout 0x1002 129 | #define kCSNotificationTaskExit 0x1000 130 | #define kCSNotificationFini 0x80000000 131 | 132 | /* 133 | * External symbols 134 | */ 135 | 136 | const char* kCSRegionMachHeaderName; 137 | const CSDictionaryKeyCallBacks kCSTypeDictionaryKeyCallBacks = nullptr; 138 | const CSDictionaryValueCallBacks kCSTypeDictionaryValueCallBacks = nullptr; 139 | const CSDictionaryKeyCallBacks kCSTypeDictionaryWeakKeyCallBacks = nullptr; 140 | const CSDictionaryValueCallBacks kCSTypeDictionaryWeakValueCallBacks = nullptr; 141 | const CSSetCallBacks kCSTypeSetCallBacks = nullptr; 142 | const CSSetCallBacks kCSTypeSetWeakCallBacks = nullptr; 143 | 144 | /* 145 | * Architecture functions 146 | */ 147 | // Valid names: i386, x86_64, arm, armv4t, armv5tej, armv6, armv7, armv7f, 148 | // armv7k, ppc, ppc64 149 | cpu_type_t CSArchitectureGetArchitectureForName(const char* arch); 150 | cpu_type_t CSArchitectureGetCurrent(void); 151 | cpu_type_t CSArchitectureGetFamily(cpu_type_t type); 152 | const char* CSArchitectureGetFamilyName(cpu_type_t type); 153 | 154 | Boolean CSArchitectureIs32Bit(cpu_type_t type); 155 | Boolean CSArchitectureIs64Bit(cpu_type_t type); 156 | Boolean CSArchitectureIsArm(cpu_type_t type); 157 | Boolean CSArchitectureIsBigEndian(cpu_type_t type); 158 | Boolean CSArchitectureIsI386(cpu_type_t type); 159 | Boolean CSArchitectureIsLittleEndian(cpu_type_t type); 160 | Boolean CSArchitectureIsPPC(cpu_type_t type); 161 | Boolean CSArchitectureIsPPC64(cpu_type_t type); 162 | Boolean CSArchitectureIsX86_64(cpu_type_t type); 163 | 164 | Boolean CSArchitectureMatchesArchitecture(cpu_type_t a, cpu_type_t b); 165 | 166 | /* 167 | * Description functions 168 | */ 169 | CFStringRef CSCopyDescription(CSTypeRef cs); 170 | CFStringRef CSCopyDescriptionWithIndent(CSTypeRef cs, unsigned int indent); 171 | 172 | /* 173 | * General utility functions 174 | */ 175 | Boolean CSEqual(CSTypeRef cs1, CSTypeRef cs2); 176 | // XXX: CSExceptionSafeThreadRunBlock 177 | CFIndex CSGetRetainCount(CSTypeRef cs); 178 | Boolean CSIsNull(CSTypeRef cs); 179 | CSTypeRef CSRetain(CSTypeRef cs); 180 | void CSRelease(CSTypeRef cs); 181 | void CSShow(CSTypeRef cs); 182 | 183 | /* 184 | * Dyld functions 185 | */ 186 | vm_address_t CSGetDyldSharedCacheSlide(mach_port_t port); 187 | CSUUIDRef CSGetDyldSharedCacheUUID(mach_port_t port); 188 | 189 | /* 190 | * XXX: Map functions 191 | */ 192 | // CSMMapArchiveCacheCopyMMapArchive 193 | // CSMMapArchiveCacheReleaseMMapArchive 194 | // CSMMapArchiveCacheSetShouldStoreToDaemon 195 | 196 | /* 197 | * Range functions 198 | */ 199 | Boolean CSRangeContainsRange(CSRange r1, CSRange r2); 200 | Boolean CSRangeIntersectsRange(CSRange r1, CSRange r2); 201 | 202 | /* 203 | * Region functions 204 | */ 205 | CFStringRef CSRegionCopyDescriptionWithIndent(CSRegionRef region, unsigned int indent); 206 | int CSRegionForeachSourceInfo(CSRegionRef region, CSSourceInfoIterator each); 207 | int CSRegionForeachSymbol(CSRegionRef region, CSSymbolIterator each); 208 | const char* CSRegionGetName(CSRegionRef region); 209 | CSRange CSRegionGetRange(CSRegionRef region); 210 | CSSymbolOwnerRef CSRegionGetSymbolOwner(CSRegionRef region); 211 | CSSymbolicatorRef CSRegionGetSymbolicator(CSRegionRef region); 212 | 213 | /* 214 | * XXX: Section/Segment functions 215 | */ 216 | /* 217 | CSSectionGetSegment 218 | CSSegmentForeachSection 219 | */ 220 | 221 | /* 222 | * XXX: Signature functions 223 | */ 224 | /* 225 | CSSignatureAddSegment 226 | CSSignatureAllocateSegments 227 | CSSignatureCopy 228 | CSSignatureEncodeSymbolOwner 229 | CSSignatureEncodeSymbolicator 230 | CSSignatureFreeSegments 231 | */ 232 | 233 | /* 234 | * Source Info functions 235 | */ 236 | CFStringRef CSSourceInfoCopyDescriptionWithIndent(CSSourceInfoRef info, unsigned int indent); 237 | int CSSourceInfoGetColumn(CSSourceInfoRef info); 238 | const char* CSSourceInfoGetFilename(CSSourceInfoRef info); 239 | int CSSourceInfoGetLineNumber(CSSourceInfoRef info); 240 | const char* CSSourceInfoGetPath(CSSourceInfoRef info); 241 | CSRange CSSourceInfoGetRange(CSSourceInfoRef info); 242 | CSRegionRef CSSourceInfoGetRegion(CSSourceInfoRef info); 243 | CSSymbolRef CSSourceInfoGetSymbol(CSSourceInfoRef info); 244 | CSSymbolOwnerRef CSSourceInfoGetSymbolOwner(CSSourceInfoRef info); 245 | CSSymbolicatorRef CSSourceInfoGetSymbolicator(CSSourceInfoRef info); 246 | 247 | /* 248 | * Symbol functions 249 | */ 250 | 251 | CFStringRef CSSymbolCopyDescriptionWithIndent(CSSymbolRef sym, unsigned int indent); 252 | int CSSymbolForeachSourceInfo(CSSymbolRef sym, CSSourceInfoIterator); 253 | long CSSymbolGetFlags(CSSymbolRef sym); 254 | CSTypeRef CSSymbolGetInstructionData(CSSymbolRef sym); 255 | const char* CSSymbolGetMangledName(CSSymbolRef sym); 256 | const char* CSSymbolGetName(CSSymbolRef sym); 257 | CSRange CSSymbolGetRange(CSSymbolRef sym); 258 | CSRegionRef CSSymbolGetRegion(CSSymbolRef sym); 259 | CSSectionRef CSSymbolGetSection(CSSymbolRef sym); 260 | CSSegmentRef CSSymbolGetSegment(CSSymbolRef sym); 261 | CSSymbolOwnerRef CSSymbolGetSymbolOwner(CSSymbolRef sym); 262 | CSSymbolicatorRef CSSymbolGetSymbolicator(CSSymbolRef sym); 263 | Boolean CSSymbolIsArm(CSSymbolRef sym); 264 | Boolean CSSymbolIsDebugMap(CSSymbolRef sym); 265 | Boolean CSSymbolIsDwarf(CSSymbolRef sym); 266 | Boolean CSSymbolIsDyldStub(CSSymbolRef sym); 267 | Boolean CSSymbolIsExternal(CSSymbolRef sym); 268 | Boolean CSSymbolIsFunction(CSSymbolRef sym); 269 | Boolean CSSymbolIsFunctionStarts(CSSymbolRef sym); 270 | Boolean CSSymbolIsKnownLength(CSSymbolRef sym); 271 | Boolean CSSymbolIsMangledNameSourceDwarf(CSSymbolRef sym); 272 | Boolean CSSymbolIsMangledNameSourceDwarfMIPSLinkage(CSSymbolRef sym); 273 | Boolean CSSymbolIsMangledNameSourceNList(CSSymbolRef sym); 274 | Boolean CSSymbolIsMerged(CSSymbolRef sym); 275 | Boolean CSSymbolIsNList(CSSymbolRef sym); 276 | Boolean CSSymbolIsNameSourceDwarf(CSSymbolRef sym); 277 | Boolean CSSymbolIsNameSourceDwarfMIPSLinkage(CSSymbolRef sym); 278 | Boolean CSSymbolIsNameSourceNList(CSSymbolRef sym); 279 | Boolean CSSymbolIsObjcMethod(CSSymbolRef sym); 280 | Boolean CSSymbolIsOmitFramePointer(CSSymbolRef sym); 281 | Boolean CSSymbolIsPrivateExternal(CSSymbolRef sym); 282 | Boolean CSSymbolIsThumb(CSSymbolRef sym); 283 | Boolean CSSymbolIsUnnamed(CSSymbolRef sym); 284 | 285 | /* 286 | * XXX: SymbolOwner functions 287 | */ 288 | /* 289 | CSSymbolOwnerAddInContext 290 | CSSymbolOwnerCacheFlush 291 | CSSymbolOwnerCacheGetEntryCount 292 | CSSymbolOwnerCacheGetFlags 293 | CSSymbolOwnerCacheGetMemoryLimit 294 | CSSymbolOwnerCacheGetMemoryUsed 295 | CSSymbolOwnerCachePrintEntries 296 | CSSymbolOwnerCachePrintStats 297 | CSSymbolOwnerCacheResetStats 298 | CSSymbolOwnerCacheSetFlags 299 | CSSymbolOwnerCacheSetMemoryLimit 300 | CSSymbolOwnerCopyDescriptionWithIndent 301 | CSSymbolOwnerCreateSignature 302 | CSSymbolOwnerEditRelocations 303 | CSSymbolOwnerForeachRegion 304 | CSSymbolOwnerForeachRegionWithName 305 | CSSymbolOwnerForeachSection 306 | CSSymbolOwnerForeachSegment 307 | CSSymbolOwnerForeachSourceInfo 308 | CSSymbolOwnerForeachSymbol 309 | CSSymbolOwnerForeachSymbolWithMangledName 310 | CSSymbolOwnerForeachSymbolWithName 311 | CSSymbolOwnerGetArchitecture 312 | CSSymbolOwnerGetBaseAddress 313 | CSSymbolOwnerGetCFUUIDBytes 314 | CSSymbolOwnerGetCompatibilityVersion 315 | CSSymbolOwnerGetCurrentVersion 316 | CSSymbolOwnerGetDataFlags 317 | CSSymbolOwnerGetDataTypeID 318 | CSSymbolOwnerGetDsymPath 319 | CSSymbolOwnerGetDsymVersion 320 | CSSymbolOwnerGetFlags 321 | CSSymbolOwnerGetLastModifiedTimestamp 322 | CSSymbolOwnerGetLoadTimestamp 323 | CSSymbolOwnerGetName 324 | CSSymbolOwnerGetPath 325 | CSSymbolOwnerGetRegionCount 326 | CSSymbolOwnerGetRegionWithAddress 327 | CSSymbolOwnerGetRegionWithName 328 | CSSymbolOwnerGetSectionWithAddress 329 | CSSymbolOwnerGetSectionWithName 330 | CSSymbolOwnerGetSegmentWithAddress 331 | CSSymbolOwnerGetSourceInfoCount 332 | CSSymbolOwnerGetSourceInfoWithAddress 333 | CSSymbolOwnerGetSymbolCount 334 | CSSymbolOwnerGetSymbolWithAddress 335 | CSSymbolOwnerGetSymbolWithMangledName 336 | CSSymbolOwnerGetSymbolWithName 337 | CSSymbolOwnerGetSymbolicator 338 | CSSymbolOwnerGetTransientUserData 339 | CSSymbolOwnerGetUUID 340 | CSSymbolOwnerGetUnloadTimestamp 341 | CSSymbolOwnerGetVersion 342 | CSSymbolOwnerIsAOut 343 | CSSymbolOwnerIsBundle 344 | CSSymbolOwnerIsCommpage 345 | CSSymbolOwnerIsDsym 346 | CSSymbolOwnerIsDyld 347 | CSSymbolOwnerIsDyldSharedCache 348 | CSSymbolOwnerIsDylib 349 | CSSymbolOwnerIsDylibStub 350 | CSSymbolOwnerIsKextBundle 351 | CSSymbolOwnerIsMachO 352 | CSSymbolOwnerIsMutable 353 | CSSymbolOwnerIsObjCGCSupported 354 | CSSymbolOwnerIsObjCRetainReleaseSupported 355 | CSSymbolOwnerIsObject 356 | CSSymbolOwnerIsObsolete 357 | CSSymbolOwnerIsPIE 358 | CSSymbolOwnerIsProtected 359 | CSSymbolOwnerIsRestricted 360 | CSSymbolOwnerIsSlid 361 | CSSymbolOwnerIsStaticLibraryArchiveEntry 362 | CSSymbolOwnerMakeMutableInContext 363 | CSSymbolOwnerRemoveInContext 364 | CSSymbolOwnerSetLoadTimestamp 365 | CSSymbolOwnerSetPath 366 | CSSymbolOwnerSetRelocationCount 367 | CSSymbolOwnerSetTransientUserData 368 | CSSymbolOwnerSetUnloadTimestamp 369 | */ 370 | 371 | /* 372 | * XXX: Symbolicator functions 373 | */ 374 | // XXX: CSSymbolicatorAddSymbolOwner 375 | // XXX: CSSymbolicatorApplyMutableContextBlock 376 | CFStringRef CSSymbolicatorCopyDescriptionWithIndent(CSSymbolicatorRef cs, unsigned int indent); 377 | CFDataRef CSSymbolicatorCreateSignature(CSSymbolicatorRef cs); 378 | 379 | CSSymbolicatorRef CSSymbolicatorCreateWithMachKernel(void); 380 | CSSymbolicatorRef CSSymbolicatorCreateWithMachKernelFlagsAndNotification(long flags, CSNotification notification); 381 | CSSymbolicatorRef CSSymbolicatorCreateWithPathAndArchitecture(const char* path, cpu_type_t type); 382 | CSSymbolicatorRef CSSymbolicatorCreateWithPathArchitectureFlagsAndNotification( 383 | const char* path, cpu_type_t type, long flags, CSNotification notification); 384 | CSSymbolicatorRef CSSymbolicatorCreateWithPid(pid_t pid); 385 | CSSymbolicatorRef CSSymbolicatorCreateWithPidFlagsAndNotification(pid_t pid, long flags, CSNotification notification); 386 | CSSymbolicatorRef CSSymbolicatorCreateWithSignature(CFDataRef sig); 387 | CSSymbolicatorRef CSSymbolicatorCreateWithSignatureAndNotification(CFDataRef sig, CSNotification notification); 388 | CSSymbolicatorRef CSSymbolicatorCreateWithTask(task_t task); 389 | CSSymbolicatorRef CSSymbolicatorCreateWithTaskFlagsAndNotification( 390 | task_t task, long flags, CSNotification notification); 391 | CSSymbolicatorRef CSSymbolicatorCreateWithURLAndArchitecture(CFURLRef url, cpu_type_t type); 392 | CSSymbolicatorRef CSSymbolicatorCreateWithURLArchitectureFlagsAndNotification( 393 | CFURLRef url, cpu_type_t type, long flags, CSNotification notification); 394 | 395 | int CSSymbolicatorForceFullSymbolExtraction(CSSymbolicatorRef cs); 396 | int CSSymbolicatorForeachRegionAtTime(CSSymbolicatorRef cs, uint64_t time, CSRegionIterator it); 397 | int CSSymbolicatorForeachRegionWithNameAtTime( 398 | CSSymbolicatorRef cs, const char* name, uint64_t time, CSRegionIterator it); 399 | int CSSymbolicatorForeachSectionAtTime(CSSymbolicatorRef cs, uint64_t time, CSSectionIterator it); 400 | int CSSymbolicatorForeachSegmentAtTime(CSSymbolicatorRef cs, uint64_t time, CSSegmentIterator it); 401 | // XXX: CSSymbolicatorForeachSharedCache 402 | // XXX: CSSymbolicatorForeachSharedCacheSymbolicatorWithFlagsAndNotification 403 | int CSSymbolicatorForeachSourceInfoAtTime(CSSymbolicatorRef cs, uint64_t time, CSSourceInfoIterator it); 404 | int CSSymbolicatorForeachSymbolAtTime(CSSymbolicatorRef cs, uint64_t time, CSSymbolIterator it); 405 | int CSSymbolicatorForeachSymbolOwnerAtTime(CSSymbolicatorRef cs, uint64_t time, CSSymbolOwnerIterator it); 406 | 407 | // XXX: CSSymbolicatorForeachSymbolOwnerWithCFUUIDBytesAtTime 408 | int CSSymbolicatorForeachSymbolOwnerWithFlagsAtTime( 409 | CSSymbolicatorRef symbolicator, long flags, uint64_t time, CSSymbolOwnerIterator it); 410 | int CSSymbolicatorForeachSymbolOwnerWithNameAtTime( 411 | CSSymbolicatorRef cs, const char* name, uint64_t time, CSSymbolOwnerIterator it); 412 | int CSSymbolicatorForeachSymbolOwnerWithPathAtTime( 413 | CSSymbolicatorRef cs, const char* name, uint64_t time, CSSymbolOwnerIterator it); 414 | // XXX: CSSymbolicatorForeachSymbolOwnerWithUUIDAtTime 415 | int CSSymbolicatorForeachSymbolWithMangledNameAtTime( 416 | CSSymbolicatorRef cs, const char* name, uint64_t time, CSSymbolIterator it); 417 | int CSSymbolicatorForeachSymbolWithNameAtTime( 418 | CSSymbolicatorRef cs, const char* name, uint64_t time, CSSymbolIterator it); 419 | // XXX: CSSymbolicatorForeachSymbolicatorWithPath 420 | // XXX: CSSymbolicatorForeachSymbolicatorWithPathFlagsAndNotification 421 | // XXX: CSSymbolicatorForeachSymbolicatorWithURL 422 | // XXX: CSSymbolicatorForeachSymbolicatorWithURLFlagsAndNotification 423 | 424 | CSSymbolOwnerRef CSSymbolicatorGetAOutSymbolOwner(CSSymbolicatorRef cs); 425 | cpu_type_t CSSymbolicatorGetArchitecture(CSSymbolicatorRef cs); 426 | vm_address_t CSSymbolicatorGetDyldAllImageInfosAddress(CSSymbolicatorRef cs); 427 | 428 | long CSSymbolicatorGetFlagsForDebugMapOnlyData(void); 429 | long CSSymbolicatorGetFlagsForDsymOnlyData(void); 430 | long CSSymbolicatorGetFlagsForDwarfOnlyData(void); 431 | long CSSymbolicatorGetFlagsForFunctionStartsOnlyData(void); 432 | long CSSymbolicatorGetFlagsForNListOnlyData(void); 433 | long CSSymbolicatorGetFlagsForNoSymbolOrSourceInfoData(void); 434 | 435 | pid_t CSSymbolicatorGetPid(CSSymbolicatorRef cs); 436 | int CSSymbolicatorGetRegionCountAtTime(CSSymbolicatorRef cs, uint64_t time); 437 | CSRegionRef CSSymbolicatorGetRegionWithAddressAtTime(CSSymbolicatorRef cs, vm_address_t addr, uint64_t time); 438 | CSRegionRef CSSymbolicatorGetRegionWithNameAtTime(CSSymbolicatorRef cs, const char* name, uint64_t time); 439 | CSSectionRef CSSymbolicatorGetSectionWithAddressAtTime(CSSymbolicatorRef cs, vm_address_t addr, uint64_t time); 440 | CSSegmentRef CSSymbolicatorGetSegmentWithAddressAtTime(CSSymbolicatorRef cs, vm_address_t addr, uint64_t time); 441 | vm_address_t CSSymbolicatorGetSharedCacheSlide(CSSymbolicatorRef cs); 442 | CSUUIDRef CSSymbolicatorGetSharedCacheUUID(CSSymbolicatorRef cs); 443 | int CSSymbolicatorGetSourceInfoCountAtTime(CSSymbolicatorRef cs, uint64_t time); 444 | CSSourceInfoRef CSSymbolicatorGetSourceInfoWithAddressAtTime(CSSymbolicatorRef cs, vm_address_t addr, uint64_t time); 445 | int CSSymbolicatorGetSymbolCountAtTime(CSSymbolicatorRef cs, uint64_t time); 446 | CSSymbolOwnerRef CSSymbolicatorGetSymbolOwner(CSSymbolicatorRef cs); 447 | int CSSymbolicatorGetSymbolOwnerCountAtTime(CSSymbolicatorRef cs, uint64_t time); 448 | CSSymbolOwnerRef CSSymbolicatorGetSymbolOwnerWithAddressAtTime(CSSymbolicatorRef cs, vm_address_t addr, uint64_t time); 449 | // XXX: CSSymbolicatorGetSymbolOwnerWithCFUUIDBytesAtTime 450 | CSSymbolOwnerRef CSSymbolicatorGetSymbolOwnerWithNameAtTime(CSSymbolicatorRef cs, const char* name, uint64_t time); 451 | CSSymbolOwnerRef CSSymbolicatorGetSymbolOwnerWithUUIDAtTime( 452 | CSSymbolicatorRef symbolicator, CFUUIDRef uuid, uint64_t time); 453 | CSSymbolRef CSSymbolicatorGetSymbolWithAddressAtTime(CSSymbolicatorRef cs, vm_address_t addr, uint64_t time); 454 | CSSymbolRef CSSymbolicatorGetSymbolWithMangledNameAtTime(CSSymbolicatorRef cs, const char* name, uint64_t time); 455 | CSSymbolRef CSSymbolicatorGetSymbolWithMangledNameFromSymbolOwnerWithNameAtTime( 456 | CSSymbolicatorRef cs, CSSymbolOwnerRef owner, const char* name, uint64_t time); 457 | CSSymbolRef CSSymbolicatorGetSymbolWithNameAtTime(CSSymbolicatorRef cs, const char* name, uint64_t time); 458 | CSSymbolRef CSSymbolicatorGetSymbolWithNameFromSymbolOwnerWithNameAtTime( 459 | CSSymbolicatorRef cs, CSSymbolOwnerRef owner, const char* name, uint64_t time); 460 | mach_port_t CSSymbolicatorGetTask(CSSymbolicatorRef cs); 461 | Boolean CSSymbolicatorIsKernelSymbolicator(CSSymbolicatorRef cs); 462 | Boolean CSSymbolicatorIsTaskTranslated(CSSymbolicatorRef cs); 463 | Boolean CSSymbolicatorIsTaskValid(CSSymbolicatorRef cs); 464 | void CSSymbolicatorResymbolicate(CSSymbolicatorRef cs); 465 | void CSSymbolicatorResymbolicateFail(CSSymbolicatorRef cs); 466 | int CSSymbolicatorSetForceGlobalSafeMachVMReads(CSSymbolicatorRef cs); 467 | 468 | /* 469 | * XXX: CSUUID 470 | */ 471 | /* 472 | CSUUIDCFUUIDBytesToPath 473 | CSUUIDCFUUIDBytesToString 474 | CSUUIDStringToCFUUIDBytes 475 | */ 476 | 477 | /* 478 | * SymbolOwner functions 479 | */ 480 | const char* CSSymbolOwnerGetPath(CSSymbolOwnerRef symbol); 481 | const char* CSSymbolOwnerGetName(CSSymbolOwnerRef symbol); 482 | vm_address_t CSSymbolOwnerGetBaseAddress(CSSymbolOwnerRef owner); 483 | cpu_type_t CSSymbolOwnerGetArchitecture(CSSymbolOwnerRef owner); 484 | Boolean CSSymbolOwnerIsObject(CSSymbolOwnerRef owner); 485 | long CSSymbolOwnerGetDataFlags(CSSymbolOwnerRef owner); 486 | CSRegionRef CSSymbolOwnerGetRegionWithName(CSSymbolOwnerRef owner, const char* name); 487 | CSSymbolRef CSSymbolOwnerGetSymbolWithName(CSSymbolOwnerRef owner, const char* name); 488 | CSSymbolRef CSSymbolOwnerGetSymbolWithAddress(CSSymbolOwnerRef owner, mach_vm_address_t addr); 489 | 490 | long CSSymbolOwnerForeachSymbol(CSSymbolOwnerRef owner, CSSymbolIterator each); 491 | 492 | /* Other exports 493 | 494 | __crashreporter_info__ 495 | clear_mapped_memory 496 | create_mapped_memory_cache_for_task 497 | create_sampling_context_for_task 498 | demangle 499 | destroy_mapped_memory_cache 500 | destroy_sampling_context 501 | dispatch_queue_name_for_serial_number 502 | find_node 503 | fixup_frames 504 | get_remote_thread_dispatch_queue 505 | 506 | map_new_node 507 | mapped_memory_read 508 | mapped_memory_read_pointer 509 | next_node 510 | sample_remote_thread 511 | sample_remote_thread_with_dispatch_queue 512 | sampling_context_clear_cache 513 | task_is_64bit 514 | thread_name_for_thread_port 515 | */ 516 | 517 | #ifdef __cplusplus 518 | } 519 | #endif 520 | -------------------------------------------------------------------------------- /jevxpctrace-test/FridaGadget.config: -------------------------------------------------------------------------------- 1 | { 2 | "interaction": { 3 | "type": "listen", 4 | "address": "127.0.0.1", 5 | "port": 27043, 6 | "on_port_conflict": "pick-next", 7 | "on_load": "resume" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /jevxpctrace-test/FridaGadget.dylib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jevinskie/jevxpctrace/166339ab24e4a65426a248fe856af8c5d347c723/jevxpctrace-test/FridaGadget.dylib -------------------------------------------------------------------------------- /jevxpctrace-test/frida-gumpp.xcconfig: -------------------------------------------------------------------------------- 1 | OTHER_CFLAGS = $(inherited) -I/Users/jevin/code/frida/git/frida/build/frida-macos-arm64/include/frida-1.0 -I/Users/jevin/code/frida/git/frida/build/sdk-macos-arm64/include -I/Users/jevin/code/frida/git/frida/build/sdk-macos-arm64/include/glib-2.0 -I/Users/jevin/code/frida/git/frida/build/sdk-macos-arm64/lib/glib-2.0/include -I/Users/jevin/code/frida/git/frida/build/sdk-macos-arm64/include -I/Users/jevin/code/frida/git/frida/build/sdk-macos-arm64/include/capstone 2 | OTHER_LDFLAGS = $(inherited) -L/Users/jevin/code/frida/git/frida/build/frida-macos-arm64/lib -L/Users/jevin/code/frida/git/frida/build/sdk-macos-arm64/lib -lfrida-gumpp-1.0 -lfrida-gum-heap-1.0 -lfrida-gum-prof-1.0 -lfrida-gum-1.0 -lgio-2.0 -lresolv -lgobject-2.0 -lffi -lgmodule-2.0 -lglib-2.0 -liconv -lm -lz -lcapstone 3 | -------------------------------------------------------------------------------- /jevxpctrace-test/gen-frida-gumpp-xcconfig.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env zsh 2 | 3 | 4 | set -o errexit 5 | set -o nounset 6 | set -o pipefail 7 | 8 | # set -o xtrace 9 | 10 | # FRIDA_ROOT_MACOS_ARM64 11 | # FRIDA_SDK_ROOT_MACOS_ARM64 12 | 13 | CFLAGS=$(pkg-config frida-gumpp-1.0 --static --cflags --define-variable=frida_sdk_prefix=${FRIDA_SDK_ROOT_MACOS_ARM64}) 14 | LDFLAGS=$(pkg-config frida-gumpp-1.0 --static --libs --define-variable=frida_sdk_prefix=${FRIDA_SDK_ROOT_MACOS_ARM64}) 15 | 16 | echo "OTHER_CFLAGS = \$(inherited) ${CFLAGS}" 17 | echo "OTHER_LDFLAGS = \$(inherited) ${LDFLAGS}" 18 | -------------------------------------------------------------------------------- /jevxpctrace-test/jevxpctrace-test-client/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // jevxpctrace-test-client 4 | // 5 | // Created by Jevin Sweval on 11/12/21. 6 | // 7 | 8 | #import 9 | 10 | @interface AppDelegate : NSObject 11 | 12 | @end 13 | -------------------------------------------------------------------------------- /jevxpctrace-test/jevxpctrace-test-client/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // jevxpctrace-test-client 4 | // 5 | // Created by Jevin Sweval on 11/12/21. 6 | // 7 | 8 | #import "AppDelegate.h" 9 | 10 | @interface AppDelegate () 11 | 12 | @end 13 | 14 | @implementation AppDelegate 15 | 16 | - (void)applicationDidFinishLaunching:(NSNotification*)aNotification 17 | { 18 | // Insert code here to initialize your application 19 | } 20 | 21 | - (void)applicationWillTerminate:(NSNotification*)aNotification 22 | { 23 | // Insert code here to tear down your application 24 | } 25 | 26 | - (BOOL)applicationSupportsSecureRestorableState:(NSApplication*)app 27 | { 28 | return YES; 29 | } 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /jevxpctrace-test/jevxpctrace-test-client/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /jevxpctrace-test/jevxpctrace-test-client/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "mac", 5 | "scale" : "1x", 6 | "size" : "16x16" 7 | }, 8 | { 9 | "idiom" : "mac", 10 | "scale" : "2x", 11 | "size" : "16x16" 12 | }, 13 | { 14 | "idiom" : "mac", 15 | "scale" : "1x", 16 | "size" : "32x32" 17 | }, 18 | { 19 | "idiom" : "mac", 20 | "scale" : "2x", 21 | "size" : "32x32" 22 | }, 23 | { 24 | "idiom" : "mac", 25 | "scale" : "1x", 26 | "size" : "128x128" 27 | }, 28 | { 29 | "idiom" : "mac", 30 | "scale" : "2x", 31 | "size" : "128x128" 32 | }, 33 | { 34 | "idiom" : "mac", 35 | "scale" : "1x", 36 | "size" : "256x256" 37 | }, 38 | { 39 | "idiom" : "mac", 40 | "scale" : "2x", 41 | "size" : "256x256" 42 | }, 43 | { 44 | "idiom" : "mac", 45 | "scale" : "1x", 46 | "size" : "512x512" 47 | }, 48 | { 49 | "idiom" : "mac", 50 | "scale" : "2x", 51 | "size" : "512x512" 52 | } 53 | ], 54 | "info" : { 55 | "author" : "xcode", 56 | "version" : 1 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /jevxpctrace-test/jevxpctrace-test-client/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /jevxpctrace-test/jevxpctrace-test-client/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | 527 | 528 | Default 529 | 530 | 531 | 532 | 533 | 534 | 535 | Left to Right 536 | 537 | 538 | 539 | 540 | 541 | 542 | Right to Left 543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | 552 | 553 | Default 554 | 555 | 556 | 557 | 558 | 559 | 560 | Left to Right 561 | 562 | 563 | 564 | 565 | 566 | 567 | Right to Left 568 | 569 | 570 | 571 | 572 | 573 | 574 | 575 | 576 | 577 | 578 | 579 | 580 | 581 | 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | 590 | 591 | 592 | 593 | 594 | 595 | 596 | 597 | 598 | 599 | 600 | 601 | 602 | 603 | 604 | 605 | 606 | 607 | 608 | 609 | 610 | 611 | 612 | 613 | 614 | 615 | 616 | 617 | 618 | 619 | 620 | 621 | 622 | 623 | 624 | 625 | 626 | 627 | 628 | 629 | 630 | 631 | 632 | 633 | 634 | 635 | 636 | 637 | 638 | 639 | 640 | 641 | 642 | 643 | 644 | 645 | 646 | 647 | 648 | 649 | 650 | 651 | 652 | 653 | 654 | 655 | 656 | 657 | 658 | 659 | 660 | 661 | 662 | 663 | 664 | 665 | 666 | 667 | 668 | 669 | 670 | 671 | 672 | 673 | 674 | 675 | 676 | 677 | 678 | 679 | 680 | 681 | 682 | 683 | 684 | 685 | 686 | 687 | 688 | 689 | 690 | 691 | 692 | 693 | 694 | 695 | 696 | 697 | 698 | 699 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | 718 | -------------------------------------------------------------------------------- /jevxpctrace-test/jevxpctrace-test-client/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // jevxpctrace-test-client 4 | // 5 | // Created by Jevin Sweval on 11/12/21. 6 | // 7 | 8 | #import 9 | 10 | @interface ViewController : NSViewController 11 | 12 | @end 13 | -------------------------------------------------------------------------------- /jevxpctrace-test/jevxpctrace-test-client/ViewController.mm: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // jevxpctrace-test-client 4 | // 5 | // Created by Jevin Sweval on 11/12/21. 6 | // 7 | 8 | #include 9 | 10 | #import "ViewController.h" 11 | 12 | #import 13 | 14 | #include 15 | #include 16 | #include 17 | #include 18 | 19 | #include 20 | #include 21 | 22 | #define YESNO(x) ((x) ? @"YES" : @"NO") 23 | 24 | BOOL doBP; 25 | 26 | CHDeclareClass(NSXPCDecoder); 27 | 28 | @interface NSXPCDecoder : NSXPCCoder 29 | - (int)__decodeXPCObject:(xpc_object_t)root 30 | allowingSimpleMessageSend:(BOOL)allowSimpleMessageSend 31 | outInvocation:(NSInvocation**)invocation 32 | outArguments:(id*)arguments 33 | outArgumentsMaxCount:(NSUInteger)maxArgCount 34 | outMethodSignature:(NSMethodSignature**)outMethodSignature 35 | outSelector:(SEL*)outSelector 36 | isReply:(BOOL)isReply 37 | replySelector:(SEL)replySelector 38 | interface:(NSXPCInterface*)interface; 39 | @end 40 | 41 | CHConstructor 42 | { 43 | CHLoadLateClass(NSXPCDecoder); 44 | } 45 | 46 | #define JEVTRACE_CS_HEADER 0x0d7029bau 47 | #define JEVTRACE_CS_FOOTER 0x2845443eu 48 | 49 | __attribute__((no_sanitize("address"))) bool getJevTraceBuf(void* sp, uint8_t** begin, uint8_t** end) 50 | { 51 | bool isGood = false; 52 | 53 | if (!sp || !begin || !end) { 54 | return false; 55 | } 56 | 57 | uint32_t* p = (uint32_t*)sp; 58 | while (*p != JEVTRACE_CS_HEADER) { 59 | ++p; 60 | } 61 | *begin = (uint8_t*)p; 62 | 63 | while (*p != JEVTRACE_CS_FOOTER) { 64 | ++p; 65 | } 66 | *end = (uint8_t*)(p + 1); 67 | 68 | isGood = true; 69 | 70 | finish: 71 | return isGood; 72 | } 73 | 74 | void putCallstackOnStack(void) 75 | { 76 | void* bt_buf[128] = { NULL }; 77 | int num_frames = backtrace(bt_buf, sizeof(bt_buf) / sizeof(void*)); 78 | assert(num_frames > 0); 79 | 80 | CSSymbolicatorRef cs = CSSymbolicatorCreateWithTask(mach_task_self()); 81 | assert(!CSIsNull(cs)); 82 | 83 | NSMutableArray* bt = [NSMutableArray arrayWithCapacity:128]; 84 | 85 | for (int ret_addr_idx = 0; ret_addr_idx < num_frames; ++ret_addr_idx) { 86 | uintptr_t ret_addr = (uintptr_t)bt_buf[ret_addr_idx]; 87 | CSSymbolRef sym = CSSymbolicatorGetSymbolWithAddressAtTime(cs, (vm_address_t)ret_addr, kCSNow); 88 | CSSymbolOwnerRef sym_owner = CSSymbolGetSymbolOwner(sym); 89 | const char* mod_name = CSSymbolOwnerGetName(sym_owner); 90 | // CSSymbolRef sym = CSSourceInfoGetSymbol(info); 91 | CSRange rng = CSSymbolGetRange(sym); 92 | const char* sym_name = CSSymbolGetName(sym); 93 | uintptr_t off = ret_addr - (uintptr_t)rng.location; 94 | 95 | NSDictionary* entry = 96 | @{@"addr" : @(rng.location), 97 | @"name" : @(sym_name), 98 | @"off" : @(off), 99 | @"mod" : @(mod_name)}; 100 | bt[ret_addr_idx] = entry; 101 | 102 | // NSLog(@"symbol: %s %p off: 0x%tx", sym_name, (const void 103 | // *)rng.location, off); 104 | } 105 | // NSLog(@"bt: %@", bt); 106 | 107 | NSError* error = nil; 108 | NSData* btBPlist = [NSPropertyListSerialization dataWithPropertyList:bt 109 | format:NSPropertyListBinaryFormat_v1_0 110 | options:NSPropertyListImmutable 111 | error:&error]; 112 | assert(!error); 113 | uint8_t buf[16 * 1024 * 8]; 114 | // uint8_t buf[32]; 115 | memset(buf, 0, sizeof(buf)); 116 | 117 | uint32_t* header_p = (uint32_t*)buf; 118 | uint32_t* size_p = header_p + 1; 119 | uint8_t* buf_p = (uint8_t*)(size_p + 1); 120 | uint32_t* footer_p = (uint32_t*)(buf + sizeof(buf) - sizeof(uint32_t)); 121 | *header_p = JEVTRACE_CS_HEADER; 122 | *size_p = (uint32_t)btBPlist.length; 123 | // assert(btBPlist.length < sizeof(buf) - 3*sizeof(uint32_t)); 124 | memcpy(buf_p, btBPlist.bytes, btBPlist.length); 125 | *footer_p = JEVTRACE_CS_FOOTER; 126 | 127 | void* sp = NULL; 128 | 129 | __asm __volatile("mov %[_sp], sp\n\t" 130 | : [_sp] "=r"(sp) /* outputs */ 131 | ); 132 | 133 | NSLog(@"sp: %p", sp); 134 | uint8_t* tb = NULL; 135 | uint8_t* te = NULL; 136 | bool gotTraceBuf = getJevTraceBuf(sp, &tb, &te); 137 | NSLog(@"gotTraceBuf: %@ tb: %p te: %p", YESNO(gotTraceBuf), tb, te); 138 | if (gotTraceBuf) { 139 | uint32_t* found_header_p = (uint32_t*)tb; 140 | uint32_t* found_size_p = found_header_p + 1; 141 | uint8_t* found_buf_p = (uint8_t*)(found_size_p + 1); 142 | NSLog(@"founBt length: %u", *found_size_p); 143 | NSData* foundBuf = [NSData dataWithBytes:found_buf_p length:*found_size_p]; 144 | NSDictionary* foundBt = [NSPropertyListSerialization propertyListWithData:foundBuf 145 | options:NSPropertyListImmutable 146 | format:nil 147 | error:&error]; 148 | assert(!error); 149 | NSLog(@"foundBt: %@", foundBt); 150 | } 151 | } 152 | 153 | @protocol DummyProtocol 154 | @end 155 | 156 | void dumpXPCObject(xpc_object_t dict) 157 | { 158 | // doBP = NO; 159 | int res = -1; 160 | NSInvocation* invoc; 161 | __autoreleasing id args[32] = { nil }; 162 | NSMethodSignature* sig; 163 | SEL sel; 164 | 165 | NSLog(@"dict: %@", dict); 166 | 167 | xpc_object_t root = xpc_dictionary_get_value(dict, "root"); 168 | NSLog(@"root: %@", root); 169 | 170 | const void* root_buf = xpc_data_get_bytes_ptr(root); 171 | size_t root_len = xpc_data_get_length(root); 172 | NSLog(@"root_buf: %p root_len: %zu", root_buf, root_len); 173 | 174 | NSXPCInterface* interface = [NSXPCInterface interfaceWithProtocol:@protocol(DummyProtocol)]; 175 | 176 | NSXPCDecoder* decoder = [[CHClass(NSXPCDecoder) alloc] init]; 177 | res = [decoder __decodeXPCObject:dict 178 | allowingSimpleMessageSend:YES 179 | outInvocation:&invoc 180 | outArguments:args 181 | outArgumentsMaxCount:32 182 | outMethodSignature:&sig 183 | outSelector:&sel 184 | isReply:NO 185 | replySelector:nil 186 | interface:interface]; 187 | NSLog(@"res: %d invoc: %@ args[0]: %@ args[1]: %@ args[2]: %@ args[3]: %@ " 188 | @"sig: %@ sel: %@", 189 | res, invoc, args[0], args[1], args[2], args[3], sig, NSStringFromSelector(sel)); 190 | } 191 | 192 | class xpc_connection_send_message_with_reply_hook_t : public Gum::InvocationListener { 193 | public: 194 | virtual void on_enter(Gum::InvocationContext* context) 195 | { 196 | xpc_object_t msg = context->get_nth_argument_bridged(1); 197 | size_t hash = msg ? xpc_hash(msg) : 0; 198 | NSLog(@"%s %@ hash: 0x%016zx", __PRETTY_FUNCTION__, msg, hash); 199 | } 200 | 201 | virtual void on_leave(Gum::InvocationContext* context) 202 | { 203 | // NSLog(@"%s", __PRETTY_FUNCTION__); 204 | } 205 | }; 206 | 207 | static Gum::Interceptor* interceptor; 208 | 209 | static xpc_connection_send_message_with_reply_hook_t* xpc_connection_send_message_with_reply_hook; 210 | 211 | static void installHook(void) 212 | { 213 | interceptor = Gum::Interceptor_obtain(); 214 | xpc_connection_send_message_with_reply_hook = new xpc_connection_send_message_with_reply_hook_t; 215 | gpointer xpc_connection_send_message_with_reply_fptr 216 | = GSIZE_TO_POINTER(gum_module_find_symbol_by_name("libxpc.dylib", "xpc_connection_send_message_with_reply")); 217 | NSLog(@"xpc_connection_send_message_with_reply_fptr: %p", (void*)xpc_connection_send_message_with_reply_fptr); 218 | interceptor->attach(reinterpret_cast(xpc_connection_send_message_with_reply_fptr), 219 | xpc_connection_send_message_with_reply_hook, nullptr); 220 | // interceptor->detach (&listener); 221 | } 222 | 223 | @implementation ViewController 224 | 225 | - (void)xpcTest 226 | { 227 | installHook(); 228 | 229 | NSXPCConnection* xpcConn = [[NSXPCConnection alloc] initWithServiceName:@"vin.je.jevxpctrace-test-service"]; 230 | xpcConn.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(jevxpctrace_test_serviceProtocol)]; 231 | [xpcConn resume]; 232 | 233 | id proxy = xpcConn.remoteObjectProxy; 234 | 235 | doBP = YES; 236 | [proxy upperCaseString:@"hello" 237 | withReply:^(NSString* aString) { 238 | // We have received a response. Update our text field, but do 239 | // it on the main thread. 240 | NSLog(@"Result string was: %@", aString); 241 | putCallstackOnStack(); 242 | [xpcConn invalidate]; 243 | }]; 244 | doBP = NO; 245 | } 246 | 247 | - (void)viewDidLoad 248 | { 249 | [super viewDidLoad]; 250 | 251 | [self xpcTest]; 252 | } 253 | 254 | - (void)setRepresentedObject:(id)representedObject 255 | { 256 | [super setRepresentedObject:representedObject]; 257 | 258 | // Update the view, if already loaded. 259 | } 260 | 261 | @end 262 | -------------------------------------------------------------------------------- /jevxpctrace-test/jevxpctrace-test-client/jevxpctrace_test_client.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.files.user-selected.read-only 8 | 9 | com.apple.security.network.server 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /jevxpctrace-test/jevxpctrace-test-client/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // jevxpctrace-test-client 4 | // 5 | // Created by Jevin Sweval on 11/12/21. 6 | // 7 | 8 | #import 9 | 10 | int main(int argc, const char* argv[]) 11 | { 12 | @autoreleasepool { 13 | // Setup code that might create autoreleased objects goes here. 14 | } 15 | return NSApplicationMain(argc, argv); 16 | } 17 | -------------------------------------------------------------------------------- /jevxpctrace-test/jevxpctrace-test-service/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | XPCService 6 | 7 | ServiceType 8 | Application 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /jevxpctrace-test/jevxpctrace-test-service/jevxpctrace_test_service.h: -------------------------------------------------------------------------------- 1 | // 2 | // jevxpctrace_test_service.h 3 | // jevxpctrace-test-service 4 | // 5 | // Created by Jevin Sweval on 11/12/21. 6 | // 7 | 8 | #import "jevxpctrace_test_serviceProtocol.h" 9 | #import 10 | 11 | // This object implements the protocol which we have defined. It provides the 12 | // actual behavior for the service. It is 'exported' by the service to make it 13 | // available to the process hosting the service over an NSXPCConnection. 14 | @interface jevxpctrace_test_service : NSObject 15 | @end 16 | -------------------------------------------------------------------------------- /jevxpctrace-test/jevxpctrace-test-service/jevxpctrace_test_service.m: -------------------------------------------------------------------------------- 1 | // 2 | // jevxpctrace_test_service.m 3 | // jevxpctrace-test-service 4 | // 5 | // Created by Jevin Sweval on 11/12/21. 6 | // 7 | 8 | #import "jevxpctrace_test_service.h" 9 | 10 | @implementation jevxpctrace_test_service 11 | 12 | // This implements the example protocol. Replace the body of this class with the 13 | // implementation of this service's protocol. 14 | - (void)upperCaseString:(NSString*)aString withReply:(void (^)(NSString*))reply 15 | { 16 | NSString* response = [aString uppercaseString]; 17 | NSLog(@"request: %@ response: %@", aString, response); 18 | reply(response); 19 | } 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /jevxpctrace-test/jevxpctrace-test-service/jevxpctrace_test_serviceProtocol.h: -------------------------------------------------------------------------------- 1 | // 2 | // jevxpctrace_test_serviceProtocol.h 3 | // jevxpctrace-test-service 4 | // 5 | // Created by Jevin Sweval on 11/12/21. 6 | // 7 | 8 | #import 9 | 10 | // The protocol that this service will vend as its API. This header file will 11 | // also need to be visible to the process hosting the service. 12 | @protocol jevxpctrace_test_serviceProtocol 13 | 14 | // Replace the API of this protocol with an API appropriate to the service you 15 | // are vending. 16 | - (void)upperCaseString:(NSString*)aString withReply:(void (^)(NSString*))reply; 17 | 18 | @end 19 | 20 | /* 21 | To use the service from an application or other process, use NSXPCConnection to 22 | establish a connection to the service by doing something like this: 23 | 24 | _connectionToService = [[NSXPCConnection alloc] 25 | initWithServiceName:@"vin.je.jevxpctrace-test-service"]; 26 | _connectionToService.remoteObjectInterface = [NSXPCInterface 27 | interfaceWithProtocol:@protocol(jevxpctrace_test_serviceProtocol)]; 28 | [_connectionToService resume]; 29 | 30 | Once you have a connection to the service, you can use it like this: 31 | 32 | [[_connectionToService remoteObjectProxy] upperCaseString:@"hello" 33 | withReply:^(NSString *aString) { 34 | // We have received a response. Update our text field, but do it on the 35 | main thread. NSLog(@"Result string was: %@", aString); 36 | }]; 37 | 38 | And, when you are finished with the service, clean up the connection like this: 39 | 40 | [_connectionToService invalidate]; 41 | */ 42 | -------------------------------------------------------------------------------- /jevxpctrace-test/jevxpctrace-test-service/main.mm: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // jevxpctrace-test-service 4 | // 5 | // Created by Jevin Sweval on 11/12/21. 6 | // 7 | 8 | #import "jevxpctrace_test_service.h" 9 | #import 10 | 11 | #include 12 | #include 13 | 14 | @interface ServiceDelegate : NSObject 15 | @end 16 | 17 | @implementation ServiceDelegate 18 | 19 | - (BOOL)listener:(NSXPCListener*)listener shouldAcceptNewConnection:(NSXPCConnection*)newConnection 20 | { 21 | // This method is where the NSXPCListener configures, accepts, and resumes a 22 | // new incoming NSXPCConnection. 23 | 24 | // Configure the connection. 25 | // First, set the interface that the exported object implements. 26 | newConnection.exportedInterface = 27 | [NSXPCInterface interfaceWithProtocol:@protocol(jevxpctrace_test_serviceProtocol)]; 28 | 29 | // Next, set the object that the connection exports. All messages sent on 30 | // the connection to this service will be sent to the exported object to 31 | // handle. The connection retains the exported object. 32 | jevxpctrace_test_service* exportedObject = [jevxpctrace_test_service new]; 33 | newConnection.exportedObject = exportedObject; 34 | 35 | // Resuming the connection allows the system to deliver more incoming 36 | // messages. 37 | [newConnection resume]; 38 | 39 | // Returning YES from this method tells the system that you have accepted 40 | // this connection. If you want to reject the connection for some reason, 41 | // call -invalidate on the connection and return NO. 42 | return YES; 43 | } 44 | 45 | @end 46 | 47 | class _xpc_connection_call_event_handler_hook_t : public Gum::InvocationListener { 48 | public: 49 | virtual void on_enter(Gum::InvocationContext* context) 50 | { 51 | xpc_object_t event = context->get_nth_argument_bridged(1); 52 | size_t hash = event ? xpc_hash(event) : 0; 53 | NSLog(@"%s %@ hash: 0x%016zx", __PRETTY_FUNCTION__, event, hash); 54 | } 55 | 56 | virtual void on_leave(Gum::InvocationContext* context) 57 | { 58 | // NSLog(@"%s", __PRETTY_FUNCTION__); 59 | } 60 | }; 61 | 62 | static Gum::Interceptor* interceptor; 63 | 64 | static _xpc_connection_call_event_handler_hook_t* _xpc_connection_call_event_handler_hook; 65 | 66 | static void installHook(void) 67 | { 68 | interceptor = Gum::Interceptor_obtain(); 69 | _xpc_connection_call_event_handler_hook = new _xpc_connection_call_event_handler_hook_t; 70 | gpointer _xpc_connection_call_event_handler_fptr 71 | = GSIZE_TO_POINTER(gum_module_find_symbol_by_name("libxpc.dylib", "_xpc_connection_call_event_handler")); 72 | NSLog(@"_xpc_connection_call_event_handler_fptr: %p", (void*)_xpc_connection_call_event_handler_fptr); 73 | interceptor->attach(reinterpret_cast(_xpc_connection_call_event_handler_fptr), 74 | _xpc_connection_call_event_handler_hook, nullptr); 75 | // interceptor->detach (&listener); 76 | } 77 | 78 | int main(int argc, const char* argv[]) 79 | { 80 | dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ installHook(); }); 81 | 82 | // Create the delegate for the service. 83 | ServiceDelegate* delegate = [ServiceDelegate new]; 84 | 85 | // Set up the one NSXPCListener for this service. It will handle all 86 | // incoming connections. 87 | NSXPCListener* listener = [NSXPCListener serviceListener]; 88 | listener.delegate = delegate; 89 | 90 | // Resuming the serviceListener starts this service. This method does not 91 | // return. 92 | [listener resume]; 93 | return 0; 94 | } 95 | -------------------------------------------------------------------------------- /jevxpctrace-test/jevxpctrace-test.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 55; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 0915ACAD27408CBF00D24554 /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0915ACAC27408CBF00D24554 /* main.mm */; }; 11 | 0915ACB127408D1A00D24554 /* libxcselectpp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0915ACA427408C9500D24554 /* libxcselectpp.cpp */; }; 12 | 0981EAF32740B583005E663C /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0981EAF22740B583005E663C /* AppKit.framework */; }; 13 | 09FB9D5E273EE62100D65871 /* jevxpctrace_test_service.m in Sources */ = {isa = PBXBuildFile; fileRef = 09FB9D5D273EE62100D65871 /* jevxpctrace_test_service.m */; }; 14 | 09FB9D60273EE62100D65871 /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = 09FB9D5F273EE62100D65871 /* main.mm */; }; 15 | 09FB9D84273EE86300D65871 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 09FB9D83273EE86300D65871 /* AppDelegate.m */; }; 16 | 09FB9D87273EE86300D65871 /* ViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 09FB9D86273EE86300D65871 /* ViewController.mm */; }; 17 | 09FB9D89273EE86300D65871 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 09FB9D88273EE86300D65871 /* Assets.xcassets */; }; 18 | 09FB9D8C273EE86300D65871 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 09FB9D8A273EE86300D65871 /* Main.storyboard */; }; 19 | 09FB9D8E273EE86300D65871 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 09FB9D8D273EE86300D65871 /* main.m */; }; 20 | 09FB9D94273EE8AC00D65871 /* jevxpctrace-test-service.xpc in Embed XPC Services */ = {isa = PBXBuildFile; fileRef = 09FB9D59273EE62100D65871 /* jevxpctrace-test-service.xpc */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 21 | 09FB9DAD273F833600D65871 /* FridaGadget.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 09FB9DAB273F833600D65871 /* FridaGadget.dylib */; }; 22 | 09FB9DAE273F833600D65871 /* FridaGadget.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 09FB9DAB273F833600D65871 /* FridaGadget.dylib */; }; 23 | 09FB9DB1273F834000D65871 /* FridaGadget.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = 09FB9DAB273F833600D65871 /* FridaGadget.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 24 | 09FB9DB2273F834F00D65871 /* FridaGadget.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = 09FB9DAB273F833600D65871 /* FridaGadget.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 25 | 09FB9DBD273F98C200D65871 /* FridaGadget.config in Resources */ = {isa = PBXBuildFile; fileRef = 09FB9DAC273F833600D65871 /* FridaGadget.config */; }; 26 | 09FB9DBE273F98D200D65871 /* FridaGadget.config in Resources */ = {isa = PBXBuildFile; fileRef = 09FB9DAC273F833600D65871 /* FridaGadget.config */; }; 27 | /* End PBXBuildFile section */ 28 | 29 | /* Begin PBXContainerItemProxy section */ 30 | 09FB9D95273EE8AC00D65871 /* PBXContainerItemProxy */ = { 31 | isa = PBXContainerItemProxy; 32 | containerPortal = 09FB9D38273EE56700D65871 /* Project object */; 33 | proxyType = 1; 34 | remoteGlobalIDString = 09FB9D58273EE62100D65871; 35 | remoteInfo = "jevxpctrace-test-service"; 36 | }; 37 | 09FB9DC2273F9F4900D65871 /* PBXContainerItemProxy */ = { 38 | isa = PBXContainerItemProxy; 39 | containerPortal = 09FB9D38273EE56700D65871 /* Project object */; 40 | proxyType = 1; 41 | remoteGlobalIDString = 09FB9D58273EE62100D65871; 42 | remoteInfo = "jevxpctrace-test-service"; 43 | }; 44 | /* End PBXContainerItemProxy section */ 45 | 46 | /* Begin PBXCopyFilesBuildPhase section */ 47 | 0915ACA827408CBF00D24554 /* CopyFiles */ = { 48 | isa = PBXCopyFilesBuildPhase; 49 | buildActionMask = 2147483647; 50 | dstPath = /usr/share/man/man1/; 51 | dstSubfolderSpec = 0; 52 | files = ( 53 | ); 54 | runOnlyForDeploymentPostprocessing = 1; 55 | }; 56 | 09FB9D97273EE8AC00D65871 /* Embed XPC Services */ = { 57 | isa = PBXCopyFilesBuildPhase; 58 | buildActionMask = 2147483647; 59 | dstPath = "$(CONTENTS_FOLDER_PATH)/XPCServices"; 60 | dstSubfolderSpec = 16; 61 | files = ( 62 | 09FB9D94273EE8AC00D65871 /* jevxpctrace-test-service.xpc in Embed XPC Services */, 63 | ); 64 | name = "Embed XPC Services"; 65 | runOnlyForDeploymentPostprocessing = 0; 66 | }; 67 | 09FB9DA6273F824900D65871 /* Embed Libraries */ = { 68 | isa = PBXCopyFilesBuildPhase; 69 | buildActionMask = 2147483647; 70 | dstPath = ""; 71 | dstSubfolderSpec = 10; 72 | files = ( 73 | 09FB9DB1273F834000D65871 /* FridaGadget.dylib in Embed Libraries */, 74 | ); 75 | name = "Embed Libraries"; 76 | runOnlyForDeploymentPostprocessing = 0; 77 | }; 78 | 09FB9DB3273F834F00D65871 /* Embed Libraries */ = { 79 | isa = PBXCopyFilesBuildPhase; 80 | buildActionMask = 2147483647; 81 | dstPath = ""; 82 | dstSubfolderSpec = 10; 83 | files = ( 84 | 09FB9DB2273F834F00D65871 /* FridaGadget.dylib in Embed Libraries */, 85 | ); 86 | name = "Embed Libraries"; 87 | runOnlyForDeploymentPostprocessing = 0; 88 | }; 89 | /* End PBXCopyFilesBuildPhase section */ 90 | 91 | /* Begin PBXFileReference section */ 92 | 0915AC5F273FB68B00D24554 /* libresolv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libresolv.tbd; path = usr/lib/libresolv.tbd; sourceTree = SDKROOT; }; 93 | 0915ACA427408C9500D24554 /* libxcselectpp.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = libxcselectpp.cpp; sourceTree = ""; }; 94 | 0915ACA527408C9500D24554 /* libxcselectpp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = libxcselectpp.h; sourceTree = ""; }; 95 | 0915ACAA27408CBF00D24554 /* libxcselectpp-test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "libxcselectpp-test"; sourceTree = BUILT_PRODUCTS_DIR; }; 96 | 0915ACAC27408CBF00D24554 /* main.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = main.mm; sourceTree = ""; }; 97 | 0981EAEE2740A4AD005E663C /* libdlpp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = libdlpp.h; sourceTree = ""; }; 98 | 0981EAEF2740A4AD005E663C /* libdlpp.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = libdlpp.cpp; sourceTree = ""; }; 99 | 0981EAF02740AA67005E663C /* frida-gumpp.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "frida-gumpp.xcconfig"; sourceTree = ""; }; 100 | 0981EAF12740AA76005E663C /* gen-frida-gumpp-xcconfig.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = "gen-frida-gumpp-xcconfig.sh"; sourceTree = ""; }; 101 | 0981EAF22740B583005E663C /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; 102 | 0981EAF42740B5A0005E663C /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 103 | 09FB9D59273EE62100D65871 /* jevxpctrace-test-service.xpc */ = {isa = PBXFileReference; explicitFileType = "wrapper.xpc-service"; includeInIndex = 0; path = "jevxpctrace-test-service.xpc"; sourceTree = BUILT_PRODUCTS_DIR; }; 104 | 09FB9D5B273EE62100D65871 /* jevxpctrace_test_serviceProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = jevxpctrace_test_serviceProtocol.h; sourceTree = ""; }; 105 | 09FB9D5C273EE62100D65871 /* jevxpctrace_test_service.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = jevxpctrace_test_service.h; sourceTree = ""; }; 106 | 09FB9D5D273EE62100D65871 /* jevxpctrace_test_service.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = jevxpctrace_test_service.m; sourceTree = ""; }; 107 | 09FB9D5F273EE62100D65871 /* main.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = main.mm; sourceTree = ""; }; 108 | 09FB9D61273EE62100D65871 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 109 | 09FB9D80273EE86300D65871 /* jevxpctrace-test-client.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "jevxpctrace-test-client.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 110 | 09FB9D82273EE86300D65871 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 111 | 09FB9D83273EE86300D65871 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 112 | 09FB9D85273EE86300D65871 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 113 | 09FB9D86273EE86300D65871 /* ViewController.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = ViewController.mm; sourceTree = ""; }; 114 | 09FB9D88273EE86300D65871 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 115 | 09FB9D8B273EE86300D65871 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 116 | 09FB9D8D273EE86300D65871 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 117 | 09FB9D8F273EE86300D65871 /* jevxpctrace_test_client.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = jevxpctrace_test_client.entitlements; sourceTree = ""; }; 118 | 09FB9D98273F04A000D65871 /* CaptainHook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CaptainHook.h; sourceTree = ""; }; 119 | 09FB9D9D273F486900D65871 /* CoreSymbolication.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CoreSymbolication.h; sourceTree = ""; }; 120 | 09FB9DA7273F827C00D65871 /* libfrida-gum.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libfrida-gum.a"; path = "frida-gum-macos-arm64/libfrida-gum.a"; sourceTree = ""; }; 121 | 09FB9DAB273F833600D65871 /* FridaGadget.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = FridaGadget.dylib; sourceTree = ""; }; 122 | 09FB9DAC273F833600D65871 /* FridaGadget.config */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = FridaGadget.config; sourceTree = ""; }; 123 | /* End PBXFileReference section */ 124 | 125 | /* Begin PBXFrameworksBuildPhase section */ 126 | 0915ACA727408CBF00D24554 /* Frameworks */ = { 127 | isa = PBXFrameworksBuildPhase; 128 | buildActionMask = 2147483647; 129 | files = ( 130 | ); 131 | runOnlyForDeploymentPostprocessing = 0; 132 | }; 133 | 09FB9D56273EE62100D65871 /* Frameworks */ = { 134 | isa = PBXFrameworksBuildPhase; 135 | buildActionMask = 2147483647; 136 | files = ( 137 | 09FB9DAE273F833600D65871 /* FridaGadget.dylib in Frameworks */, 138 | ); 139 | runOnlyForDeploymentPostprocessing = 0; 140 | }; 141 | 09FB9D7D273EE86300D65871 /* Frameworks */ = { 142 | isa = PBXFrameworksBuildPhase; 143 | buildActionMask = 2147483647; 144 | files = ( 145 | 09FB9DAD273F833600D65871 /* FridaGadget.dylib in Frameworks */, 146 | 0981EAF32740B583005E663C /* AppKit.framework in Frameworks */, 147 | ); 148 | runOnlyForDeploymentPostprocessing = 0; 149 | }; 150 | /* End PBXFrameworksBuildPhase section */ 151 | 152 | /* Begin PBXGroup section */ 153 | 0915ACAB27408CBF00D24554 /* libxcselectpp-test */ = { 154 | isa = PBXGroup; 155 | children = ( 156 | 0915ACAC27408CBF00D24554 /* main.mm */, 157 | ); 158 | path = "libxcselectpp-test"; 159 | sourceTree = ""; 160 | }; 161 | 09FB9D37273EE56700D65871 = { 162 | isa = PBXGroup; 163 | children = ( 164 | 0981EAF12740AA76005E663C /* gen-frida-gumpp-xcconfig.sh */, 165 | 0981EAF02740AA67005E663C /* frida-gumpp.xcconfig */, 166 | 0981EAEF2740A4AD005E663C /* libdlpp.cpp */, 167 | 0981EAEE2740A4AD005E663C /* libdlpp.h */, 168 | 0915ACA427408C9500D24554 /* libxcselectpp.cpp */, 169 | 0915ACA527408C9500D24554 /* libxcselectpp.h */, 170 | 09FB9DAC273F833600D65871 /* FridaGadget.config */, 171 | 09FB9DAB273F833600D65871 /* FridaGadget.dylib */, 172 | 09FB9D9D273F486900D65871 /* CoreSymbolication.h */, 173 | 09FB9D98273F04A000D65871 /* CaptainHook.h */, 174 | 09FB9D81273EE86300D65871 /* jevxpctrace-test-client */, 175 | 09FB9D5A273EE62100D65871 /* jevxpctrace-test-service */, 176 | 0915ACAB27408CBF00D24554 /* libxcselectpp-test */, 177 | 09FB9D41273EE56700D65871 /* Products */, 178 | 09FB9D93273EE8AC00D65871 /* Frameworks */, 179 | ); 180 | sourceTree = ""; 181 | }; 182 | 09FB9D41273EE56700D65871 /* Products */ = { 183 | isa = PBXGroup; 184 | children = ( 185 | 09FB9D59273EE62100D65871 /* jevxpctrace-test-service.xpc */, 186 | 09FB9D80273EE86300D65871 /* jevxpctrace-test-client.app */, 187 | 0915ACAA27408CBF00D24554 /* libxcselectpp-test */, 188 | ); 189 | name = Products; 190 | sourceTree = ""; 191 | }; 192 | 09FB9D5A273EE62100D65871 /* jevxpctrace-test-service */ = { 193 | isa = PBXGroup; 194 | children = ( 195 | 09FB9D5B273EE62100D65871 /* jevxpctrace_test_serviceProtocol.h */, 196 | 09FB9D5C273EE62100D65871 /* jevxpctrace_test_service.h */, 197 | 09FB9D5D273EE62100D65871 /* jevxpctrace_test_service.m */, 198 | 09FB9D5F273EE62100D65871 /* main.mm */, 199 | 09FB9D61273EE62100D65871 /* Info.plist */, 200 | ); 201 | path = "jevxpctrace-test-service"; 202 | sourceTree = ""; 203 | }; 204 | 09FB9D81273EE86300D65871 /* jevxpctrace-test-client */ = { 205 | isa = PBXGroup; 206 | children = ( 207 | 09FB9D82273EE86300D65871 /* AppDelegate.h */, 208 | 09FB9D83273EE86300D65871 /* AppDelegate.m */, 209 | 09FB9D85273EE86300D65871 /* ViewController.h */, 210 | 09FB9D86273EE86300D65871 /* ViewController.mm */, 211 | 09FB9D88273EE86300D65871 /* Assets.xcassets */, 212 | 09FB9D8A273EE86300D65871 /* Main.storyboard */, 213 | 09FB9D8D273EE86300D65871 /* main.m */, 214 | 09FB9D8F273EE86300D65871 /* jevxpctrace_test_client.entitlements */, 215 | ); 216 | path = "jevxpctrace-test-client"; 217 | sourceTree = ""; 218 | }; 219 | 09FB9D93273EE8AC00D65871 /* Frameworks */ = { 220 | isa = PBXGroup; 221 | children = ( 222 | 0981EAF42740B5A0005E663C /* Foundation.framework */, 223 | 0981EAF22740B583005E663C /* AppKit.framework */, 224 | 0915AC5F273FB68B00D24554 /* libresolv.tbd */, 225 | 09FB9DA7273F827C00D65871 /* libfrida-gum.a */, 226 | ); 227 | name = Frameworks; 228 | sourceTree = ""; 229 | }; 230 | /* End PBXGroup section */ 231 | 232 | /* Begin PBXNativeTarget section */ 233 | 0915ACA927408CBF00D24554 /* libxcselectpp-test */ = { 234 | isa = PBXNativeTarget; 235 | buildConfigurationList = 0915ACAE27408CBF00D24554 /* Build configuration list for PBXNativeTarget "libxcselectpp-test" */; 236 | buildPhases = ( 237 | 0915ACA627408CBF00D24554 /* Sources */, 238 | 0915ACA727408CBF00D24554 /* Frameworks */, 239 | 0915ACA827408CBF00D24554 /* CopyFiles */, 240 | ); 241 | buildRules = ( 242 | ); 243 | dependencies = ( 244 | ); 245 | name = "libxcselectpp-test"; 246 | productName = "libxcselectpp-test"; 247 | productReference = 0915ACAA27408CBF00D24554 /* libxcselectpp-test */; 248 | productType = "com.apple.product-type.tool"; 249 | }; 250 | 09FB9D58273EE62100D65871 /* jevxpctrace-test-service */ = { 251 | isa = PBXNativeTarget; 252 | buildConfigurationList = 09FB9D62273EE62100D65871 /* Build configuration list for PBXNativeTarget "jevxpctrace-test-service" */; 253 | buildPhases = ( 254 | 09FB9D55273EE62100D65871 /* Sources */, 255 | 09FB9D56273EE62100D65871 /* Frameworks */, 256 | 09FB9D57273EE62100D65871 /* Resources */, 257 | 09FB9DB3273F834F00D65871 /* Embed Libraries */, 258 | ); 259 | buildRules = ( 260 | ); 261 | dependencies = ( 262 | ); 263 | name = "jevxpctrace-test-service"; 264 | productName = "jevxpctrace-test-service"; 265 | productReference = 09FB9D59273EE62100D65871 /* jevxpctrace-test-service.xpc */; 266 | productType = "com.apple.product-type.xpc-service"; 267 | }; 268 | 09FB9D7F273EE86300D65871 /* jevxpctrace-test-client */ = { 269 | isa = PBXNativeTarget; 270 | buildConfigurationList = 09FB9D92273EE86300D65871 /* Build configuration list for PBXNativeTarget "jevxpctrace-test-client" */; 271 | buildPhases = ( 272 | 09FB9D7C273EE86300D65871 /* Sources */, 273 | 09FB9D7D273EE86300D65871 /* Frameworks */, 274 | 09FB9D7E273EE86300D65871 /* Resources */, 275 | 09FB9D97273EE8AC00D65871 /* Embed XPC Services */, 276 | 09FB9DA6273F824900D65871 /* Embed Libraries */, 277 | ); 278 | buildRules = ( 279 | ); 280 | dependencies = ( 281 | 09FB9D96273EE8AC00D65871 /* PBXTargetDependency */, 282 | 09FB9DC3273F9F4900D65871 /* PBXTargetDependency */, 283 | ); 284 | name = "jevxpctrace-test-client"; 285 | productName = "jevxpctrace-test-client"; 286 | productReference = 09FB9D80273EE86300D65871 /* jevxpctrace-test-client.app */; 287 | productType = "com.apple.product-type.application"; 288 | }; 289 | /* End PBXNativeTarget section */ 290 | 291 | /* Begin PBXProject section */ 292 | 09FB9D38273EE56700D65871 /* Project object */ = { 293 | isa = PBXProject; 294 | attributes = { 295 | BuildIndependentTargetsInParallel = 1; 296 | LastUpgradeCheck = 1320; 297 | TargetAttributes = { 298 | 0915ACA927408CBF00D24554 = { 299 | CreatedOnToolsVersion = 13.2; 300 | }; 301 | 09FB9D58273EE62100D65871 = { 302 | CreatedOnToolsVersion = 13.2; 303 | }; 304 | 09FB9D7F273EE86300D65871 = { 305 | CreatedOnToolsVersion = 13.2; 306 | }; 307 | }; 308 | }; 309 | buildConfigurationList = 09FB9D3B273EE56700D65871 /* Build configuration list for PBXProject "jevxpctrace-test" */; 310 | compatibilityVersion = "Xcode 13.0"; 311 | developmentRegion = en; 312 | hasScannedForEncodings = 0; 313 | knownRegions = ( 314 | en, 315 | Base, 316 | ); 317 | mainGroup = 09FB9D37273EE56700D65871; 318 | productRefGroup = 09FB9D41273EE56700D65871 /* Products */; 319 | projectDirPath = ""; 320 | projectRoot = ""; 321 | targets = ( 322 | 09FB9D7F273EE86300D65871 /* jevxpctrace-test-client */, 323 | 09FB9D58273EE62100D65871 /* jevxpctrace-test-service */, 324 | 0915ACA927408CBF00D24554 /* libxcselectpp-test */, 325 | ); 326 | }; 327 | /* End PBXProject section */ 328 | 329 | /* Begin PBXResourcesBuildPhase section */ 330 | 09FB9D57273EE62100D65871 /* Resources */ = { 331 | isa = PBXResourcesBuildPhase; 332 | buildActionMask = 2147483647; 333 | files = ( 334 | 09FB9DBE273F98D200D65871 /* FridaGadget.config in Resources */, 335 | ); 336 | runOnlyForDeploymentPostprocessing = 0; 337 | }; 338 | 09FB9D7E273EE86300D65871 /* Resources */ = { 339 | isa = PBXResourcesBuildPhase; 340 | buildActionMask = 2147483647; 341 | files = ( 342 | 09FB9DBD273F98C200D65871 /* FridaGadget.config in Resources */, 343 | 09FB9D89273EE86300D65871 /* Assets.xcassets in Resources */, 344 | 09FB9D8C273EE86300D65871 /* Main.storyboard in Resources */, 345 | ); 346 | runOnlyForDeploymentPostprocessing = 0; 347 | }; 348 | /* End PBXResourcesBuildPhase section */ 349 | 350 | /* Begin PBXSourcesBuildPhase section */ 351 | 0915ACA627408CBF00D24554 /* Sources */ = { 352 | isa = PBXSourcesBuildPhase; 353 | buildActionMask = 2147483647; 354 | files = ( 355 | 0915ACB127408D1A00D24554 /* libxcselectpp.cpp in Sources */, 356 | 0915ACAD27408CBF00D24554 /* main.mm in Sources */, 357 | ); 358 | runOnlyForDeploymentPostprocessing = 0; 359 | }; 360 | 09FB9D55273EE62100D65871 /* Sources */ = { 361 | isa = PBXSourcesBuildPhase; 362 | buildActionMask = 2147483647; 363 | files = ( 364 | 09FB9D60273EE62100D65871 /* main.mm in Sources */, 365 | 09FB9D5E273EE62100D65871 /* jevxpctrace_test_service.m in Sources */, 366 | ); 367 | runOnlyForDeploymentPostprocessing = 0; 368 | }; 369 | 09FB9D7C273EE86300D65871 /* Sources */ = { 370 | isa = PBXSourcesBuildPhase; 371 | buildActionMask = 2147483647; 372 | files = ( 373 | 09FB9D87273EE86300D65871 /* ViewController.mm in Sources */, 374 | 09FB9D8E273EE86300D65871 /* main.m in Sources */, 375 | 09FB9D84273EE86300D65871 /* AppDelegate.m in Sources */, 376 | ); 377 | runOnlyForDeploymentPostprocessing = 0; 378 | }; 379 | /* End PBXSourcesBuildPhase section */ 380 | 381 | /* Begin PBXTargetDependency section */ 382 | 09FB9D96273EE8AC00D65871 /* PBXTargetDependency */ = { 383 | isa = PBXTargetDependency; 384 | target = 09FB9D58273EE62100D65871 /* jevxpctrace-test-service */; 385 | targetProxy = 09FB9D95273EE8AC00D65871 /* PBXContainerItemProxy */; 386 | }; 387 | 09FB9DC3273F9F4900D65871 /* PBXTargetDependency */ = { 388 | isa = PBXTargetDependency; 389 | target = 09FB9D58273EE62100D65871 /* jevxpctrace-test-service */; 390 | targetProxy = 09FB9DC2273F9F4900D65871 /* PBXContainerItemProxy */; 391 | }; 392 | /* End PBXTargetDependency section */ 393 | 394 | /* Begin PBXVariantGroup section */ 395 | 09FB9D8A273EE86300D65871 /* Main.storyboard */ = { 396 | isa = PBXVariantGroup; 397 | children = ( 398 | 09FB9D8B273EE86300D65871 /* Base */, 399 | ); 400 | name = Main.storyboard; 401 | sourceTree = ""; 402 | }; 403 | /* End PBXVariantGroup section */ 404 | 405 | /* Begin XCBuildConfiguration section */ 406 | 0915ACAF27408CBF00D24554 /* Debug */ = { 407 | isa = XCBuildConfiguration; 408 | buildSettings = { 409 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 410 | CODE_SIGN_STYLE = Automatic; 411 | DEVELOPMENT_TEAM = ZK96P738ZR; 412 | ENABLE_HARDENED_RUNTIME = YES; 413 | MACOSX_DEPLOYMENT_TARGET = 12.1; 414 | PRODUCT_NAME = "$(TARGET_NAME)"; 415 | }; 416 | name = Debug; 417 | }; 418 | 0915ACB027408CBF00D24554 /* Release */ = { 419 | isa = XCBuildConfiguration; 420 | buildSettings = { 421 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 422 | CODE_SIGN_STYLE = Automatic; 423 | DEVELOPMENT_TEAM = ZK96P738ZR; 424 | ENABLE_HARDENED_RUNTIME = YES; 425 | MACOSX_DEPLOYMENT_TARGET = 12.1; 426 | PRODUCT_NAME = "$(TARGET_NAME)"; 427 | }; 428 | name = Release; 429 | }; 430 | 09FB9D45273EE56700D65871 /* Debug */ = { 431 | isa = XCBuildConfiguration; 432 | baseConfigurationReference = 0981EAF02740AA67005E663C /* frida-gumpp.xcconfig */; 433 | buildSettings = { 434 | ALWAYS_SEARCH_USER_PATHS = NO; 435 | CLANG_ANALYZER_NONNULL = YES; 436 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 437 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; 438 | CLANG_CXX_LIBRARY = "libc++"; 439 | CLANG_ENABLE_MODULES = NO; 440 | CLANG_ENABLE_OBJC_ARC = YES; 441 | CLANG_ENABLE_OBJC_WEAK = YES; 442 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 443 | CLANG_WARN_BOOL_CONVERSION = YES; 444 | CLANG_WARN_COMMA = YES; 445 | CLANG_WARN_CONSTANT_CONVERSION = YES; 446 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 447 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 448 | CLANG_WARN_DOCUMENTATION_COMMENTS = NO; 449 | CLANG_WARN_EMPTY_BODY = YES; 450 | CLANG_WARN_ENUM_CONVERSION = YES; 451 | CLANG_WARN_INFINITE_RECURSION = YES; 452 | CLANG_WARN_INT_CONVERSION = YES; 453 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 454 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 455 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 456 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 457 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 458 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 459 | CLANG_WARN_STRICT_PROTOTYPES = YES; 460 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 461 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 462 | CLANG_WARN_UNREACHABLE_CODE = YES; 463 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 464 | COPY_PHASE_STRIP = NO; 465 | DEBUG_INFORMATION_FORMAT = dwarf; 466 | ENABLE_STRICT_OBJC_MSGSEND = YES; 467 | ENABLE_TESTABILITY = YES; 468 | GCC_C_LANGUAGE_STANDARD = gnu11; 469 | GCC_DYNAMIC_NO_PIC = NO; 470 | GCC_NO_COMMON_BLOCKS = YES; 471 | GCC_OPTIMIZATION_LEVEL = 0; 472 | GCC_PREPROCESSOR_DEFINITIONS = ( 473 | "DEBUG=1", 474 | "$(inherited)", 475 | ); 476 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 477 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 478 | GCC_WARN_UNDECLARED_SELECTOR = YES; 479 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 480 | GCC_WARN_UNUSED_FUNCTION = YES; 481 | GCC_WARN_UNUSED_VARIABLE = YES; 482 | HEADER_SEARCH_PATHS = ( 483 | "$(PROJECT_DIR)", 484 | "$(PROJECT_DIR)/frida-gum-macos-arm64", 485 | "$(PROJECT_DIR)/vendor/frida-gum-cpp", 486 | ); 487 | LIBRARY_SEARCH_PATHS = ( 488 | "$(PROJECT_DIR)", 489 | "$(PROJECT_DIR)/frida-gum-macos-arm64", 490 | ); 491 | MACOSX_DEPLOYMENT_TARGET = 10.15; 492 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 493 | MTL_FAST_MATH = YES; 494 | ONLY_ACTIVE_ARCH = YES; 495 | OTHER_LDFLAGS = ( 496 | "$(inherited)", 497 | "-lresolv", 498 | "-lxcselect", 499 | ); 500 | SDKROOT = macosx; 501 | }; 502 | name = Debug; 503 | }; 504 | 09FB9D46273EE56700D65871 /* Release */ = { 505 | isa = XCBuildConfiguration; 506 | baseConfigurationReference = 0981EAF02740AA67005E663C /* frida-gumpp.xcconfig */; 507 | buildSettings = { 508 | ALWAYS_SEARCH_USER_PATHS = NO; 509 | CLANG_ANALYZER_NONNULL = YES; 510 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 511 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; 512 | CLANG_CXX_LIBRARY = "libc++"; 513 | CLANG_ENABLE_MODULES = NO; 514 | CLANG_ENABLE_OBJC_ARC = YES; 515 | CLANG_ENABLE_OBJC_WEAK = YES; 516 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 517 | CLANG_WARN_BOOL_CONVERSION = YES; 518 | CLANG_WARN_COMMA = YES; 519 | CLANG_WARN_CONSTANT_CONVERSION = YES; 520 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 521 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 522 | CLANG_WARN_DOCUMENTATION_COMMENTS = NO; 523 | CLANG_WARN_EMPTY_BODY = YES; 524 | CLANG_WARN_ENUM_CONVERSION = YES; 525 | CLANG_WARN_INFINITE_RECURSION = YES; 526 | CLANG_WARN_INT_CONVERSION = YES; 527 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 528 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 529 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 530 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 531 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 532 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 533 | CLANG_WARN_STRICT_PROTOTYPES = YES; 534 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 535 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 536 | CLANG_WARN_UNREACHABLE_CODE = YES; 537 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 538 | COPY_PHASE_STRIP = NO; 539 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 540 | ENABLE_NS_ASSERTIONS = NO; 541 | ENABLE_STRICT_OBJC_MSGSEND = YES; 542 | GCC_C_LANGUAGE_STANDARD = gnu11; 543 | GCC_NO_COMMON_BLOCKS = YES; 544 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 545 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 546 | GCC_WARN_UNDECLARED_SELECTOR = YES; 547 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 548 | GCC_WARN_UNUSED_FUNCTION = YES; 549 | GCC_WARN_UNUSED_VARIABLE = YES; 550 | HEADER_SEARCH_PATHS = ( 551 | "$(PROJECT_DIR)", 552 | "$(PROJECT_DIR)/frida-gum-macos-arm64", 553 | "$(PROJECT_DIR)/vendor/frida-gum-cpp", 554 | ); 555 | LIBRARY_SEARCH_PATHS = ( 556 | "$(PROJECT_DIR)", 557 | "$(PROJECT_DIR)/frida-gum-macos-arm64", 558 | ); 559 | MACOSX_DEPLOYMENT_TARGET = 10.15; 560 | MTL_ENABLE_DEBUG_INFO = NO; 561 | MTL_FAST_MATH = YES; 562 | OTHER_LDFLAGS = ( 563 | "$(inherited)", 564 | "-lresolv", 565 | "-lxcselect", 566 | ); 567 | SDKROOT = macosx; 568 | }; 569 | name = Release; 570 | }; 571 | 09FB9D63273EE62100D65871 /* Debug */ = { 572 | isa = XCBuildConfiguration; 573 | buildSettings = { 574 | CODE_SIGN_STYLE = Automatic; 575 | COMBINE_HIDPI_IMAGES = YES; 576 | CURRENT_PROJECT_VERSION = 1; 577 | DEVELOPMENT_TEAM = ZK96P738ZR; 578 | ENABLE_HARDENED_RUNTIME = YES; 579 | GENERATE_INFOPLIST_FILE = YES; 580 | INFOPLIST_FILE = "jevxpctrace-test-service/Info.plist"; 581 | INFOPLIST_KEY_CFBundleDisplayName = "jevxpctrace-test-service"; 582 | INFOPLIST_KEY_NSHumanReadableCopyright = ""; 583 | LIBRARY_SEARCH_PATHS = ( 584 | "$(inherited)", 585 | "$(PROJECT_DIR)", 586 | "$(PROJECT_DIR)/frida-gum-macos-arm64", 587 | ); 588 | MACOSX_DEPLOYMENT_TARGET = 10.15; 589 | MARKETING_VERSION = 1.0; 590 | PRODUCT_BUNDLE_IDENTIFIER = "vin.je.jevxpctrace-test-service"; 591 | PRODUCT_NAME = "$(TARGET_NAME)"; 592 | SKIP_INSTALL = YES; 593 | SWIFT_EMIT_LOC_STRINGS = YES; 594 | }; 595 | name = Debug; 596 | }; 597 | 09FB9D64273EE62100D65871 /* Release */ = { 598 | isa = XCBuildConfiguration; 599 | buildSettings = { 600 | CODE_SIGN_STYLE = Automatic; 601 | COMBINE_HIDPI_IMAGES = YES; 602 | CURRENT_PROJECT_VERSION = 1; 603 | DEVELOPMENT_TEAM = ZK96P738ZR; 604 | ENABLE_HARDENED_RUNTIME = YES; 605 | GENERATE_INFOPLIST_FILE = YES; 606 | INFOPLIST_FILE = "jevxpctrace-test-service/Info.plist"; 607 | INFOPLIST_KEY_CFBundleDisplayName = "jevxpctrace-test-service"; 608 | INFOPLIST_KEY_NSHumanReadableCopyright = ""; 609 | LIBRARY_SEARCH_PATHS = ( 610 | "$(inherited)", 611 | "$(PROJECT_DIR)", 612 | "$(PROJECT_DIR)/frida-gum-macos-arm64", 613 | ); 614 | MACOSX_DEPLOYMENT_TARGET = 10.15; 615 | MARKETING_VERSION = 1.0; 616 | PRODUCT_BUNDLE_IDENTIFIER = "vin.je.jevxpctrace-test-service"; 617 | PRODUCT_NAME = "$(TARGET_NAME)"; 618 | SKIP_INSTALL = YES; 619 | SWIFT_EMIT_LOC_STRINGS = YES; 620 | }; 621 | name = Release; 622 | }; 623 | 09FB9D90273EE86300D65871 /* Debug */ = { 624 | isa = XCBuildConfiguration; 625 | buildSettings = { 626 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 627 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 628 | CODE_SIGN_ENTITLEMENTS = "jevxpctrace-test-client/jevxpctrace_test_client.entitlements"; 629 | CODE_SIGN_STYLE = Automatic; 630 | COMBINE_HIDPI_IMAGES = YES; 631 | CURRENT_PROJECT_VERSION = 1; 632 | DEVELOPMENT_TEAM = ZK96P738ZR; 633 | ENABLE_HARDENED_RUNTIME = YES; 634 | GENERATE_INFOPLIST_FILE = YES; 635 | INFOPLIST_KEY_NSHumanReadableCopyright = ""; 636 | INFOPLIST_KEY_NSMainStoryboardFile = Main; 637 | INFOPLIST_KEY_NSPrincipalClass = NSApplication; 638 | LD_RUNPATH_SEARCH_PATHS = ( 639 | "$(inherited)", 640 | "@executable_path/../Frameworks", 641 | ); 642 | MACOSX_DEPLOYMENT_TARGET = 10.15; 643 | MARKETING_VERSION = 1.0; 644 | OTHER_LDFLAGS = ( 645 | "$(inherited)", 646 | "-F", 647 | "$(PROJECT_DIR)/privroot/System/Library/PrivateFrameworks", 648 | "-framework", 649 | CoreSymbolication, 650 | ); 651 | PRODUCT_BUNDLE_IDENTIFIER = "vin.je.jevxpctrace-test-client"; 652 | PRODUCT_NAME = "$(TARGET_NAME)"; 653 | SWIFT_EMIT_LOC_STRINGS = YES; 654 | }; 655 | name = Debug; 656 | }; 657 | 09FB9D91273EE86300D65871 /* Release */ = { 658 | isa = XCBuildConfiguration; 659 | buildSettings = { 660 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 661 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 662 | CODE_SIGN_ENTITLEMENTS = "jevxpctrace-test-client/jevxpctrace_test_client.entitlements"; 663 | CODE_SIGN_STYLE = Automatic; 664 | COMBINE_HIDPI_IMAGES = YES; 665 | CURRENT_PROJECT_VERSION = 1; 666 | DEVELOPMENT_TEAM = ZK96P738ZR; 667 | ENABLE_HARDENED_RUNTIME = YES; 668 | GENERATE_INFOPLIST_FILE = YES; 669 | INFOPLIST_KEY_NSHumanReadableCopyright = ""; 670 | INFOPLIST_KEY_NSMainStoryboardFile = Main; 671 | INFOPLIST_KEY_NSPrincipalClass = NSApplication; 672 | LD_RUNPATH_SEARCH_PATHS = ( 673 | "$(inherited)", 674 | "@executable_path/../Frameworks", 675 | ); 676 | MACOSX_DEPLOYMENT_TARGET = 10.15; 677 | MARKETING_VERSION = 1.0; 678 | OTHER_LDFLAGS = ( 679 | "$(inherited)", 680 | "-F", 681 | "$(PROJECT_DIR)/privroot/System/Library/PrivateFrameworks", 682 | "-framework", 683 | CoreSymbolication, 684 | ); 685 | PRODUCT_BUNDLE_IDENTIFIER = "vin.je.jevxpctrace-test-client"; 686 | PRODUCT_NAME = "$(TARGET_NAME)"; 687 | SWIFT_EMIT_LOC_STRINGS = YES; 688 | }; 689 | name = Release; 690 | }; 691 | /* End XCBuildConfiguration section */ 692 | 693 | /* Begin XCConfigurationList section */ 694 | 0915ACAE27408CBF00D24554 /* Build configuration list for PBXNativeTarget "libxcselectpp-test" */ = { 695 | isa = XCConfigurationList; 696 | buildConfigurations = ( 697 | 0915ACAF27408CBF00D24554 /* Debug */, 698 | 0915ACB027408CBF00D24554 /* Release */, 699 | ); 700 | defaultConfigurationIsVisible = 0; 701 | defaultConfigurationName = Release; 702 | }; 703 | 09FB9D3B273EE56700D65871 /* Build configuration list for PBXProject "jevxpctrace-test" */ = { 704 | isa = XCConfigurationList; 705 | buildConfigurations = ( 706 | 09FB9D45273EE56700D65871 /* Debug */, 707 | 09FB9D46273EE56700D65871 /* Release */, 708 | ); 709 | defaultConfigurationIsVisible = 0; 710 | defaultConfigurationName = Release; 711 | }; 712 | 09FB9D62273EE62100D65871 /* Build configuration list for PBXNativeTarget "jevxpctrace-test-service" */ = { 713 | isa = XCConfigurationList; 714 | buildConfigurations = ( 715 | 09FB9D63273EE62100D65871 /* Debug */, 716 | 09FB9D64273EE62100D65871 /* Release */, 717 | ); 718 | defaultConfigurationIsVisible = 0; 719 | defaultConfigurationName = Release; 720 | }; 721 | 09FB9D92273EE86300D65871 /* Build configuration list for PBXNativeTarget "jevxpctrace-test-client" */ = { 722 | isa = XCConfigurationList; 723 | buildConfigurations = ( 724 | 09FB9D90273EE86300D65871 /* Debug */, 725 | 09FB9D91273EE86300D65871 /* Release */, 726 | ); 727 | defaultConfigurationIsVisible = 0; 728 | defaultConfigurationName = Release; 729 | }; 730 | /* End XCConfigurationList section */ 731 | }; 732 | rootObject = 09FB9D38273EE56700D65871 /* Project object */; 733 | } 734 | -------------------------------------------------------------------------------- /jevxpctrace-test/jevxpctrace-test.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /jevxpctrace-test/jevxpctrace-test.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /jevxpctrace-test/jevxpctrace-test.xcodeproj/xcshareddata/xcschemes/jevxpctrace-test-client.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 44 | 46 | 52 | 53 | 54 | 55 | 61 | 63 | 69 | 70 | 71 | 72 | 74 | 75 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /jevxpctrace-test/jevxpctrace-test.xcodeproj/xcshareddata/xcschemes/jevxpctrace-test-service.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 45 | 51 | 52 | 53 | 54 | 60 | 61 | 67 | 68 | 69 | 70 | 72 | 73 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /jevxpctrace-test/jevxpctrace-test.xcodeproj/xcshareddata/xcschemes/libxcselectpp-test.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 46 | 48 | 54 | 55 | 56 | 57 | 63 | 65 | 71 | 72 | 73 | 74 | 76 | 77 | 80 | 81 | 82 | -------------------------------------------------------------------------------- /jevxpctrace-test/libdlpp.cpp: -------------------------------------------------------------------------------- 1 | #import "libdlpp.h" 2 | -------------------------------------------------------------------------------- /jevxpctrace-test/libdlpp.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | -------------------------------------------------------------------------------- /jevxpctrace-test/libxcselectpp-test/main.mm: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // libxcselectpp-test 4 | // 5 | // Created by Jevin Sweval on 11/13/21. 6 | // 7 | 8 | #import 9 | #include 10 | 11 | int main(int argc, const char* argv[]) 12 | { 13 | @autoreleasepool { 14 | // insert code here... 15 | char* dev_dir_cstr = getDeveloperDirCString(); 16 | NSLog(@"dir cstring: %s", dev_dir_cstr); 17 | free(dev_dir_cstr); 18 | NSLog(@"dir std::string: %s", getDeveloperDirStdString().data()); 19 | } 20 | return 0; 21 | } 22 | -------------------------------------------------------------------------------- /jevxpctrace-test/libxcselectpp.cpp: -------------------------------------------------------------------------------- 1 | #include "libxcselectpp.h" 2 | 3 | #include 4 | using namespace std::string_literals; 5 | 6 | extern "C" bool xcselect_get_developer_dir_path(char* path, int path_sz, bool* unk1, bool* unk2, bool* unk3); 7 | 8 | char* getDeveloperDirCString(void) 9 | { 10 | char* path = (char*)malloc(PATH_MAX); 11 | if (!path) { 12 | return nullptr; 13 | } 14 | memset(path, 0, PATH_MAX); 15 | bool unk1, unk2, unk3; 16 | bool res = xcselect_get_developer_dir_path(path, PATH_MAX, &unk1, &unk2, &unk3); 17 | if (!res) { 18 | free(path); 19 | return nullptr; 20 | } 21 | return path; 22 | } 23 | 24 | std::string getDeveloperDirStdString(void) 25 | { 26 | char* path = getDeveloperDirCString(); 27 | if (!path) { 28 | return ""s; 29 | } 30 | return std::string { path }; 31 | } 32 | -------------------------------------------------------------------------------- /jevxpctrace-test/libxcselectpp.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #if __cplusplus 4 | extern "C" { 5 | #endif 6 | 7 | // dont forget to free 8 | char* getDeveloperDirCString(void); 9 | 10 | #if __cplusplus 11 | } // extern "C" 12 | 13 | #include 14 | std::string getDeveloperDirStdString(void); 15 | #endif 16 | -------------------------------------------------------------------------------- /jevxpctrace-test/privroot/System/Library/PrivateFrameworks/CoreSymbolication.framework/CoreSymbolication.tbd: -------------------------------------------------------------------------------- 1 | ./Versions/Current/CoreSymbolication.tbd -------------------------------------------------------------------------------- /jevxpctrace-test/privroot/System/Library/PrivateFrameworks/CoreSymbolication.framework/Versions/A/CoreSymbolication.tbd: -------------------------------------------------------------------------------- 1 | --- !tapi-tbd 2 | tbd-version: 4 3 | targets: [ x86_64-macos, x86_64-maccatalyst, arm64-macos, arm64-maccatalyst, 4 | arm64e-macos, arm64e-maccatalyst, arm64-ios-simulator ] 5 | uuids: 6 | - target: x86_64-macos 7 | value: 903F87E7-A1AC-3331-A47B-F8B36A14FFD8 8 | - target: x86_64-maccatalyst 9 | value: 903F87E7-A1AC-3331-A47B-F8B36A14FFD8 10 | - target: arm64-macos 11 | value: 00000000-0000-0000-0000-000000000000 12 | - target: arm64-maccatalyst 13 | value: 00000000-0000-0000-0000-000000000000 14 | - target: arm64e-macos 15 | value: FA012300-90E0-3AB8-8013-15F98F4E41A7 16 | - target: arm64e-maccatalyst 17 | value: FA012300-90E0-3AB8-8013-15F98F4E41A7 18 | - target: arm64-ios-simulator 19 | value: C7430378-6D83-31AD-8C11-F599D23F13D7 20 | install-name: '/System/Library/PrivateFrameworks/CoreSymbolication.framework/CoreSymbolication' 21 | current-version: 64550.88.1 22 | exports: 23 | - targets: [ x86_64-maccatalyst, x86_64-macos, arm64e-maccatalyst, arm64e-macos, 24 | arm64-macos, arm64-maccatalyst ] 25 | symbols: [ _CSAddressSetAdd, _CSAddressSetCreate, _CSArchitectureGetArchitectureForName, 26 | _CSArchitectureGetCurrent, _CSArchitectureGetFamily, _CSArchitectureGetFamilyName, 27 | _CSArchitectureIs32Bit, _CSArchitectureIs64Bit, _CSArchitectureIsArm, 28 | _CSArchitectureIsArm64, _CSArchitectureIsBigEndian, _CSArchitectureIsI386, 29 | _CSArchitectureIsLittleEndian, _CSArchitectureIsX86_64, _CSArchitectureMatchesArchitecture, 30 | _CSCopyDescription, _CSCopyDescriptionWithIndent, _CSCppAddMmapArchivesFromSymbolicatorToDirectory, 31 | _CSCppAddMmapArchivesToDirectory, _CSCppConvertLegacyPreVersion5ArchiveToModernCopy, 32 | _CSCppConvertLegacyPreVersion6ArchiveToModernCopy, _CSCppConvertModernArchiveToLegacyPreVersion6Copy, 33 | _CSCppConvertSymbolOwnerLegacyPreVersion5ArchiveToModernCopy, 34 | _CSCppConvertSymbolOwnerLegacyPreVersion6ArchiveToModernCopy, 35 | _CSCppConvertSymbolOwnerModernArchiveToLegacyPreVersion6Copy, 36 | _CSCppExtractMMapArchiveFromSymbolOwner, _CSCppExtractTRawSymbolOwnerDataFromSymbolOwner, 37 | _CSCppPopulateCachesWithMmapArchives, _CSCppPopulateCachesWithMmapArchivesAndGroupKey, 38 | _CSDemangleSymbolName, _CSEqual, _CSExceptionSafeThreadRunBlock, 39 | _CSGetDebugLoggingLevel, _CSGetForceSafeMachVMReads, _CSGetRetainCount, 40 | _CSIsNull, _CSMMapArchiveCacheCopyMMapArchive, _CSMMapArchiveCacheReleaseMMapArchive, 41 | _CSMMapArchiveCacheSetShouldStoreToDaemon, _CSPlatformForTask, 42 | _CSRangeContainsRange, _CSRangeIntersectsRange, _CSRegionCopyDescriptionWithIndent, 43 | _CSRegionForeachSourceInfo, _CSRegionForeachSymbol, _CSRegionGetName, 44 | _CSRegionGetRange, _CSRegionGetSymbolOwner, _CSRegionGetSymbolicator, 45 | _CSRelease, _CSRetain, _CSSectionGetSegment, _CSSegmentForeachSection, 46 | _CSSetDebugLoggingLevel, _CSSetForceSafeMachVMReads, _CSShow, 47 | _CSSourceInfoCopyDescriptionWithIndent, _CSSourceInfoGetColumn, 48 | _CSSourceInfoGetFilename, _CSSourceInfoGetLineNumber, _CSSourceInfoGetPath, 49 | _CSSourceInfoGetRange, _CSSourceInfoGetRegion, _CSSourceInfoGetSymbol, 50 | _CSSourceInfoGetSymbolOwner, _CSSourceInfoGetSymbolicator, 51 | _CSSymbolCopyDescriptionWithIndent, _CSSymbolForeachInlineRange, 52 | _CSSymbolForeachInlineRangeAtDepth, _CSSymbolForeachSourceInfo, 53 | _CSSymbolGetFlags, _CSSymbolGetInstructionData, _CSSymbolGetMangledName, 54 | _CSSymbolGetName, _CSSymbolGetRange, _CSSymbolGetRegion, _CSSymbolGetSection, 55 | _CSSymbolGetSegment, _CSSymbolGetSymbolOwner, _CSSymbolGetSymbolicator, 56 | _CSSymbolHasInlinedSourceInfo, _CSSymbolIsAlias, _CSSymbolIsArm, 57 | _CSSymbolIsDebugMap, _CSSymbolIsDwarf, _CSSymbolIsDyldStub, 58 | _CSSymbolIsExternal, _CSSymbolIsFunction, _CSSymbolIsFunctionStarts, 59 | _CSSymbolIsKnownLength, _CSSymbolIsMangledNameSourceDwarf, 60 | _CSSymbolIsMangledNameSourceDwarfMIPSLinkage, _CSSymbolIsMangledNameSourceNList, 61 | _CSSymbolIsMerged, _CSSymbolIsNList, _CSSymbolIsNameSourceDwarf, 62 | _CSSymbolIsNameSourceDwarfMIPSLinkage, _CSSymbolIsNameSourceNList, 63 | _CSSymbolIsObjcMethod, _CSSymbolIsOmitFramePointer, _CSSymbolIsPrivateExternal, 64 | _CSSymbolIsThumb, _CSSymbolIsUnnamed, _CSSymbolOwnerAddInContext, 65 | _CSSymbolOwnerAddInContextWithSOD, _CSSymbolOwnerCacheFlush, 66 | _CSSymbolOwnerCacheGetEntryCount, _CSSymbolOwnerCacheGetFlags, 67 | _CSSymbolOwnerCacheGetMemoryLimit, _CSSymbolOwnerCacheGetMemoryUsed, 68 | _CSSymbolOwnerCachePrintEntries, _CSSymbolOwnerCachePrintStats, 69 | _CSSymbolOwnerCacheResetStats, _CSSymbolOwnerCacheSetFlags, 70 | _CSSymbolOwnerCacheSetMemoryLimit, _CSSymbolOwnerCopyDescriptionWithIndent, 71 | _CSSymbolOwnerCreateSignature, _CSSymbolOwnerCreateSignatureWithSlide, 72 | _CSSymbolOwnerCreateSparseDataWithBlock, _CSSymbolOwnerCreateSparseSignature, 73 | _CSSymbolOwnerEditRelocations, _CSSymbolOwnerForEachStackFrameAtAddress, 74 | _CSSymbolOwnerForeachRegion, _CSSymbolOwnerForeachRegionWithName, 75 | _CSSymbolOwnerForeachSection, _CSSymbolOwnerForeachSegment, 76 | _CSSymbolOwnerForeachSourceInfo, _CSSymbolOwnerForeachSymbol, 77 | _CSSymbolOwnerForeachSymbolWithMangledName, _CSSymbolOwnerForeachSymbolWithName, 78 | _CSSymbolOwnerGetArchitecture, _CSSymbolOwnerGetBaseAddress, 79 | _CSSymbolOwnerGetCFUUIDBytes, _CSSymbolOwnerGetCompatibilityVersion, 80 | _CSSymbolOwnerGetCurrentVersion, _CSSymbolOwnerGetDataFlags, 81 | _CSSymbolOwnerGetDataTypeID, _CSSymbolOwnerGetDsymPath, _CSSymbolOwnerGetDsymVersion, 82 | _CSSymbolOwnerGetFlags, _CSSymbolOwnerGetLastModifiedTimestamp, 83 | _CSSymbolOwnerGetLoadTimestamp, _CSSymbolOwnerGetName, _CSSymbolOwnerGetPath, 84 | _CSSymbolOwnerGetPathForSymbolication, _CSSymbolOwnerGetRegionCount, 85 | _CSSymbolOwnerGetRegionWithAddress, _CSSymbolOwnerGetRegionWithName, 86 | _CSSymbolOwnerGetSectionWithAddress, _CSSymbolOwnerGetSectionWithName, 87 | _CSSymbolOwnerGetSegmentWithAddress, _CSSymbolOwnerGetSourceInfoCount, 88 | _CSSymbolOwnerGetSourceInfoWithAddress, _CSSymbolOwnerGetSymbolCount, 89 | _CSSymbolOwnerGetSymbolWithAddress, _CSSymbolOwnerGetSymbolWithMangledName, 90 | _CSSymbolOwnerGetSymbolWithName, _CSSymbolOwnerGetSymbolicator, 91 | _CSSymbolOwnerGetTransientUserData, _CSSymbolOwnerGetUUID, 92 | _CSSymbolOwnerGetUnloadTimestamp, _CSSymbolOwnerGetVersion, 93 | _CSSymbolOwnerHasFaultedData, _CSSymbolOwnerIsAOut, _CSSymbolOwnerIsBundle, 94 | _CSSymbolOwnerIsCommpage, _CSSymbolOwnerIsDsym, _CSSymbolOwnerIsDyld, 95 | _CSSymbolOwnerIsDyldSharedCache, _CSSymbolOwnerIsDylib, _CSSymbolOwnerIsDylibStub, 96 | _CSSymbolOwnerIsKextBundle, _CSSymbolOwnerIsMachO, _CSSymbolOwnerIsMutable, 97 | _CSSymbolOwnerIsObjCGCSupported, _CSSymbolOwnerIsObjCRetainReleaseSupported, 98 | _CSSymbolOwnerIsObject, _CSSymbolOwnerIsObsolete, _CSSymbolOwnerIsPIE, 99 | _CSSymbolOwnerIsProtected, _CSSymbolOwnerIsRestricted, _CSSymbolOwnerIsSlid, 100 | _CSSymbolOwnerIsStaticLibraryArchiveEntry, _CSSymbolOwnerMakeMutableInContext, 101 | _CSSymbolOwnerMakeMutableInContextWithSOD, _CSSymbolOwnerNeedsResymbolication, 102 | _CSSymbolOwnerRemoveInContext, _CSSymbolOwnerReplaceInContextWithSOD, 103 | _CSSymbolOwnerSegmentsMatch, _CSSymbolOwnerSetLoadTimestamp, 104 | _CSSymbolOwnerSetPath, _CSSymbolOwnerSetPathForSymbolication, 105 | _CSSymbolOwnerSetRelocationCount, _CSSymbolOwnerSetTransientUserData, 106 | _CSSymbolOwnerSetUnloadTimestamp, _CSSymbolOwnerUsesCPlusPlus, 107 | _CSSymbolReleaseMemory, _CSSymbolicatorAddSymbolOwner, _CSSymbolicatorApplyMutableContextBlock, 108 | _CSSymbolicatorCopyDescriptionWithIndent, _CSSymbolicatorCreateForTaskSharedCache, 109 | _CSSymbolicatorCreateForTaskSharedCacheWithFlagsAndNotification, 110 | _CSSymbolicatorCreateNonFaultingWithSignatureAndGroupKey, 111 | _CSSymbolicatorCreateSignature, _CSSymbolicatorCreateSignatureElidingSomeSymbolOwners, 112 | _CSSymbolicatorCreateSignatureElidingSomeSymbolOwnersWithPredicate, 113 | _CSSymbolicatorCreateWithBinaryImageList, _CSSymbolicatorCreateWithBinaryImageListCountPidFlagsAndNotification, 114 | _CSSymbolicatorCreateWithMachKernel, _CSSymbolicatorCreateWithMachKernelExcludingSearchPaths, 115 | _CSSymbolicatorCreateWithMachKernelFlagsAndNotification, _CSSymbolicatorCreateWithPathAndArchitecture, 116 | _CSSymbolicatorCreateWithPathArchitectureFlagsAndNotification, 117 | _CSSymbolicatorCreateWithPid, _CSSymbolicatorCreateWithPidFlagsAndNotification, 118 | _CSSymbolicatorCreateWithSignature, _CSSymbolicatorCreateWithSignatureAdditionalSymbolOwnersFlagsAndNotification, 119 | _CSSymbolicatorCreateWithSignatureAndAdditionalSymbolOwners, 120 | _CSSymbolicatorCreateWithSignatureAndNotification, _CSSymbolicatorCreateWithSignatureFlagsAndNotification, 121 | _CSSymbolicatorCreateWithSingleSymbolOwnerSignaturesAndFlags, 122 | _CSSymbolicatorCreateWithSymbolOwners, _CSSymbolicatorCreateWithSymbolicatorTextFaultingEnabled, 123 | _CSSymbolicatorCreateWithTask, _CSSymbolicatorCreateWithTaskFlagsAndNotification, 124 | _CSSymbolicatorCreateWithTaskPidFlagsAndNotification, _CSSymbolicatorCreateWithURLAndArchitecture, 125 | _CSSymbolicatorCreateWithURLArchitectureFlagsAndNotification, 126 | _CSSymbolicatorFixupFrames, _CSSymbolicatorForEachAotImage, 127 | _CSSymbolicatorForceFullSymbolExtraction, _CSSymbolicatorForeachRegionAtTime, 128 | _CSSymbolicatorForeachRegionWithNameAtTime, _CSSymbolicatorForeachSectionAtTime, 129 | _CSSymbolicatorForeachSegmentAtTime, _CSSymbolicatorForeachSharedCache, 130 | _CSSymbolicatorForeachSharedCacheSymbolicatorWithFlagsAndNotification, 131 | _CSSymbolicatorForeachSourceInfoAtTime, _CSSymbolicatorForeachSymbolAtTime, 132 | _CSSymbolicatorForeachSymbolOwnerAtTime, _CSSymbolicatorForeachSymbolOwnerWithCFUUIDBytesAtTime, 133 | _CSSymbolicatorForeachSymbolOwnerWithFlagsAtTime, _CSSymbolicatorForeachSymbolOwnerWithNameAtTime, 134 | _CSSymbolicatorForeachSymbolOwnerWithPathAtTime, _CSSymbolicatorForeachSymbolOwnerWithUUIDAtTime, 135 | _CSSymbolicatorForeachSymbolWithMangledNameAtTime, _CSSymbolicatorForeachSymbolWithNameAtTime, 136 | _CSSymbolicatorForeachSymbolicatorWithPath, _CSSymbolicatorForeachSymbolicatorWithPathFlagsAndNotification, 137 | _CSSymbolicatorForeachSymbolicatorWithURL, _CSSymbolicatorForeachSymbolicatorWithURLFlagsAndNotification, 138 | _CSSymbolicatorGetAOutSymbolOwner, _CSSymbolicatorGetAotSharedCacheAddress, 139 | _CSSymbolicatorGetAotSharedCacheUUID, _CSSymbolicatorGetArchitecture, 140 | _CSSymbolicatorGetFlags, _CSSymbolicatorGetFlagsForDebugMapOnlyData, 141 | _CSSymbolicatorGetFlagsForDsymOnlyData, _CSSymbolicatorGetFlagsForDwarfOnlyData, 142 | _CSSymbolicatorGetFlagsForFunctionStartsOnlyData, _CSSymbolicatorGetFlagsForNListOnlyData, 143 | _CSSymbolicatorGetFlagsForNoDataExceptFromTheCache, _CSSymbolicatorGetFlagsForNoSymbolOrSourceInfoData, 144 | _CSSymbolicatorGetGroupKey, _CSSymbolicatorGetPid, _CSSymbolicatorGetRegionCountAtTime, 145 | _CSSymbolicatorGetRegionWithAddressAtTime, _CSSymbolicatorGetRegionWithNameAtTime, 146 | _CSSymbolicatorGetSectionWithAddressAtTime, _CSSymbolicatorGetSegmentWithAddressAtTime, 147 | _CSSymbolicatorGetSharedCacheAddress, _CSSymbolicatorGetSharedCacheBaseAddress, 148 | _CSSymbolicatorGetSharedCacheUUID, _CSSymbolicatorGetSourceInfoCountAtTime, 149 | _CSSymbolicatorGetSourceInfoWithAddressAtTime, _CSSymbolicatorGetSymbolCountAtTime, 150 | _CSSymbolicatorGetSymbolOwner, _CSSymbolicatorGetSymbolOwnerCountAtTime, 151 | _CSSymbolicatorGetSymbolOwnerWithAddressAtTime, _CSSymbolicatorGetSymbolOwnerWithCFUUIDBytesAtTime, 152 | _CSSymbolicatorGetSymbolOwnerWithNameAtTime, _CSSymbolicatorGetSymbolOwnerWithUUIDAtTime, 153 | _CSSymbolicatorGetSymbolWithAddressAtTime, _CSSymbolicatorGetSymbolWithMangledNameAtTime, 154 | _CSSymbolicatorGetSymbolWithMangledNameFromSymbolOwnerWithNameAtTime, 155 | _CSSymbolicatorGetSymbolWithNameAtTime, _CSSymbolicatorGetSymbolWithNameFromSymbolOwnerWithNameAtTime, 156 | _CSSymbolicatorGetTask, _CSSymbolicatorGetTaskIsTranslated, 157 | _CSSymbolicatorIsKernelSymbolicator, _CSSymbolicatorIsTaskTranslated, 158 | _CSSymbolicatorIsTaskValid, _CSSymbolicatorResymbolicate, 159 | _CSSymbolicatorResymbolicateFail, _CSSymbolicatorResymbolicateFromDebugSymbolsInfo, 160 | _CSSymbolicatorSetForceGlobalSafeMachVMReads, _CSSymbolicatorSetGroupKey, 161 | _CSSymbolicatorSubscribeToTaskMainNotification, _CSSymbolicatorTranslateFromNativeAddress, 162 | _CSTaskHasStarted, _CSTaskIs64Bit, _CSTaskIsDriverKit, _CSTaskIsSimulator, 163 | _CSTaskIsTranslated, _CSTotalBytesMapped, _CSUUIDCFUUIDBytesToPath, 164 | _CSUUIDCFUUIDBytesToString, _CSUUIDStringToCFUUIDBytes, _clear_mapped_memory, 165 | _create_mapped_memory_cache_for_task, _create_mapped_memory_cache_for_task_with_label, 166 | _create_sampling_context_for_task, _create_sampling_context_for_task_pid_symbolicator, 167 | _demangle, _destroy_mapped_memory_cache, _destroy_sampling_context, 168 | _dispatch_queue_name_for_serial_number, _enumerate_mapped_memory_cache, 169 | _find_node, _get_remote_thread_dispatch_queue, _kCSRegionMachHeaderName, 170 | _kCSTypeDictionaryKeyCallBacks, _kCSTypeDictionaryValueCallBacks, 171 | _kCSTypeDictionaryWeakKeyCallBacks, _kCSTypeDictionaryWeakValueCallBacks, 172 | _kCSTypeSetCallBacks, _kCSTypeSetWeakCallBacks, _map_new_node, 173 | _mapped_memory_read, _mapped_memory_read_pointer, _next_node, 174 | _retain_mapped_memory_cache, _sample_remote_thread, _sample_remote_thread_with_dispatch_queue, 175 | _sampling_context_clear_cache, _set_mapped_memory_cache_region_info_block, 176 | _task_get_mapped_memory_cache, _task_get_mapped_memory_cache_with_label, 177 | _task_is_64bit, _task_is_translated, _task_lookup_mapped_memory_cache, 178 | _task_release_mapped_memory_cache, _thread_name_for_thread_port, 179 | _unmap_node, _vm_tag_is_malloc ] 180 | ... 181 | -------------------------------------------------------------------------------- /jevxpctrace-test/privroot/System/Library/PrivateFrameworks/CoreSymbolication.framework/Versions/Current: -------------------------------------------------------------------------------- 1 | A -------------------------------------------------------------------------------- /notes.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Idea: 5 | Frida xpc enumeration tweak 6 | 7 | Objective: find xpc endpoints accessible from App Store container 8 | 9 | Method: 10 | Use existing apps on JBen phone 11 | 12 | Inject into all apple processes a hook for processing incoming xpc call or maybe just the connection callback 13 | 14 | Check if the caller is our or any container.sb process 15 | 16 | If so set a flag for frida trace 17 | New flag to only print traces if xpc handler is in callstack (tls flag? Pthread set specific or context?) 18 | 19 | Exporting stack trace from calling process… 20 | 21 | Idea: hook to pause calling process while sending message 22 | 23 | In xpc handler hook in daemons, use coresymbolication on client, or call method exported by raw mach? to get call stack as collected by caller hook 24 | 25 | Push call stack to… the stack (!!!) in the client process on the hook to be retrieved by thread get state and vm read from service hook 26 | 27 | 28 | 29 | 30 | asm(".linker_option \"-lFoundation\""); 31 | 32 | asm(".linker_option \"-Wl,-U,_OBJC_CLASS_$_NSXPCDecoder\""); 33 | 34 | ^ weak class that gets fixed up by ctor to point to non-exported real class using coresymbolication 35 | 36 | 37 | clang-format -i $(fd '\.(h|m|mm|cpp|hpp)$' | ag -v 'frida-gum\.h$') 38 | 39 | 40 | 41 | (lldb) bt 42 | * thread #2, queue = 'com.apple.NSXPCConnection.user.anonymous.52675', stop reason = breakpoint 1.1 43 | * frame #0: 0x0000000100aebb50 jevxpctrace-test-service`-[jevxpctrace_test_service upperCaseString:withReply:](self=0x0000600002b30030, _cmd="upperCaseString:withReply:", aString=@"hello", reply=0x000000019996fdf0) at jevxpctrace_test_service.m:15:5 44 | frame #1: 0x00000001996e54a0 Foundation`__NSXPCCONNECTION_IS_CALLING_OUT_TO_EXPORTED_OBJECT_S2__ + 16 45 | frame #2: 0x00000001996e4448 Foundation`-[NSXPCConnection _decodeAndInvokeMessageWithEvent:flags:] + 1804 46 | frame #3: 0x0000000199698d10 Foundation`message_handler + 228 47 | frame #4: 0x000000019848c1d8 libxpc.dylib`_xpc_connection_call_event_handler + 176 48 | frame #5: 0x000000019848abf8 libxpc.dylib`_xpc_connection_mach_event + 1368 49 | frame #6: 0x0000000101061de4 libdispatch.dylib`_dispatch_client_callout4 + 20 50 | frame #7: 0x00000001010859f0 libdispatch.dylib`_dispatch_mach_msg_invoke + 532 51 | frame #8: 0x000000010106afa8 libdispatch.dylib`_dispatch_lane_serial_drain + 376 52 | frame #9: 0x000000010108718c libdispatch.dylib`_dispatch_mach_invoke + 508 53 | frame #10: 0x000000010106afa8 libdispatch.dylib`_dispatch_lane_serial_drain + 376 54 | frame #11: 0x000000010106c2b4 libdispatch.dylib`_dispatch_lane_invoke + 492 55 | frame #12: 0x000000010107bb40 libdispatch.dylib`_dispatch_workloop_worker_thread + 1240 56 | frame #13: 0x0000000100c08104 libsystem_pthread.dylib`_pthread_wqthread + 288 57 | Printing description of $x19: 58 | ), mach = false, privileged = false, bssend = 0x0, recv = 0x1703, send = 0x2803, pid = 52675, euid = 501, egid = 20, asid = 100005, channel: } { name = vin.je.jevxpctrace-test-service.peer.0x11f704080, listener = false, pid = 52675, euid = 501, egid = 20, asid = 100005 }> 59 | 60 | 61 | 62 | (lldb) bt 63 | * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 7.1 64 | * frame #0: 0x000000019848b85c libxpc.dylib`xpc_connection_send_message_with_reply 65 | frame #1: 0x0000000199693bdc Foundation`-[NSXPCConnection _sendInvocation:orArguments:count:methodSignature:selector:withProxy:] + 2480 66 | frame #2: 0x000000019969b090 Foundation`-[NSXPCConnection _sendSelector:withProxy:arg1:arg2:] + 144 67 | frame #3: 0x000000019969afa8 Foundation`_NSXPCDistantObjectSimpleMessageSend2 + 76 68 | frame #4: 0x0000000100f02e14 jevxpctrace-test-client`-[ViewController xpcTest](self=0x0000600002994480, _cmd="xpcTest") at ViewController.m:24:5 69 | frame #5: 0x0000000100f02f74 jevxpctrace-test-client`-[ViewController viewDidLoad](self=0x0000600002994480, _cmd="viewDidLoad") at ViewController.m:35:5 70 | frame #6: 0x000000019b3cb638 AppKit`-[NSViewController _sendViewDidLoad] + 100 71 | frame #7: 0x000000019b3b3198 AppKit`-[NSViewController _loadViewIfRequired] + 304 72 | frame #8: 0x000000019b3b3028 AppKit`-[NSViewController view] + 32 73 | frame #9: 0x000000019b590b58 AppKit`-[NSWindow _contentViewControllerChanged] + 128 74 | frame #10: 0x00000001996aafb0 Foundation`-[NSObject(NSKeyValueCoding) setValue:forKey:] + 360 75 | frame #11: 0x000000019b5cbe7c AppKit`-[NSWindow setValue:forKey:] + 168 76 | frame #12: 0x000000019b3f1ee8 AppKit`-[NSIBUserDefinedRuntimeAttributesConnector establishConnection] + 252 77 | frame #13: 0x000000019b3358a8 AppKit`-[NSIBObjectData nibInstantiateWithOwner:options:topLevelObjects:] + 944 78 | frame #14: 0x000000019b3b3ea4 AppKit`-[NSNib _instantiateNibWithExternalNameTable:options:] + 688 79 | frame #15: 0x000000019b3b3b18 AppKit`-[NSNib _instantiateWithOwner:options:topLevelObjects:] + 160 80 | frame #16: 0x000000019bb49ff0 AppKit`-[NSStoryboard _instantiateControllerWithIdentifier:creator:storyboardSegueTemplate:sender:] + 496 81 | frame #17: 0x000000019b31a970 AppKit`NSApplicationMain + 748 82 | frame #18: 0x0000000100f03020 jevxpctrace-test-client`main(argc=3, argv=0x000000016eefe210) at main.m:14:12 83 | frame #19: 0x00000001010c50f4 dyld`start + 520 84 | --------------------------------------------------------------------------------