ruby-macho 0.2.2 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/LICENSE +2 -2
- data/README.md +4 -9
- data/lib/macho.rb +2 -2
- data/lib/macho/exceptions.rb +104 -73
- data/lib/macho/fat_file.rb +273 -228
- data/lib/macho/headers.rb +342 -265
- data/lib/macho/load_commands.rb +1009 -999
- data/lib/macho/macho_file.rb +509 -529
- data/lib/macho/open.rb +23 -14
- data/lib/macho/sections.rb +157 -157
- data/lib/macho/structure.rb +33 -17
- data/lib/macho/tools.rb +55 -55
- data/lib/macho/utils.rb +42 -30
- metadata +3 -4
data/lib/macho/headers.rb
CHANGED
@@ -1,275 +1,352 @@
|
|
1
1
|
module MachO
|
2
|
-
|
3
|
-
|
2
|
+
# big-endian fat magic
|
3
|
+
FAT_MAGIC = 0xcafebabe
|
4
4
|
|
5
|
-
|
6
|
-
|
5
|
+
# little-endian fat magic
|
6
|
+
# this is defined, but should never appear in ruby-macho code because
|
7
|
+
# fat headers are always big-endian and therefore always unpacked as such.
|
8
|
+
FAT_CIGAM = 0xbebafeca
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
+
# 32-bit big-endian magic
|
11
|
+
MH_MAGIC = 0xfeedface
|
10
12
|
|
11
|
-
|
12
|
-
|
13
|
+
# 32-bit little-endian magic
|
14
|
+
MH_CIGAM = 0xcefaedfe
|
13
15
|
|
14
|
-
|
15
|
-
|
16
|
+
# 64-bit big-endian magic
|
17
|
+
MH_MAGIC_64 = 0xfeedfacf
|
16
18
|
|
17
|
-
|
18
|
-
|
19
|
+
# 64-bit little-endian magic
|
20
|
+
MH_CIGAM_64 = 0xcffaedfe
|
19
21
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
}
|
22
|
+
# association of magic numbers to string representations
|
23
|
+
MH_MAGICS = {
|
24
|
+
FAT_MAGIC => "FAT_MAGIC",
|
25
|
+
MH_MAGIC => "MH_MAGIC",
|
26
|
+
MH_CIGAM => "MH_CIGAM",
|
27
|
+
MH_MAGIC_64 => "MH_MAGIC_64",
|
28
|
+
MH_CIGAM_64 => "MH_CIGAM_64"
|
29
|
+
}
|
29
30
|
|
30
|
-
|
31
|
-
|
31
|
+
# mask for CPUs with 64-bit architectures (when running a 64-bit ABI?)
|
32
|
+
CPU_ARCH_ABI64 = 0x01000000
|
32
33
|
|
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
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
34
|
+
# any CPU (unused?)
|
35
|
+
CPU_TYPE_ANY = -1
|
36
|
+
|
37
|
+
# i386 and later compatible CPUs
|
38
|
+
CPU_TYPE_I386 = 0x07
|
39
|
+
|
40
|
+
# x86_64 (AMD64) compatible CPUs
|
41
|
+
CPU_TYPE_X86_64 = (CPU_TYPE_I386 | CPU_ARCH_ABI64)
|
42
|
+
|
43
|
+
# 32-bit ARM compatible CPUs
|
44
|
+
CPU_TYPE_ARM = 0x0c
|
45
|
+
|
46
|
+
# 64-bit ARM compatible CPUs
|
47
|
+
CPU_TYPE_ARM64 = (CPU_TYPE_ARM | CPU_ARCH_ABI64)
|
48
|
+
|
49
|
+
# PowerPC compatible CPUs
|
50
|
+
CPU_TYPE_POWERPC = 0x12
|
51
|
+
|
52
|
+
# PowerPC64 compatible CPUs
|
53
|
+
CPU_TYPE_POWERPC64 = (CPU_TYPE_POWERPC | CPU_ARCH_ABI64)
|
54
|
+
|
55
|
+
# association of cpu types to symbol representations
|
56
|
+
CPU_TYPES = {
|
57
|
+
CPU_TYPE_ANY => :any,
|
58
|
+
CPU_TYPE_I386 => :i386,
|
59
|
+
CPU_TYPE_X86_64 => :x86_64,
|
60
|
+
CPU_TYPE_ARM => :arm,
|
61
|
+
CPU_TYPE_ARM64 => :arm64,
|
62
|
+
CPU_TYPE_POWERPC => :ppc,
|
63
|
+
CPU_TYPE_POWERPC64 => :ppc64,
|
64
|
+
}
|
65
|
+
|
66
|
+
# mask for CPU subtype capabilities
|
67
|
+
CPU_SUBTYPE_MASK = 0xff000000
|
68
|
+
|
69
|
+
# 64-bit libraries (undocumented!)
|
70
|
+
# @see http://llvm.org/docs/doxygen/html/Support_2MachO_8h_source.html
|
71
|
+
CPU_SUBTYPE_LIB64 = 0x80000000
|
72
|
+
|
73
|
+
# the lowest common sub-type for `CPU_TYPE_I386`
|
74
|
+
CPU_SUBTYPE_X86_ALL = 3
|
75
|
+
|
76
|
+
# the lowest common sub-type for `CPU_TYPE_X86_64`
|
77
|
+
CPU_SUBTYPE_X86_64_ALL = CPU_SUBTYPE_X86_ALL
|
78
|
+
|
79
|
+
# the Haskell sub-type for `CPU_TYPE_X86_64`
|
80
|
+
CPU_SUBTYPE_X86_64_H = 8
|
81
|
+
|
82
|
+
# the lowest common sub-type for `CPU_TYPE_ARM`
|
83
|
+
CPU_SUBTYPE_ARM_ALL = 0
|
84
|
+
|
85
|
+
# the v7 sub-type for `CPU_TYPE_ARM`
|
86
|
+
CPU_SUBTYPE_ARM_V7 = 9
|
87
|
+
|
88
|
+
# the v7s sub-type for `CPU_TYPE_ARM`
|
89
|
+
CPU_SUBTYPE_ARM_V7S = 11
|
90
|
+
|
91
|
+
# the v7k sub-type for `CPU_TYPE_ARM`
|
92
|
+
CPU_SUBTYPE_ARM_V7K = 12
|
93
|
+
|
94
|
+
# the v8 sub-type for `CPU_TYPE_ARM`
|
95
|
+
CPU_SUBTYPE_ARM_V8 = 13
|
96
|
+
|
97
|
+
# the lowest common sub-type for `CPU_TYPE_ARM64`
|
98
|
+
CPU_SUBTYPE_ARM64_ALL = 0
|
99
|
+
|
100
|
+
# the v8 sub-type for `CPU_TYPE_ARM64`
|
101
|
+
CPU_SUBTYPE_ARM64_V8 = 1
|
102
|
+
|
103
|
+
# the lowest common sub-type for `CPU_TYPE_POWERPC`
|
104
|
+
CPU_SUBTYPE_POWERPC_ALL = 0
|
105
|
+
|
106
|
+
# the 750 (G3) sub-type for `CPU_TYPE_POWERPC`
|
107
|
+
CPU_SUBTYPE_POWERPC_750 = 9
|
108
|
+
|
109
|
+
# the 7400 (G4) sub-type for `CPU_TYPE_POWERPC`
|
110
|
+
CPU_SUBTYPE_POWERPC_7400 = 10
|
111
|
+
|
112
|
+
# the 7450 (G4 "Voyager") sub-type for `CPU_TYPE_POWERPC`
|
113
|
+
CPU_SUBTYPE_POWERPC_7450 = 11
|
114
|
+
|
115
|
+
# the 970 (G5) sub-type for `CPU_TYPE_POWERPC`
|
116
|
+
CPU_SUBTYPE_POWERPC_970 = 100
|
117
|
+
|
118
|
+
# any CPU sub-type for CPU type `CPU_TYPE_POWERPC64`
|
119
|
+
CPU_SUBTYPE_POWERPC64_ALL = CPU_SUBTYPE_POWERPC_ALL
|
120
|
+
|
121
|
+
# association of CPU types/subtype pairs to symbol representations
|
122
|
+
CPU_SUBTYPES = {
|
123
|
+
CPU_TYPE_I386 => {
|
124
|
+
CPU_SUBTYPE_X86_ALL => :i386,
|
125
|
+
}.freeze,
|
126
|
+
CPU_TYPE_X86_64 => {
|
127
|
+
CPU_SUBTYPE_X86_64_ALL => :x86_64,
|
128
|
+
CPU_SUBTYPE_X86_64_H => :x86_64h,
|
129
|
+
}.freeze,
|
130
|
+
CPU_TYPE_ARM => {
|
131
|
+
CPU_SUBTYPE_ARM_ALL => :arm,
|
132
|
+
CPU_SUBTYPE_ARM_V7 => :armv7,
|
133
|
+
CPU_SUBTYPE_ARM_V7S => :armv7s,
|
134
|
+
CPU_SUBTYPE_ARM_V7K => :armv7k,
|
135
|
+
CPU_SUBTYPE_ARM_V8 => :armv8,
|
136
|
+
}.freeze,
|
137
|
+
CPU_TYPE_ARM64 => {
|
138
|
+
CPU_SUBTYPE_ARM64_ALL => :arm64,
|
139
|
+
CPU_SUBTYPE_ARM64_V8 => :armv8,
|
140
|
+
}.freeze,
|
141
|
+
CPU_TYPE_POWERPC => {
|
142
|
+
CPU_SUBTYPE_POWERPC_ALL => :ppc,
|
143
|
+
CPU_SUBTYPE_POWERPC_750 => :ppc750,
|
144
|
+
CPU_SUBTYPE_POWERPC_7400 => :ppc7400,
|
145
|
+
CPU_SUBTYPE_POWERPC_7450 => :ppc7450,
|
146
|
+
CPU_SUBTYPE_POWERPC_970 => :ppc970,
|
147
|
+
}.freeze,
|
148
|
+
CPU_TYPE_POWERPC64 => {
|
149
|
+
CPU_SUBTYPE_POWERPC64_ALL => :ppc64,
|
150
|
+
}.freeze,
|
151
|
+
}.freeze
|
152
|
+
|
153
|
+
# relocatable object file
|
154
|
+
MH_OBJECT = 0x1
|
155
|
+
|
156
|
+
# demand paged executable file
|
157
|
+
MH_EXECUTE = 0x2
|
158
|
+
|
159
|
+
# fixed VM shared library file
|
160
|
+
MH_FVMLIB = 0x3
|
161
|
+
|
162
|
+
# core dump file
|
163
|
+
MH_CORE = 0x4
|
164
|
+
|
165
|
+
# preloaded executable file
|
166
|
+
MH_PRELOAD = 0x5
|
167
|
+
|
168
|
+
# dynamically bound shared library
|
169
|
+
MH_DYLIB = 0x6
|
170
|
+
|
171
|
+
# dynamic link editor
|
172
|
+
MH_DYLINKER = 0x7
|
173
|
+
|
174
|
+
# dynamically bound bundle file
|
175
|
+
MH_BUNDLE = 0x8
|
176
|
+
|
177
|
+
# shared library stub for static linking only, no section contents
|
178
|
+
MH_DYLIB_STUB = 0x9
|
179
|
+
|
180
|
+
# companion file with only debug sections
|
181
|
+
MH_DSYM = 0xa
|
182
|
+
|
183
|
+
# x86_64 kexts
|
184
|
+
MH_KEXT_BUNDLE = 0xb
|
185
|
+
|
186
|
+
# association of filetypes to string representations
|
187
|
+
# @api private
|
188
|
+
MH_FILETYPES = {
|
189
|
+
MH_OBJECT => "MH_OBJECT",
|
190
|
+
MH_EXECUTE => "MH_EXECUTE",
|
191
|
+
MH_FVMLIB => "MH_FVMLIB",
|
192
|
+
MH_CORE => "MH_CORE",
|
193
|
+
MH_PRELOAD => "MH_PRELOAD",
|
194
|
+
MH_DYLIB => "MH_DYLIB",
|
195
|
+
MH_DYLINKER => "MH_DYLINKER",
|
196
|
+
MH_BUNDLE => "MH_BUNDLE",
|
197
|
+
MH_DYLIB_STUB => "MH_DYLIB_STUB",
|
198
|
+
MH_DSYM => "MH_DSYM",
|
199
|
+
MH_KEXT_BUNDLE => "MH_KEXT_BUNDLE"
|
200
|
+
}
|
201
|
+
|
202
|
+
# association of mach header flag symbols to values
|
203
|
+
# @api private
|
204
|
+
MH_FLAGS = {
|
205
|
+
:MH_NOUNDEFS => 0x1,
|
206
|
+
:MH_INCRLINK => 0x2,
|
207
|
+
:MH_DYLDLINK => 0x4,
|
208
|
+
:MH_BINDATLOAD => 0x8,
|
209
|
+
:MH_PREBOUND => 0x10,
|
210
|
+
:MH_SPLIT_SEGS => 0x20,
|
211
|
+
:MH_LAZY_INIT => 0x40,
|
212
|
+
:MH_TWOLEVEL => 0x80,
|
213
|
+
:MH_FORCE_FLAT => 0x100,
|
214
|
+
:MH_NOMULTIDEFS => 0x200,
|
215
|
+
:MH_NOPREFIXBINDING => 0x400,
|
216
|
+
:MH_PREBINDABLE => 0x800,
|
217
|
+
:MH_ALLMODSBOUND => 0x1000,
|
218
|
+
:MH_SUBSECTIONS_VIA_SYMBOLS => 0x2000,
|
219
|
+
:MH_CANONICAL => 0x4000,
|
220
|
+
:MH_WEAK_DEFINES => 0x8000,
|
221
|
+
:MH_BINDS_TO_WEAK => 0x10000,
|
222
|
+
:MH_ALLOW_STACK_EXECUTION => 0x20000,
|
223
|
+
:MH_ROOT_SAFE => 0x40000,
|
224
|
+
:MH_SETUID_SAFE => 0x80000,
|
225
|
+
:MH_NO_REEXPORTED_DYLIBS => 0x100000,
|
226
|
+
:MH_PIE => 0x200000,
|
227
|
+
:MH_DEAD_STRIPPABLE_DYLIB => 0x400000,
|
228
|
+
:MH_HAS_TLV_DESCRIPTORS => 0x800000,
|
229
|
+
:MH_NO_HEAP_EXECUTION => 0x1000000,
|
230
|
+
:MH_APP_EXTENSION_SAFE => 0x02000000
|
231
|
+
}
|
232
|
+
|
233
|
+
# Fat binary header structure
|
234
|
+
# @see MachO::FatArch
|
235
|
+
class FatHeader < MachOStructure
|
236
|
+
# @return [Fixnum] the magic number of the header (and file)
|
237
|
+
attr_reader :magic
|
238
|
+
|
239
|
+
# @return [Fixnum] the number of fat architecture structures following the header
|
240
|
+
attr_reader :nfat_arch
|
241
|
+
|
242
|
+
# always big-endian
|
243
|
+
FORMAT = "N2"
|
244
|
+
SIZEOF = 8
|
245
|
+
|
246
|
+
# @api private
|
247
|
+
def initialize(magic, nfat_arch)
|
248
|
+
@magic = magic
|
249
|
+
@nfat_arch = nfat_arch
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
253
|
+
# Fat binary header architecture structure. A Fat binary has one or more of
|
254
|
+
# these, representing one or more internal Mach-O blobs.
|
255
|
+
# @see MachO::FatHeader
|
256
|
+
class FatArch < MachOStructure
|
257
|
+
# @return [Fixnum] the CPU type of the Mach-O
|
258
|
+
attr_reader :cputype
|
259
|
+
|
260
|
+
# @return [Fixnum] the CPU subtype of the Mach-O
|
261
|
+
attr_reader :cpusubtype
|
262
|
+
|
263
|
+
# @return [Fixnum] the file offset to the beginning of the Mach-O data
|
264
|
+
attr_reader :offset
|
265
|
+
|
266
|
+
# @return [Fixnum] the size, in bytes, of the Mach-O data
|
267
|
+
attr_reader :size
|
268
|
+
|
269
|
+
# @return [Fixnum] the alignment, as a power of 2
|
270
|
+
attr_reader :align
|
271
|
+
|
272
|
+
# always big-endian
|
273
|
+
FORMAT = "N5"
|
274
|
+
SIZEOF = 20
|
275
|
+
|
276
|
+
# @api private
|
277
|
+
def initialize(cputype, cpusubtype, offset, size, align)
|
278
|
+
@cputype = cputype
|
279
|
+
@cpusubtype = cpusubtype
|
280
|
+
@offset = offset
|
281
|
+
@size = size
|
282
|
+
@align = align
|
283
|
+
end
|
284
|
+
end
|
285
|
+
|
286
|
+
# 32-bit Mach-O file header structure
|
287
|
+
class MachHeader < MachOStructure
|
288
|
+
# @return [Fixnum] the magic number
|
289
|
+
attr_reader :magic
|
290
|
+
|
291
|
+
# @return [Fixnum] the CPU type of the Mach-O
|
292
|
+
attr_reader :cputype
|
293
|
+
|
294
|
+
# @return [Fixnum] the CPU subtype of the Mach-O
|
295
|
+
attr_reader :cpusubtype
|
296
|
+
|
297
|
+
# @return [Fixnum] the file type of the Mach-O
|
298
|
+
attr_reader :filetype
|
299
|
+
|
300
|
+
# @return [Fixnum] the number of load commands in the Mach-O
|
301
|
+
attr_reader :ncmds
|
302
|
+
|
303
|
+
# @return [Fixnum] the size of all load commands, in bytes, in the Mach-O
|
304
|
+
attr_reader :sizeofcmds
|
305
|
+
|
306
|
+
# @return [Fixnum] the header flags associated with the Mach-O
|
307
|
+
attr_reader :flags
|
308
|
+
|
309
|
+
FORMAT = "L=7"
|
310
|
+
SIZEOF = 28
|
311
|
+
|
312
|
+
# @api private
|
313
|
+
def initialize(magic, cputype, cpusubtype, filetype, ncmds, sizeofcmds,
|
314
|
+
flags)
|
315
|
+
@magic = magic
|
316
|
+
@cputype = cputype
|
317
|
+
# For now we're not interested in additional capability bits also to be
|
318
|
+
# found in the `cpusubtype` field. We only care about the CPU sub-type.
|
319
|
+
@cpusubtype = cpusubtype & ~CPU_SUBTYPE_MASK
|
320
|
+
@filetype = filetype
|
321
|
+
@ncmds = ncmds
|
322
|
+
@sizeofcmds = sizeofcmds
|
323
|
+
@flags = flags
|
324
|
+
end
|
325
|
+
|
326
|
+
# @example
|
327
|
+
# puts "this mach-o has position-independent execution" if header.flag?(:MH_PIE)
|
328
|
+
# @param flag [Symbol] a mach header flag symbol
|
329
|
+
# @return [Boolean] true if `flag` is present in the header's flag section
|
330
|
+
def flag?(flag)
|
331
|
+
flag = MH_FLAGS[flag]
|
332
|
+
return false if flag.nil?
|
333
|
+
flags & flag == flag
|
334
|
+
end
|
335
|
+
end
|
336
|
+
|
337
|
+
# 64-bit Mach-O file header structure
|
338
|
+
class MachHeader64 < MachHeader
|
339
|
+
# @return [void]
|
340
|
+
attr_reader :reserved
|
341
|
+
|
342
|
+
FORMAT = "L=8"
|
343
|
+
SIZEOF = 32
|
344
|
+
|
345
|
+
# @api private
|
346
|
+
def initialize(magic, cputype, cpusubtype, filetype, ncmds, sizeofcmds,
|
347
|
+
flags, reserved)
|
348
|
+
super(magic, cputype, cpusubtype, filetype, ncmds, sizeofcmds, flags)
|
349
|
+
@reserved = reserved
|
350
|
+
end
|
351
|
+
end
|
275
352
|
end
|