forked from Polidea/ios-class-guard
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CDLCDylib.m
89 lines (69 loc) · 2.23 KB
/
CDLCDylib.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
// -*- 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-2014 Steve Nygard.
#import "CDLCDylib.h"
#import "CDFatFile.h"
#import "CDMachOFile.h"
static NSString *CDDylibVersionString(uint32_t version)
{
return [NSString stringWithFormat:@"%d.%d.%d", version >> 16, (version >> 8) & 0xff, version & 0xff];
}
@implementation CDLCDylib
{
struct dylib_command _dylibCommand;
NSString *_path;
}
- (id)initWithDataCursor:(CDMachOFileDataCursor *)cursor;
{
if ((self = [super initWithDataCursor:cursor])) {
_dylibCommand.cmd = [cursor readInt32];
_dylibCommand.cmdsize = [cursor readInt32];
_dylibCommand.dylib.name.offset = [cursor readInt32];
_dylibCommand.dylib.timestamp = [cursor readInt32];
_dylibCommand.dylib.current_version = [cursor readInt32];
_dylibCommand.dylib.compatibility_version = [cursor readInt32];
NSUInteger length = _dylibCommand.cmdsize - sizeof(_dylibCommand);
//NSLog(@"expected length: %u", length);
_path = [cursor readStringOfLength:length encoding:NSASCIIStringEncoding];
//NSLog(@"path: %@", path);
}
return self;
}
#pragma mark -
- (uint32_t)cmd;
{
return _dylibCommand.cmd;
}
- (uint32_t)cmdsize;
{
return _dylibCommand.cmdsize;
}
- (uint32_t)timestamp;
{
return _dylibCommand.dylib.timestamp;
}
- (uint32_t)currentVersion;
{
return _dylibCommand.dylib.current_version;
}
- (uint32_t)compatibilityVersion;
{
return _dylibCommand.dylib.compatibility_version;
}
- (NSString *)formattedCurrentVersion;
{
return CDDylibVersionString(self.currentVersion);
}
- (NSString *)formattedCompatibilityVersion;
{
return CDDylibVersionString(self.compatibilityVersion);
}
#if 0
- (NSString *)extraDescription;
{
return [NSString stringWithFormat:@"%@ (compatibility version %@, current version %@, timestamp %d [%@])",
self.path, CDDylibVersionString(self.compatibilityVersion), CDDylibVersionString(self.currentVersion),
self.timestamp, [NSDate dateWithTimeIntervalSince1970:self.timestamp]];
}
#endif
@end