ruby-macho 0.1.5 → 0.1.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 83843cf163d14c552c318a7d2d4787cee484ad88
4
- data.tar.gz: 73313735ad3e7647fdc5aab78e17e1065e8b1d44
3
+ metadata.gz: 804e6a31dedb8f86966c6e53366730c1ac87c2c2
4
+ data.tar.gz: 3a4f11ddc1807e34f158f22f446b561cbc5e9e07
5
5
  SHA512:
6
- metadata.gz: a2f3c64080a15318bcc1c78a341899b8d141c7368b017094bb20fe58ba824130a6ecc5a366a78759a6c251d61a5da62ccf6c35452f77317c58351d3497f316b2
7
- data.tar.gz: a86b0a030d58848ce69c5eb4eac8eb5268f6cefd03904ca69a3c18ad83e60b40db446360719c45879777c62142877036af891699cc0685976d7043b7f7598f3b
6
+ metadata.gz: 99c430de85ed1154fe02a70a0443535fdc5fd3e4a5b3a4d16e857dad770784977d0dfe73f6a75879408877b44ba86c73b4d1755ae782420f2364a1dd4acc3eb0
7
+ data.tar.gz: d4877cb5eea705217b930175167a7f2330ef255e51cf403d12f13f174b61ad6e91f57bfdf554f379a0a8cb7651093128456a639f77fad874b66fdcb6f788cde1
data/lib/macho/headers.rb CHANGED
@@ -234,30 +234,47 @@ module MachO
234
234
  }
235
235
 
236
236
  # Fat binary header structure
237
+ # @see MachO::FatArch
237
238
  class FatHeader < MachOStructure
239
+ # @return [Fixnum] the magic number of the header (and file)
238
240
  attr_reader :magic
239
- attr_reader :nfat_arch # number of FatArchs that follow
240
241
 
241
- @format = "VV"
242
- @sizeof = 8
242
+ # @return [Fixnum] the number of fat architecture structures following the header
243
+ attr_reader :nfat_arch
243
244
 
245
+ FORMAT = "VV"
246
+ SIZEOF = 8
247
+
248
+ # @api private
244
249
  def initialize(magic, nfat_arch)
245
250
  @magic = magic
246
251
  @nfat_arch = nfat_arch
247
252
  end
248
253
  end
249
254
 
250
- # Fat binary header architecture structure
255
+ # Fat binary header architecture structure. A Fat binary has one or more of
256
+ # these, representing one or more internal Mach-O blobs.
257
+ # @see MachO::FatHeader
251
258
  class FatArch < MachOStructure
259
+ # @return [Fixnum] the CPU type of the Mach-O
252
260
  attr_reader :cputype
261
+
262
+ # @return [Fixnum] the CPU subtype of the Mach-O
253
263
  attr_reader :cpusubtype
264
+
265
+ # @return [Fixnum] the file offset to the beginning of the Mach-O data
254
266
  attr_reader :offset
267
+
268
+ # @return [Fixnum] the size, in bytes, of the Mach-O data
255
269
  attr_reader :size
270
+
271
+ # @return [Fixnum] the alignment, as a power of 2
256
272
  attr_reader :align
257
273
 
258
- @format = "VVVVV"
259
- @sizeof = 20
274
+ FORMAT = "VVVVV"
275
+ SIZEOF = 20
260
276
 
277
+ # @api private
261
278
  def initialize(cputype, cpusubtype, offset, size, align)
262
279
  @cputype = cputype
263
280
  @cpusubtype = cpusubtype
@@ -269,17 +286,31 @@ module MachO
269
286
 
270
287
  # 32-bit Mach-O file header structure
271
288
  class MachHeader < MachOStructure
289
+ # @return [Fixnum] the magic number
272
290
  attr_reader :magic
291
+
292
+ # @return [Fixnum] the CPU type of the Mach-O
273
293
  attr_reader :cputype
294
+
295
+ # @return [Fixnum] the CPU subtype of the Mach-O
274
296
  attr_reader :cpusubtype
297
+
298
+ # @return [Fixnum] the file type of the Mach-O
275
299
  attr_reader :filetype
300
+
301
+ # @return [Fixnum] the number of load commands in the Mach-O
276
302
  attr_reader :ncmds
303
+
304
+ # @return [Fixnum] the size of all load commands, in bytes, in the Mach-O
277
305
  attr_reader :sizeofcmds
306
+
307
+ # @return [Fixnum] the header flags associated with the Mach-O
278
308
  attr_reader :flags
279
309
 
280
- @format = "VVVVVVV"
281
- @sizeof = 28
310
+ FORMAT = "VVVVVVV"
311
+ SIZEOF = 28
282
312
 
313
+ # @api private
283
314
  def initialize(magic, cputype, cpusubtype, filetype, ncmds, sizeofcmds,
284
315
  flags)
285
316
  @magic = magic
@@ -301,37 +332,18 @@ module MachO
301
332
  end
302
333
 
303
334
  # 64-bit Mach-O file header structure
304
- class MachHeader64 < MachOStructure
305
- attr_reader :magic
306
- attr_reader :cputype
307
- attr_reader :cpusubtype
308
- attr_reader :filetype
309
- attr_reader :ncmds
310
- attr_reader :sizeofcmds
311
- attr_reader :flags
335
+ class MachHeader64 < MachHeader
336
+ # @return [void]
312
337
  attr_reader :reserved
313
338
 
314
- @format = "VVVVVVVV"
315
- @sizeof = 32
339
+ FORMAT = "VVVVVVVV"
340
+ SIZEOF = 32
316
341
 
342
+ # @api private
317
343
  def initialize(magic, cputype, cpusubtype, filetype, ncmds, sizeofcmds,
318
344
  flags, reserved)
319
- @magic = magic
320
- @cputype = cputype
321
- @cpusubtype = cpusubtype
322
- @filetype = filetype
323
- @ncmds = ncmds
324
- @sizeofcmds = sizeofcmds
325
- @flags = flags
345
+ super(magic, cputype, cpusubtype, filetype, ncmds, sizeofcmds, flags)
326
346
  @reserved = reserved
327
347
  end
328
-
329
- # @example
330
- # puts "this mach-o has position-independent execution" if header.flag?(MH_PIE)
331
- # @param flag [Fixnum] a mach header flag constant
332
- # @return [Boolean] true if `flag` is present in the header's flag section
333
- def flag?(flag)
334
- flags & flag == flag
335
- end
336
348
  end
337
349
  end
@@ -296,8 +296,8 @@ module MachO
296
296
  # @return [Fixnum] the size of the load command, in bytes
297
297
  attr_reader :cmdsize
298
298
 
299
- @format = "VV"
300
- @sizeof = 8
299
+ FORMAT = "VV"
300
+ SIZEOF = 8
301
301
 
302
302
  # Creates a new LoadCommand given an offset and binary string
303
303
  # @param offset [Fixnum] the offset to initialize with
@@ -305,7 +305,7 @@ module MachO
305
305
  # @return [MachO::LoadCommand] the new load command
306
306
  # @api private
307
307
  def self.new_from_bin(raw_data, offset, bin)
308
- self.new(raw_data, offset, *bin.unpack(@format))
308
+ self.new(raw_data, offset, *bin.unpack(self::FORMAT))
309
309
  end
310
310
 
311
311
  # @param offset [Fixnum] the offset to initialize with
@@ -358,8 +358,8 @@ module MachO
358
358
  # @return [Array<Fixnum>] the UUID
359
359
  attr_reader :uuid
360
360
 
361
- @format = "VVa16"
362
- @sizeof = 24
361
+ FORMAT = "VVa16"
362
+ SIZEOF = 24
363
363
 
364
364
  # @api private
365
365
  def initialize(raw_data, offset, cmd, cmdsize, uuid)
@@ -409,8 +409,8 @@ module MachO
409
409
  # @return [Fixnum] any flags associated with the segment
410
410
  attr_reader :flags
411
411
 
412
- @format = "VVa16VVVVVVVV"
413
- @sizeof = 56
412
+ FORMAT = "VVa16VVVVVVVV"
413
+ SIZEOF = 56
414
414
 
415
415
  # @api private
416
416
  def initialize(raw_data, offset, cmd, cmdsize, segname, vmaddr, vmsize, fileoff,
@@ -463,8 +463,8 @@ module MachO
463
463
  # @return [Fixnum] any flags associated with the segment
464
464
  attr_reader :flags
465
465
 
466
- @format = "VVa16QQQQVVVV"
467
- @sizeof = 72
466
+ FORMAT = "VVa16QQQQVVVV"
467
+ SIZEOF = 72
468
468
 
469
469
  # @api private
470
470
  def initialize(raw_data, offset, cmd, cmdsize, segname, vmaddr, vmsize, fileoff,
@@ -503,8 +503,8 @@ module MachO
503
503
  # @return [Fixnum] the library's compatibility version number
504
504
  attr_reader :compatibility_version
505
505
 
506
- @format = "VVVVVV"
507
- @sizeof = 24
506
+ FORMAT = "VVVVVV"
507
+ SIZEOF = 24
508
508
 
509
509
  # @api private
510
510
  def initialize(raw_data, offset, cmd, cmdsize, name, timestamp, current_version,
@@ -524,8 +524,8 @@ module MachO
524
524
  # @return [MachO::LoadCommand::LCStr] the dynamic linker's path name as an LCStr
525
525
  attr_reader :name
526
526
 
527
- @format = "VVV"
528
- @sizeof = 12
527
+ FORMAT = "VVV"
528
+ SIZEOF = 12
529
529
 
530
530
  # @api private
531
531
  def initialize(raw_data, offset, cmd, cmdsize, name)
@@ -546,8 +546,8 @@ module MachO
546
546
  # @return [Fixnum] a bit vector of linked modules
547
547
  attr_reader :linked_modules
548
548
 
549
- @format = "VVVVV"
550
- @sizeof = 20
549
+ FORMAT = "VVVVV"
550
+ SIZEOF = 20
551
551
 
552
552
  # @api private
553
553
  def initialize(raw_data, offset, cmd, cmdsize, name, nmodules, linked_modules)
@@ -592,8 +592,8 @@ module MachO
592
592
  # @return [void]
593
593
  attr_reader :reserved6
594
594
 
595
- @format = "VVVVVVVVVV"
596
- @sizeof = 40
595
+ FORMAT = "VVVVVVVVVV"
596
+ SIZEOF = 40
597
597
 
598
598
  # @api private
599
599
  def initialize(raw_data, offset, cmd, cmdsize, init_address, init_module,
@@ -639,8 +639,8 @@ module MachO
639
639
  # @return [void]
640
640
  attr_reader :reserved6
641
641
 
642
- @format = "VVQQQQQQQQ"
643
- @sizeof = 72
642
+ FORMAT = "VVQQQQQQQQ"
643
+ SIZEOF = 72
644
644
 
645
645
  # @api private
646
646
  def initialize(raw_data, offset, cmd, cmdsize, init_address, init_module,
@@ -664,8 +664,8 @@ module MachO
664
664
  # @return [MachO::LoadCommand::LCStr] the umbrella framework name as an LCStr
665
665
  attr_reader :umbrella
666
666
 
667
- @format = "VVV"
668
- @sizeof = 12
667
+ FORMAT = "VVV"
668
+ SIZEOF = 12
669
669
 
670
670
  # @api private
671
671
  def initialize(raw_data, offset, cmd, cmdsize, umbrella)
@@ -680,8 +680,8 @@ module MachO
680
680
  # @return [MachO::LoadCommand::LCStr] the subumbrella framework name as an LCStr
681
681
  attr_reader :sub_umbrella
682
682
 
683
- @format = "VVV"
684
- @sizeof = 12
683
+ FORMAT = "VVV"
684
+ SIZEOF = 12
685
685
 
686
686
  # @api private
687
687
  def initialize(raw_data, offset, cmd, cmdsize, sub_umbrella)
@@ -696,8 +696,8 @@ module MachO
696
696
  # @return [MachO::LoadCommand::LCStr] the sublibrary name as an LCStr
697
697
  attr_reader :sub_library
698
698
 
699
- @format = "VVV"
700
- @sizeof = 12
699
+ FORMAT = "VVV"
700
+ SIZEOF = 12
701
701
 
702
702
  # @api private
703
703
  def initialize(raw_data, offset, cmd, cmdsize, sub_library)
@@ -712,8 +712,8 @@ module MachO
712
712
  # @return [MachO::LoadCommand::LCStr] the subclient name as an LCStr
713
713
  attr_reader :sub_client
714
714
 
715
- @format = "VVV"
716
- @sizeof = 12
715
+ FORMAT = "VVV"
716
+ SIZEOF = 12
717
717
 
718
718
  # @api private
719
719
  def initialize(raw_data, offset, cmd, cmdsize, sub_client)
@@ -737,8 +737,8 @@ module MachO
737
737
  # @return the string table size in bytes
738
738
  attr_reader :strsize
739
739
 
740
- @format = "VVVVVV"
741
- @sizeof = 24
740
+ FORMAT = "VVVVVV"
741
+ SIZEOF = 24
742
742
 
743
743
  # @api private
744
744
  def initialize(raw_data, offset, cmd, cmdsize, symoff, nsyms, stroff, strsize)
@@ -808,8 +808,8 @@ module MachO
808
808
  attr_reader :nlocrel
809
809
 
810
810
 
811
- @format = "VVVVVVVVVVVVVVVVVVVV"
812
- @sizeof = 80
811
+ FORMAT = "VVVVVVVVVVVVVVVVVVVV"
812
+ SIZEOF = 80
813
813
 
814
814
  # ugh
815
815
  # @api private
@@ -848,8 +848,8 @@ module MachO
848
848
  # @return [Fixnum] the number of hints in the hint table
849
849
  attr_reader :nhints
850
850
 
851
- @format = "VVVV"
852
- @sizeof = 16
851
+ FORMAT = "VVVV"
852
+ SIZEOF = 16
853
853
 
854
854
  # @api private
855
855
  def initialize(raw_data, offset, cmd, cmdsize, htoffset, nhints)
@@ -865,8 +865,8 @@ module MachO
865
865
  # @return [Fixnum] the checksum or 0
866
866
  attr_reader :cksum
867
867
 
868
- @format = "VVV"
869
- @sizeof = 12
868
+ FORMAT = "VVV"
869
+ SIZEOF = 12
870
870
 
871
871
  # @api private
872
872
  def initialize(raw_data, offset, cmd, cmdsize, cksum)
@@ -882,8 +882,8 @@ module MachO
882
882
  # @return [MachO::LoadCommand::LCStr] the path to add to the run path as an LCStr
883
883
  attr_reader :path
884
884
 
885
- @format = "VVV"
886
- @sizeof = 12
885
+ FORMAT = "VVV"
886
+ SIZEOF = 12
887
887
 
888
888
  # @api private
889
889
  def initialize(raw_data, offset, cmd, cmdsize, path)
@@ -902,8 +902,8 @@ module MachO
902
902
  # @return [Fixnum] size of the data in the __LINKEDIT segment
903
903
  attr_reader :datasize
904
904
 
905
- @format = "VVVV"
906
- @sizeof = 16
905
+ FORMAT = "VVVV"
906
+ SIZEOF = 16
907
907
 
908
908
  # @api private
909
909
  def initialize(raw_data, offset, cmd, cmdsize, dataoff, datasize)
@@ -925,8 +925,8 @@ module MachO
925
925
  # @return [Fixnum] the encryption system, or 0 if not encrypted yet
926
926
  attr_reader :cryptid
927
927
 
928
- @format = "VVVVV"
929
- @sizeof = 20
928
+ FORMAT = "VVVVV"
929
+ SIZEOF = 20
930
930
 
931
931
  # @api private
932
932
  def initialize(raw_data, offset, cmd, cmdsize, cryptoff, cryptsize, cryptid)
@@ -952,8 +952,8 @@ module MachO
952
952
  # @return [Fixnum] 64-bit padding value
953
953
  attr_reader :pad
954
954
 
955
- @format = "VVVVVV"
956
- @sizeof = 24
955
+ FORMAT = "VVVVVV"
956
+ SIZEOF = 24
957
957
 
958
958
  # @api private
959
959
  def initialize(raw_data, offset, cmd, cmdsize, cryptoff, cryptsize, cryptid)
@@ -974,8 +974,8 @@ module MachO
974
974
  # @return [Fixnum] the SDK version X.Y.Z packed as x16.y8.z8
975
975
  attr_reader :sdk
976
976
 
977
- @format = "VVVV"
978
- @sizeof = 16
977
+ FORMAT = "VVVV"
978
+ SIZEOF = 16
979
979
 
980
980
  # @api private
981
981
  def initialize(raw_data, offset, cmd, cmdsize, version, sdk)
@@ -1041,8 +1041,8 @@ module MachO
1041
1041
  # @return [Fixnum] the size of the export information
1042
1042
  attr_reader :export_size
1043
1043
 
1044
- @format = "VVVVVVVVVVVV"
1045
- @sizeof = 48
1044
+ FORMAT = "VVVVVVVVVVVV"
1045
+ SIZEOF = 48
1046
1046
 
1047
1047
  # @api private
1048
1048
  def initialize(raw_data, offset, cmd, cmdsize, rebase_off, rebase_size, bind_off,
@@ -1068,8 +1068,8 @@ module MachO
1068
1068
  # @return [Fixnum] the number of strings
1069
1069
  attr_reader :count
1070
1070
 
1071
- @format = "VVV"
1072
- @sizeof = 12
1071
+ FORMAT = "VVV"
1072
+ SIZEOF = 12
1073
1073
 
1074
1074
  # @api private
1075
1075
  def initialize(raw_data, offset, cmd, cmdsize, count)
@@ -1086,8 +1086,8 @@ module MachO
1086
1086
  # @return [Fixnum] if not 0, the initial stack size.
1087
1087
  attr_reader :stacksize
1088
1088
 
1089
- @format = "VVQQ"
1090
- @sizeof = 24
1089
+ FORMAT = "VVQQ"
1090
+ SIZEOF = 24
1091
1091
 
1092
1092
  # @api private
1093
1093
  def initialize(raw_data, offset, cmd, cmdsize, entryoff, stacksize)
@@ -1103,8 +1103,8 @@ module MachO
1103
1103
  # @return [Fixnum] the version packed as a24.b10.c10.d10.e10
1104
1104
  attr_reader :version
1105
1105
 
1106
- @format = "VVQ"
1107
- @sizeof = 16
1106
+ FORMAT = "VVQ"
1107
+ SIZEOF = 16
1108
1108
 
1109
1109
  # @api private
1110
1110
  def initialize(raw_data, offset, cmd, cmdsize, version)
@@ -91,8 +91,8 @@ module MachO
91
91
  # @return [void] reserved (for count or sizeof)
92
92
  attr_reader :reserved2
93
93
 
94
- @format = "a16a16VVVVVVVVV"
95
- @sizeof = 68
94
+ FORMAT = "a16a16VVVVVVVVV"
95
+ SIZEOF = 68
96
96
 
97
97
  # @api private
98
98
  def initialize(sectname, segname, addr, size, offset, align, reloff,
@@ -130,79 +130,19 @@ module MachO
130
130
  end
131
131
 
132
132
  # Represents a section of a segment for 64-bit architectures.
133
- class Section64 < MachOStructure
134
- # @return [String] the name of the section, including null pad bytes
135
- attr_reader :sectname
136
-
137
- # @return [String] the name of the segment's section, including null pad bytes
138
- attr_reader :segname
139
-
140
- # @return [Fixnum] the memory address of the section
141
- attr_reader :addr
142
-
143
- # @return [Fixnum] the size, in bytes, of the section
144
- attr_reader :size
145
-
146
- # @return [Fixnum] the file offset of the section
147
- attr_reader :offset
148
-
149
- # @return [Fixnum] the section alignment (power of 2) of the section
150
- attr_reader :align
151
-
152
- # @return [Fixnum] the file offset of the section's relocation entries
153
- attr_reader :reloff
154
-
155
- # @return [Fixnum] the number of relocation entries
156
- attr_reader :nreloc
157
-
158
- # @return [Fixnum] flags for type and addrributes of the section
159
- attr_reader :flags
160
-
161
- # @return [void] reserved (for offset or index)
162
- attr_reader :reserved1
163
-
164
- # @return [void] reserved (for count or sizeof)
165
- attr_reader :reserved2
166
-
133
+ class Section64 < Section
167
134
  # @return [void] reserved
168
135
  attr_reader :reserved3
169
136
 
170
- @format = "a16a16QQVVVVVVVV"
171
- @sizeof = 80
137
+ FORMAT = "a16a16QQVVVVVVVV"
138
+ SIZEOF = 80
172
139
 
173
140
  # @api private
174
141
  def initialize(sectname, segname, addr, size, offset, align, reloff,
175
142
  nreloc, flags, reserved1, reserved2, reserved3)
176
- @sectname = sectname
177
- @segname = segname
178
- @addr = addr
179
- @size = size
180
- @offset = offset
181
- @align = align
182
- @reloff = reloff
183
- @nreloc = nreloc
184
- @flags = flags
185
- @reserved1 = reserved1
186
- @reserved2 = reserved2
143
+ super(sectname, segname, addr, size, offset, align, reloff,
144
+ nreloc, flags, reserved1, reserved2)
187
145
  @reserved3 = reserved3
188
146
  end
189
-
190
- # @return [String] the section's name, with any trailing NULL characters removed
191
- def section_name
192
- @sectname.delete("\x00")
193
- end
194
-
195
- # @return [String] the parent segment's name, with any trailing NULL characters removed
196
- def segment_name
197
- @segname.delete("\x00")
198
- end
199
-
200
- # @example
201
- # puts "this section is regular" if sect.flag?(S_REGULAR)
202
- # @param flag [Fixnum] a section flag constant
203
- # @return [Boolean] true if `flag` is present in the sections's flag field
204
- def flag?(flag)
205
- flags & flag == flag
206
- end
207
147
  end
208
148
  end
@@ -2,19 +2,21 @@ module MachO
2
2
  # A general purpose pseudo-structure.
3
3
  # @abstract
4
4
  class MachOStructure
5
- # Subclasses should fill these in manually.
6
- @format = ""
7
- @sizeof = 0
5
+ # The format of the data structure, in String#unpack format.
6
+ FORMAT = ""
7
+
8
+ # The size of the data structure, in bytes.
9
+ SIZEOF = 0
8
10
 
9
11
  # @return [Fixnum] the size, in bytes, of the represented structure.
10
12
  def self.bytesize
11
- @sizeof
13
+ self::SIZEOF
12
14
  end
13
15
 
14
16
  # @return [MachO::MachOStructure] a new MachOStructure initialized with `bin`
15
17
  # @api private
16
18
  def self.new_from_bin(bin)
17
- self.new(*bin.unpack(@format))
19
+ self.new(*bin.unpack(self::FORMAT))
18
20
  end
19
21
  end
20
22
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-macho
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - William Woodruff