@@ -400,17 +400,11 @@ - (NSArray *)loadMethodsAtAddress:(uint64_t)address;
400400}
401401
402402- (NSArray *)loadMethodsAtAddress : (uint64_t )address extendedMethodTypesCursor : (CDMachOFileDataCursor *)extendedMethodTypesCursor ;
403- {
404- return [self loadMethodsAtAddress: address extendedMethodTypesCursor: extendedMethodTypesCursor base: 0ULL ];
405- }
406-
407- - (NSArray *)loadMethodsAtAddress : (uint64_t )address extendedMethodTypesCursor : (CDMachOFileDataCursor *)extendedMethodTypesCursor base : (uint64_t )base ;
408403{
409404 NSMutableArray *methods = [NSMutableArray array ];
410405
411406 if (address != 0 ) {
412407 CDMachOFileDataCursor *cursor = [[CDMachOFileDataCursor alloc ] initWithFile: self .machOFile address: address];
413- NSLog (@" initial offset 0x%016lx address 0x%016llx " , [cursor offset ], address);
414408 NSParameterAssert ([cursor offset ] != 0 );
415409 // NSLog(@"method list data offset: %lu", [cursor offset]);
416410
@@ -419,60 +413,31 @@ - (NSArray *)loadMethodsAtAddress:(uint64_t)address extendedMethodTypesCursor:(C
419413 // See https://opensource.apple.com/source/objc4/objc4-787.1/runtime/objc-runtime-new.h
420414 uint32_t value = [cursor readInt32 ];
421415 listHeader.entsize = value & ~METHOD_LIST_T_ENTSIZE_MASK;
422- int smallMethodPointers = (value & METHOD_LIST_T_SMALL_METHOD_FLAG) != 0 ;
416+ bool small = (value & METHOD_LIST_T_SMALL_METHOD_FLAG) != 0 ;
423417 listHeader.count = [cursor readInt32 ];
424- NSParameterAssert (listHeader.entsize == 3 * (smallMethodPointers ? sizeof (int32_t ) : [self.machOFile ptrSize]));
425-
426- uint64_t min1 = 0xFFFFFFFFFFFFFFFFULL ;
427- uint64_t max1 = 0ULL ;
428- uint64_t min2 = 0xFFFFFFFFFFFFFFFFULL ;
429- uint64_t max2 = 0ULL ;
430- uint64_t min3 = 0xFFFFFFFFFFFFFFFFULL ;
431- uint64_t max3 = 0ULL ;
432- uint64_t val2;
418+ NSParameterAssert (listHeader.entsize == 3 * (small ? sizeof (int32_t ) : [self.machOFile ptrSize]));
433419
434420 for (uint32_t index = 0 ; index < listHeader.count ; index++) {
435421 struct cd_objc2_method objc2Method;
436- uint64_t offset = [cursor offset ];
437- if (smallMethodPointers) {
438- val2 = [cursor readSmallPtr: address]; if (val2 < min1) min1 = val2; if (val2 > max1) max1 = val2;
439- objc2Method.name = val2;
440- val2 = [cursor readSmallPtr: address]; if (val2 < min2) min2 = val2; if (val2 > max2) max2 = val2;
441- objc2Method.types = val2;
442- val2 = [cursor readSmallPtr: address]; if (val2 < min3) min3 = val2; if (val2 > max3) max3 = val2;
443- objc2Method.imp = val2;
444- // NSLog(@"values12f: 0x%016llx 0x%016llx 0x%016llx", objc2Method.name, objc2Method.types, objc2Method.imp);
445- // NSLog(@"values12: 0x%08x 0x%08x 0x%08x", value1, value2, value3);
446- } else {
447- objc2Method.name = [cursor readPtr ];
448- objc2Method.types = [cursor readPtr ];
449- objc2Method.imp = [cursor readPtr ];
450- }
451- NSString *name;
452- if (smallMethodPointers) {
453- name = [self .machOFile stringAtAddress2: objc2Method.name];
454- NSLog (@" small name: %@ " , name);
455- } else {
456- name = [self .machOFile stringAtAddress: objc2Method.name];
457- }
422+
423+ objc2Method.name = [cursor readPtr: small];
424+ objc2Method.types = [cursor readPtr: small];
425+ objc2Method.imp = [cursor readPtr: small];
426+ NSString *name = [self .machOFile stringAtAddress: objc2Method.name];
458427 NSString *types = [self .machOFile stringAtAddress: objc2Method.types];
459428
460429 if (extendedMethodTypesCursor) {
461430 uint64_t extendedMethodTypes = [extendedMethodTypesCursor readPtr ];
462431 types = [self .machOFile stringAtAddress: extendedMethodTypes];
463432 }
464433
465- // NSLog(@"%s% 3u: 0x %016llx 0x %016llx 0x %016llx 0x%016llx 0x%016llx ", (smallMethodPointers ? "small " : ""), index, objc2Method.name, objc2Method.types, objc2Method.imp, offset, address );
466- // NSLog(@"name: %@", name);
467- // NSLog(@"types: %@", types);
434+ // NSLog(@"%3u: %016llx %016llx %016llx", index, objc2Method.name, objc2Method.types, objc2Method.imp);
435+ // NSLog(@"name: %@", name);
436+ // NSLog(@"types: %@", types);
468437
469438 CDOCMethod *method = [[CDOCMethod alloc ] initWithName: name typeString: types address: objc2Method.imp];
470439 [methods addObject: method];
471440 }
472-
473- // if (smallMethodPointers) {
474- // NSLog(@"Small method range: 0x%016llx 0x%016llx 0x%016llx 0x%016llx 0x%016llx 0x%016llx", min1, max1, min2, max2, min3, max3);
475- // }
476441 }
477442
478443 return [methods reversedArray ];
@@ -485,7 +450,7 @@ - (NSArray *)loadIvarsAtAddress:(uint64_t)address;
485450 if (address != 0 ) {
486451 CDMachOFileDataCursor *cursor = [[CDMachOFileDataCursor alloc ] initWithFile: self .machOFile address: address];
487452 NSParameterAssert ([cursor offset ] != 0 );
488- // NSLog(@"ivar list data offset: %lu", [cursor offset]);
453+ // NSLog(@"ivar list data offset: %lu", [cursor offset]);
489454
490455 struct cd_objc2_list_header listHeader;
491456
0 commit comments