Index: class-dump/src/CDLCSegment64.m |
=================================================================== |
--- class-dump/src/CDLCSegment64.m (revision 0) |
+++ class-dump/src/CDLCSegment64.m (revision 0) |
@@ -0,0 +1,105 @@ |
+// -*- 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 "CDLCSegment64.h" |
+ |
+#import "CDSection64.h" |
+#import "CDDataCursor.h" |
+ |
+@implementation CDLCSegment64 |
+ |
+- (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 readInt64]; |
+ segmentCommand.vmsize = [cursor readInt64]; |
+ segmentCommand.fileoff = [cursor readInt64]; |
+ segmentCommand.filesize = [cursor readInt64]; |
+ 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++) { |
+ CDSection64 *section; |
+ |
+ section = [[CDSection64 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; |
+} |
+ |
+- (BOOL)containsAddress:(NSUInteger)address; |
+{ |
+ return (address >= segmentCommand.vmaddr) && (address < segmentCommand.vmaddr + segmentCommand.vmsize); |
+} |
+ |
+- (NSString *)extraDescription; |
+{ |
+ return [NSString stringWithFormat:@"addr: 0x%016lx", [self vmaddr]]; |
+} |
+ |
+@end |
Property changes on: class-dump/src/CDLCSegment64.m |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |