Index: class-dump/src/CDLCSegment32.m |
=================================================================== |
--- class-dump/src/CDLCSegment32.m (revision 0) |
+++ class-dump/src/CDLCSegment32.m (revision 0) |
@@ -0,0 +1,131 @@ |
+// -*- mode: ObjC -*- |
+ |
+// This file is part of class-dump, a utility for examining the Objective-C segment of Mach-O files. |
+// Copyright (C) 1997-1998, 2000-2001, 2004-2010 Steve Nygard. |
+ |
+#import "CDLCSegment32.h" |
+ |
+#import "CDDataCursor.h" |
+#import "CDSection32.h" |
+ |
+@implementation CDLCSegment32 |
+ |
+- (id)initWithDataCursor:(CDDataCursor *)cursor machOFile:(CDMachOFile *)aMachOFile; |
+{ |
+ if ([super initWithDataCursor:cursor machOFile:aMachOFile] == nil) |
+ return nil; |
+ |
+ segmentCommand.cmd = [cursor readInt32]; |
+ segmentCommand.cmdsize = [cursor readInt32]; |
+ |
+ [cursor readBytesOfLength:16 intoBuffer:segmentCommand.segname]; |
+ segmentCommand.vmaddr = [cursor readInt32]; |
+ segmentCommand.vmsize = [cursor readInt32]; |
+ segmentCommand.fileoff = [cursor readInt32]; |
+ segmentCommand.filesize = [cursor readInt32]; |
+ segmentCommand.maxprot = [cursor readInt32]; |
+ segmentCommand.initprot = [cursor readInt32]; |
+ segmentCommand.nsects = [cursor readInt32]; |
+ segmentCommand.flags = [cursor readInt32]; |
+ |
+ { |
+ char buf[17]; |
+ NSString *str; |
+ |
+ memcpy(buf, segmentCommand.segname, 16); |
+ buf[16] = 0; |
+ str = [[NSString alloc] initWithBytes:buf length:strlen(buf) encoding:NSASCIIStringEncoding]; |
+ if ([str length] >= 16) { |
+ NSLog(@"Notice: segment '%@' has length >= 16, which means it's not always null terminated.", str); |
+ } |
+ [self setName:str]; |
+ [str release]; |
+ } |
+ |
+ { |
+ unsigned int index; |
+ |
+ for (index = 0; index < segmentCommand.nsects; index++) { |
+ CDSection32 *section; |
+ |
+ section = [[CDSection32 alloc] initWithDataCursor:cursor segment:self]; |
+ [sections addObject:section]; |
+ [section release]; |
+ } |
+ } |
+ |
+ return self; |
+} |
+ |
+- (uint32_t)cmd; |
+{ |
+ return segmentCommand.cmd; |
+} |
+ |
+- (uint32_t)cmdsize; |
+{ |
+ return segmentCommand.cmdsize; |
+} |
+ |
+- (NSUInteger)vmaddr; |
+{ |
+ return segmentCommand.vmaddr; |
+} |
+ |
+- (NSUInteger)fileoff; |
+{ |
+ return segmentCommand.fileoff; |
+} |
+ |
+- (NSUInteger)filesize; |
+{ |
+ return segmentCommand.filesize; |
+} |
+ |
+- (vm_prot_t)initprot; |
+{ |
+ return segmentCommand.initprot; |
+} |
+ |
+- (uint32_t)flags; |
+{ |
+ return segmentCommand.flags; |
+} |
+ |
+- (NSString *)extraDescription; |
+{ |
+#if 1 |
+ return [NSString stringWithFormat:@"vmaddr: 0x%08x - 0x%08x [0x%08x], offset: %d, flags: 0x%x (%@), nsects: %d, sections: %@", |
+ segmentCommand.vmaddr, segmentCommand.vmaddr + segmentCommand.vmsize - 1, segmentCommand.vmsize, segmentCommand.fileoff, |
+ [self flags], [self flagDescription], segmentCommand.nsects, sections]; |
+#endif |
+ return nil; |
+} |
+ |
+- (BOOL)containsAddress:(NSUInteger)address; |
+{ |
+ return (address >= segmentCommand.vmaddr) && (address < segmentCommand.vmaddr + segmentCommand.vmsize); |
+} |
+ |
+- (void)appendToString:(NSMutableString *)resultString verbose:(BOOL)isVerbose; |
+{ |
+ [super appendToString:resultString verbose:isVerbose]; |
+#if 0 |
+ |
+ [resultString appendFormat:@" segname %@\n", [self name]]; |
+ [resultString appendFormat:@" vmaddr 0x%08x\n", segmentCommand.vmaddr]; |
+ [resultString appendFormat:@" vmsize 0x%08x\n", segmentCommand.vmsize]; |
+ [resultString appendFormat:@" fileoff %d\n", segmentCommand.fileoff]; |
+ [resultString appendFormat:@" filesize %d\n", segmentCommand.filesize]; |
+ [resultString appendFormat:@" maxprot 0x%08x\n", segmentCommand.maxprot]; |
+ [resultString appendFormat:@" initprot 0x%08x\n", segmentCommand.initprot]; |
+ [resultString appendFormat:@" nsects %d\n", segmentCommand.nsects]; |
+ |
+ if (isVerbose) |
+ [resultString appendFormat:@" flags %@\n", [self flagDescription]]; |
+ else |
+ [resultString appendFormat:@" flags 0x%x\n", segmentCommand.flags]; |
+#endif |
+} |
+ |
+@end |
Property changes on: class-dump/src/CDLCSegment32.m |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |