From fec3b61c3066857009de9bcdc08b3194ceae639e Mon Sep 17 00:00:00 2001 From: Alan Terranova Date: Fri, 5 Jan 2018 17:19:53 -0800 Subject: [PATCH] Use 32-bit Objective-C data pointer for 32-bit Mach-O files. Class-dump sometimes fails to process 32-bit files because the data cursor unconditionally aligns its Objective-C data pointer to a 64-bit boundary. --- Source/CDObjectiveC2Processor.m | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Source/CDObjectiveC2Processor.m b/Source/CDObjectiveC2Processor.m index a374eacd..f40a9e40 100644 --- a/Source/CDObjectiveC2Processor.m +++ b/Source/CDObjectiveC2Processor.m @@ -221,7 +221,11 @@ - (CDOCClass *)loadClassAtAddress:(uint64_t)address; uint64_t value = [cursor readPtr]; class.isSwiftClass = (value & 0x1) != 0; - objc2Class.data = value & ~7; + if ([self.machOFile uses64BitABI]) { + objc2Class.data = value & ~7; + } else { + objc2Class.data = value & ~3; + } objc2Class.reserved1 = [cursor readPtr]; objc2Class.reserved2 = [cursor readPtr];