Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(196)

Unified Diff: class-dump/src/CDClassDumpVisitor.m

Issue 7793008: Add the 3.3.3 sources for class-dump. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/
Patch Set: Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « class-dump/src/CDClassDumpVisitor.h ('k') | class-dump/src/CDClassFrameworkVisitor.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: class-dump/src/CDClassDumpVisitor.m
===================================================================
--- class-dump/src/CDClassDumpVisitor.m (revision 0)
+++ class-dump/src/CDClassDumpVisitor.m (revision 0)
@@ -0,0 +1,121 @@
+// -*- 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 "CDClassDumpVisitor.h"
+
+#include <mach-o/arch.h>
+
+#import "NSArray-Extensions.h"
+#import "CDClassDump.h"
+#import "CDObjectiveCProcessor.h"
+#import "CDMachOFile.h"
+#import "CDOCProtocol.h"
+#import "CDLCDylib.h"
+#import "CDLCEncryptionInfo.h"
+#import "CDLCRunPath.h"
+#import "CDLCSegment.h"
+#import "CDOCClass.h"
+#import "CDOCCategory.h"
+#import "CDSymbolReferences.h"
+#import "CDTypeController.h"
+
+@implementation CDClassDumpVisitor
+
+- (void)willBeginVisiting;
+{
+ [super willBeginVisiting];
+
+ [classDump appendHeaderToString:resultString];
+
+ if ([classDump containsObjectiveCData] || [classDump hasEncryptedFiles]) {
+ [[classDump typeController] appendStructuresToString:resultString symbolReferences:nil];
+ //[resultString appendString:@"// [structures go here]\n"];
+ } else {
+ [resultString appendString:@"This file does not contain any Objective-C runtime information.\n"];
+ }
+}
+
+- (void)didEndVisiting;
+{
+ [super didEndVisiting];
+
+ [self writeResultToStandardOutput];
+}
+
+- (void)visitObjectiveCProcessor:(CDObjectiveCProcessor *)aProcessor;
+{
+ CDMachOFile *machOFile;
+ const NXArchInfo *archInfo;
+
+ machOFile = [aProcessor machOFile];
+
+ [resultString appendString:@"#pragma mark -\n\n"];
+ [resultString appendString:@"/*\n"];
+ [resultString appendFormat:@" * File: %@\n", [machOFile filename]];
+ [resultString appendFormat:@" * UUID: %@\n", [machOFile uuidString]];
+
+ archInfo = NXGetArchInfoFromCpuType([machOFile cputypePlusArchBits], [machOFile cpusubtype]);
+ //archInfo = [machOFile archInfo];
+ if (archInfo == NULL)
+ [resultString appendFormat:@" * Arch: cputype: 0x%x, cpusubtype: 0x%x\n", [machOFile cputype], [machOFile cpusubtype]];
+ else
+ [resultString appendFormat:@" * Arch: %s (%s)\n", archInfo->description, archInfo->name];
+
+ if ([machOFile filetype] == MH_DYLIB) {
+ CDLCDylib *identifier;
+
+ identifier = [machOFile dylibIdentifier];
+ if (identifier != nil)
+ [resultString appendFormat:@" * Current version: %@, Compatibility version: %@\n",
+ [identifier formattedCurrentVersion], [identifier formattedCompatibilityVersion]];
+ }
+
+ [resultString appendFormat:@" *\n"];
+ [resultString appendFormat:@" * Objective-C Garbage Collection: %@\n", [aProcessor garbageCollectionStatus]];
+
+ for (CDLoadCommand *loadCommand in [machOFile loadCommands]) {
+ if ([loadCommand isKindOfClass:[CDLCRunPath class]]) {
+ CDLCRunPath *runPath = (CDLCRunPath *)loadCommand;
+
+ [resultString appendFormat:@" * Run path: %@\n", [runPath path]];
+ [resultString appendFormat:@" * = %@\n", [runPath resolvedRunPath]];
+ }
+ }
+
+ if ([machOFile isEncrypted]) {
+ [resultString appendString:@" * This file is encrypted:\n"];
+ for (CDLoadCommand *loadCommand in [machOFile loadCommands]) {
+ if ([loadCommand isKindOfClass:[CDLCEncryptionInfo class]]) {
+ CDLCEncryptionInfo *encryptionInfo = (CDLCEncryptionInfo *)loadCommand;
+
+ [resultString appendFormat:@" * cryptid: 0x%08x, cryptoff: 0x%08x, cryptsize: 0x%08x\n",
+ [encryptionInfo cryptid], [encryptionInfo cryptoff], [encryptionInfo cryptsize]];
+ }
+ }
+ } else if ([machOFile hasProtectedSegments]) {
+ if ([machOFile canDecryptAllSegments]) {
+ [resultString appendString:@" * This file has protected segments, decrypting.\n"];
+ } else {
+ NSUInteger index = 0;
+
+ [resultString appendString:@" * This file has protected segments that can't be decrypted:\n"];
+ for (CDLoadCommand *loadCommand in [machOFile loadCommands]) {
+ if ([loadCommand isKindOfClass:[CDLCSegment class]]) {
+ CDLCSegment *segment = (CDLCSegment *)loadCommand;
+
+ if ([segment canDecrypt] == NO) {
+ [resultString appendFormat:@" * Load command %u, segment encryption: %@\n",
+ index, CDSegmentEncryptionTypeName([segment encryptionType])];
+ }
+ }
+
+ index++;
+ }
+ }
+ }
+ [resultString appendString:@" */\n\n"];
+}
+
+@end
Property changes on: class-dump/src/CDClassDumpVisitor.m
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « class-dump/src/CDClassDumpVisitor.h ('k') | class-dump/src/CDClassFrameworkVisitor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698