@@ -398,17 +398,19 @@ - (NSArray *)loadMethodsAtAddress:(uint64_t)address extendedMethodTypesCursor:(C
398398
399399 struct cd_objc2_list_header listHeader;
400400
401- // See getEntsize() from http://www.opensource.apple.com/source/objc4/objc4-532.2/runtime/objc-runtime-new.h
402- listHeader.entsize = [cursor readInt32 ] & ~(uint32_t )3 ;
403- listHeader.count = [cursor readInt32 ];
404- NSParameterAssert (listHeader.entsize == 3 * [self .machOFile ptrSize ]);
405-
401+ // See https://opensource.apple.com/source/objc4/objc4-787.1/runtime/objc-runtime-new.h
402+ uint32_t value = [cursor readInt32 ];
403+ listHeader.entsize = value & ~METHOD_LIST_T_ENTSIZE_MASK;
404+ bool small = (value & METHOD_LIST_T_SMALL_METHOD_FLAG) != 0 ;
405+ listHeader.count = [cursor readInt32 ];
406+ NSParameterAssert (listHeader.entsize == 3 * (small ? sizeof (int32_t ) : [self.machOFile ptrSize]));
407+
406408 for (uint32_t index = 0 ; index < listHeader.count ; index++) {
407409 struct cd_objc2_method objc2Method;
408-
409- objc2Method.name = [cursor readPtr ];
410- objc2Method.types = [cursor readPtr ];
411- objc2Method.imp = [cursor readPtr ];
410+
411+ objc2Method.name = [cursor readPtr: small ];
412+ objc2Method.types = [cursor readPtr: small ];
413+ objc2Method.imp = [cursor readPtr: small ];
412414 NSString *name = [self .machOFile stringAtAddress: objc2Method.name];
413415 NSString *types = [self .machOFile stringAtAddress: objc2Method.types];
414416
@@ -417,7 +419,7 @@ - (NSArray *)loadMethodsAtAddress:(uint64_t)address extendedMethodTypesCursor:(C
417419 types = [self .machOFile stringAtAddress: extendedMethodTypes];
418420 }
419421
420- // NSLog(@"%3u: %016lx %016lx %016lx ", index, objc2Method.name, objc2Method.types, objc2Method.imp);
422+ // NSLog(@"%3u: %016llx %016llx %016llx ", index, objc2Method.name, objc2Method.types, objc2Method.imp);
421423 // NSLog(@"name: %@", name);
422424 // NSLog(@"types: %@", types);
423425
0 commit comments