ruby-macho 0.1.8 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 16240f8ca67e156531a460441d739de7d63fbe9e
4
- data.tar.gz: 9a4baa19c7d468ea968a1d0eac8f12941053fcf4
3
+ metadata.gz: 939f8d565fc3d98bd633414e797b2f8cd70c0df6
4
+ data.tar.gz: 3ab244e120eba39d1f84a8b495de6c221f4fc8f0
5
5
  SHA512:
6
- metadata.gz: cbf7d99140e66376e18dfae8efc2e0b1d9d921e4f5ba3813a6cf09f478ec5a6de2a777b6b4b582afcf8427a005d3807c6b72f13862b4d7c0d30c476a8711d547
7
- data.tar.gz: f2a8064e9246c8b1d5f671edc830a902023f754458a2cc6a4abed62dde247e698d1b955eff5c9e91f8951e66fe6d095fd6677f8a9a7e45f0c34acb435f2b2ed5
6
+ metadata.gz: bb2d31798f5d4b6fefd00a2c3e5c562595331015f9a44b9d3b5bcce84b43db3c473236222412bc1b26e358161df2451e15c8ea292c1c0fc433292afc9871772c
7
+ data.tar.gz: 39bd050a693d85cd48e7ce3594d5cfd199732e171df7026474af03723bdd3c1a58108df08c078333fc0304ed84691c14a76bb15b6a168f8411f993e4e7b0b5d2
data/lib/macho.rb CHANGED
@@ -12,5 +12,5 @@ require "#{File.dirname(__FILE__)}/macho/tools"
12
12
  # The primary namespace for ruby-macho.
13
13
  module MachO
14
14
  # release version
15
- VERSION = "0.1.8".freeze
15
+ VERSION = "0.1.9".freeze
16
16
  end
data/lib/macho/headers.rb CHANGED
@@ -111,6 +111,7 @@ module MachO
111
111
  MH_KEXT_BUNDLE = 0xb
112
112
 
113
113
  # association of filetypes to string representations
114
+ # @api private
114
115
  MH_FILETYPES = {
115
116
  MH_OBJECT => "MH_OBJECT",
116
117
  MH_EXECUTE => "MH_EXECUTE",
@@ -125,112 +126,35 @@ module MachO
125
126
  MH_KEXT_BUNDLE => "MH_KEXT_BUNDLE"
126
127
  }
127
128
 
128
- # the object file has no undefined references (flag)
129
- MH_NOUNDEFS = 0x1
130
-
131
- # the object file is the output of an incremental link against a base file (flag)
132
- MH_INCRLINK = 0x2
133
-
134
- # the object file is input for the dynamic linker and can't be staticly link edited again (flag)
135
- MH_DYLDLINK = 0x4
136
-
137
- # the object file's undefined references are bound by the dynamic linker when loaded (flag)
138
- MH_BINDATLOAD = 0x8
139
-
140
- # the file has its dynamic undefined references prebound (flag)
141
- MH_PREBOUND = 0x10
142
-
143
- # the file has its read-only and read-write segments split (flag)
144
- MH_SPLIT_SEGS = 0x20
145
-
146
- # the shared library init routine is to be run lazily via catching memory faults to its writeable segments (obsolete) (flag)
147
- MH_LAZY_INIT = 0x40
148
-
149
- # the image is using two-level name space bindings (flag)
150
- MH_TWOLEVEL = 0x80
151
-
152
- # the executable is forcing all images to use flat name space bindings (flag)
153
- MH_FORCE_FLAT = 0x100
154
-
155
- # this umbrella guarantees no multiple defintions of symbols in its sub-images so the two-level namespace hints can always be used (flag)
156
- MH_NOMULTIDEFS = 0x200
157
-
158
- # do not have dyld notify the prebinding agent about this executable (flag)
159
- MH_NOPREFIXBINDING = 0x400
160
-
161
- # the binary is not prebound but can have its prebinding redone. only used when MH_PREBOUND is not set (flag)
162
- MH_PREBINDABLE = 0x800
163
-
164
- # indicates that this binary binds to all two-level namespace modules of its dependent libraries. only used when MH_PREBINDABLE and MH_TWOLEVEL are both set (flag)
165
- MH_ALLMODSBOUND = 0x1000
166
-
167
- # safe to divide up the sections into sub-sections via symbols for dead code stripping (flag)
168
- MH_SUBSECTIONS_VIA_SYMBOLS = 0x2000
169
-
170
- # the binary has been canonicalized via the unprebind operation (flag)
171
- MH_CANONICAL = 0x4000
172
-
173
- # the final linked image contains external weak symbols (flag)
174
- MH_WEAK_DEFINES = 0x8000
175
-
176
- # the final linked image uses weak symbols (flag)
177
- MH_BINDS_TO_WEAK = 0x10000
178
-
179
- # When this bit is set, all stacks in the task will be given stack execution privilege. Only used in MH_EXECUTE filetypes (flag)
180
- MH_ALLOW_STACK_EXECUTION = 0x20000
181
-
182
- # When this bit is set, the binary declares it is safe for use in processes with uid zero (flag)
183
- MH_ROOT_SAFE = 0x40000
184
-
185
- # When this bit is set, the binary declares it is safe for use in processes when issetugid() is true (flag)
186
- MH_SETUID_SAFE = 0x80000
187
-
188
- # When this bit is set on a dylib, the static linker does not need to examine dependent dylibs to see if any are re-exported (flag)
189
- MH_NO_REEXPORTED_DYLIBS = 0x100000
190
-
191
- # When this bit is set, the OS will load the main executable at a random address. Only used in MH_EXECUTE filetypes (flag)
192
- MH_PIE = 0x200000
193
-
194
- # Only for use on dylibs. When linking against a dylib that has this bit set, the static linker will automatically not create a LC_LOAD_DYLIB load command to the dylib if no symbols are being referenced from the dylib (flag)
195
- MH_DEAD_STRIPPABLE_DYLIB = 0x400000
196
-
197
- # Contains a section of type S_THREAD_LOCAL_VARIABLES (flag)
198
- MH_HAS_TLV_DESCRIPTORS = 0x800000
199
-
200
- # When this bit is set, the OS will run the main executable with a non-executable heap even on platforms (e.g. i386) that don't require it. Only used in MH_EXECUTE filetypes (flag)
201
- MH_NO_HEAP_EXECUTION = 0x1000000
202
-
203
- # The code was linked for use in an application extension (flag)
204
- MH_APP_EXTENSION_SAFE = 0x02000000
205
-
206
- # association of mach header flags to string representations
129
+ # association of mach header flag symbols to values
130
+ # @api private
207
131
  MH_FLAGS = {
208
- MH_NOUNDEFS => "MH_NOUNDEFS",
209
- MH_INCRLINK => "MH_INCRLINK",
210
- MH_DYLDLINK => "MH_DYLDLINK",
211
- MH_BINDATLOAD => "MH_BINDATLOAD",
212
- MH_PREBOUND => "MH_PREBOUND",
213
- MH_SPLIT_SEGS => "MH_SPLIT_SEGS",
214
- MH_LAZY_INIT => "MH_LAZY_INIT",
215
- MH_TWOLEVEL => "MH_TWOLEVEL",
216
- MH_FORCE_FLAT => "MH_FORCE_FLAT",
217
- MH_NOMULTIDEFS => "MH_NOMULTIDEFS",
218
- MH_NOPREFIXBINDING => "MH_NOPREFIXBINDING",
219
- MH_PREBINDABLE => "MH_PREBINDABLE",
220
- MH_ALLMODSBOUND => "MH_ALLMODSBOUND",
221
- MH_SUBSECTIONS_VIA_SYMBOLS => "MH_SUBSECTIONS_VIA_SYMBOLS",
222
- MH_CANONICAL => "MH_CANONICAL",
223
- MH_WEAK_DEFINES => "MH_WEAK_DEFINES",
224
- MH_BINDS_TO_WEAK => "MH_BINDS_TO_WEAK",
225
- MH_ALLOW_STACK_EXECUTION => "MH_ALLOW_STACK_EXECUTION",
226
- MH_ROOT_SAFE => "MH_ROOT_SAFE",
227
- MH_SETUID_SAFE => "MH_SETUID_SAFE",
228
- MH_NO_REEXPORTED_DYLIBS => "MH_NO_REEXPORTED_DYLIBS",
229
- MH_PIE => "MH_PIE",
230
- MH_DEAD_STRIPPABLE_DYLIB => "MH_DEAD_STRIPPABLE_DYLIB",
231
- MH_HAS_TLV_DESCRIPTORS => "MH_HAS_TLV_DESCRIPTORS",
232
- MH_NO_HEAP_EXECUTION => "MH_NO_HEAP_EXECUTION",
233
- MH_APP_EXTENSION_SAFE => "MH_APP_EXTENSION_SAFE"
132
+ :MH_NOUNDEFS => 0x1,
133
+ :MH_INCRLINK => 0x2,
134
+ :MH_DYLDLINK => 0x4,
135
+ :MH_BINDATLOAD => 0x8,
136
+ :MH_PREBOUND => 0x10,
137
+ :MH_SPLIT_SEGS => 0x20,
138
+ :MH_LAZY_INIT => 0x40,
139
+ :MH_TWOLEVEL => 0x80,
140
+ :MH_FORCE_FLAT => 0x100,
141
+ :MH_NOMULTIDEFS => 0x200,
142
+ :MH_NOPREFIXBINDING => 0x400,
143
+ :MH_PREBINDABLE => 0x800,
144
+ :MH_ALLMODSBOUND => 0x1000,
145
+ :MH_SUBSECTIONS_VIA_SYMBOLS => 0x2000,
146
+ :MH_CANONICAL => 0x4000,
147
+ :MH_WEAK_DEFINES => 0x8000,
148
+ :MH_BINDS_TO_WEAK => 0x10000,
149
+ :MH_ALLOW_STACK_EXECUTION => 0x20000,
150
+ :MH_ROOT_SAFE => 0x40000,
151
+ :MH_SETUID_SAFE => 0x80000,
152
+ :MH_NO_REEXPORTED_DYLIBS => 0x100000,
153
+ :MH_PIE => 0x200000,
154
+ :MH_DEAD_STRIPPABLE_DYLIB => 0x400000,
155
+ :MH_HAS_TLV_DESCRIPTORS => 0x800000,
156
+ :MH_NO_HEAP_EXECUTION => 0x1000000,
157
+ :MH_APP_EXTENSION_SAFE => 0x02000000
234
158
  }
235
159
 
236
160
  # Fat binary header structure
@@ -323,10 +247,12 @@ module MachO
323
247
  end
324
248
 
325
249
  # @example
326
- # puts "this mach-o has position-independent execution" if header.flag?(MH_PIE)
327
- # @param flag [Fixnum] a mach header flag constant
250
+ # puts "this mach-o has position-independent execution" if header.flag?(:MH_PIE)
251
+ # @param flag [Symbol] a mach header flag symbol
328
252
  # @return [Boolean] true if `flag` is present in the header's flag section
329
253
  def flag?(flag)
254
+ flag = MH_FLAGS[flag]
255
+ return false if flag.nil?
330
256
  flags & flag == flag
331
257
  end
332
258
  end
@@ -3,7 +3,7 @@ module MachO
3
3
  # LC_REQ_DYLD to be recognized by the dynamic linder (dyld)
4
4
  LC_REQ_DYLD = 0x80000000
5
5
 
6
- # association of load commands to string representations
6
+ # association of load commands to symbol representations
7
7
  # @api private
8
8
  LOAD_COMMANDS = {
9
9
  0x1 => :LC_SEGMENT,
@@ -55,7 +55,8 @@ module MachO
55
55
  0x2e => :LC_LINKER_OPTIMIZATION_HINT
56
56
  }
57
57
 
58
- # association of load commands to string representations of class names
58
+ # association of load command symbols to string representations of classes
59
+ # @api private
59
60
  LC_STRUCTURES = {
60
61
  :LC_SEGMENT => "SegmentCommand",
61
62
  :LC_SYMTAB => "SymtabCommand",
@@ -106,41 +107,27 @@ module MachO
106
107
  :LC_LINKER_OPTIMIZATION_HINT => "LinkeditDataCommand"
107
108
  }
108
109
 
109
- # pagezero segment name
110
- SEG_PAGEZERO = "__PAGEZERO"
111
-
112
- # text segment name
113
- SEG_TEXT = "__TEXT"
114
-
115
- # data segment name
116
- SEG_DATA = "__DATA"
117
-
118
- # objective-c runtime segment
119
- SEG_OBJC = "__OBJC"
120
-
121
- # icon segment
122
- SEG_ICON = "__ICON"
123
-
124
- # link editor structures segment
125
- SEG_LINKEDIT = "__LINKEDIT"
126
-
127
- # unix stack segment
128
- SEG_UNIXSTACK = "__UNIXSTACK"
129
-
130
- # segment for self-modifying code with RWX permissions
131
- SEG_IMPORT = "__IMPORT"
132
-
133
- # the file contents for this segment is for the high part of the VM space, the low part is zero filled (for stacks in core files)
134
- SG_HIGHVM = 0x1
135
-
136
- # this segment is the VM that is allocated by a fixed VM library, for overlap checking in the link editor
137
- SG_FVMLIB = 0x2
138
-
139
- # this segment has nothing that was relocated in it and nothing relocated to it, that is it maybe safely replaced without relocation
140
- SG_NORELOC = 0x4
110
+ # association of segment name symbols to names
111
+ # @api private
112
+ SEGMENT_NAMES = {
113
+ :SEG_PAGEZERO => "__PAGEZERO",
114
+ :SEG_TEXT => "__TEXT",
115
+ :SEG_DATA => "__DATA",
116
+ :SEG_OBJC => "__OBJC",
117
+ :SEG_ICON => "__ICON",
118
+ :SEG_LINKEDIT => "__LINKEDIT",
119
+ :SEG_UNIXSTACK => "__UNIXSTACK",
120
+ :SEG_IMPORT => "__IMPORT"
121
+ }
141
122
 
142
- # this segment is protected. if the segment starts at file offset 0, the first page of the segment is not protected. all other pages of the segment are protected.
143
- SG_PROTECTED_VERSION_1 = 0x8
123
+ # association of segment flag symbols to values
124
+ # @api private
125
+ SEGMENT_FLAGS = {
126
+ :SG_HIGHVM => 0x1,
127
+ :SG_FVMLIB => 0x2,
128
+ :SG_NORELOC => 0x4,
129
+ :SG_PROTECTED_VERSION_1 => 0x8
130
+ }
144
131
 
145
132
  # Mach-O load command structure
146
133
  # This is the most generic load command - only cmd ID and size are
@@ -293,6 +280,16 @@ module MachO
293
280
  @nsects = nsects
294
281
  @flags = flags
295
282
  end
283
+
284
+ # @example
285
+ # puts "this segment relocated in/to it" if sect.flag?(:SG_NORELOC)
286
+ # @param flag [Symbol] a segment flag symbol
287
+ # @return [Boolean] true if `flag` is present in the segment's flag field
288
+ def flag?(flag)
289
+ flag = SEGMENT_FLAGS[flag]
290
+ return false if flag.nil?
291
+ flags & flag == flag
292
+ end
296
293
  end
297
294
 
298
295
  # A load command indicating that part of this file is to be mapped into
@@ -342,6 +339,16 @@ module MachO
342
339
  @nsects = nsects
343
340
  @flags = flags
344
341
  end
342
+
343
+ # @example
344
+ # puts "this segment relocated in/to it" if sect.flag?(:SG_NORELOC)
345
+ # @param flag [Symbol] a segment flag symbol
346
+ # @return [Boolean] true if `flag` is present in the segment's flag field
347
+ def flag?(flag)
348
+ flag = SEGMENT_FLAGS[flag]
349
+ return false if flag.nil?
350
+ flags & flag == flag
351
+ end
345
352
  end
346
353
 
347
354
  # A load command representing some aspect of shared libraries, depending
@@ -442,8 +442,8 @@ module MachO
442
442
  # calculate the low file offset (offset to first section data)
443
443
  segments.each do |seg|
444
444
  sections(seg).each do |sect|
445
- if sect.size != 0 && !sect.flag?(S_ZEROFILL) &&
446
- !sect.flag?(S_THREAD_LOCAL_ZEROFILL) &&
445
+ if sect.size != 0 && !sect.flag?(:S_ZEROFILL) &&
446
+ !sect.flag?(:S_THREAD_LOCAL_ZEROFILL) &&
447
447
  sect.offset < low_fileoff
448
448
 
449
449
  low_fileoff = sect.offset
@@ -11,116 +11,59 @@ module MachO
11
11
  # system settable attributes mask
12
12
  SECTION_ATTRIBUTES_SYS = 0x00ffff00
13
13
 
14
- # a regular section
15
- S_REGULAR = 0x0
16
-
17
- # a zero fill on demand section
18
- S_ZEROFILL = 0x1
19
-
20
- # a section with only literal C strings
21
- S_CSTRING_LITERALS = 0x2
22
-
23
- # a section with only 4 byte literals
24
- S_4BYTE_LITERALS = 0x3
25
-
26
- # a section with only 8 byte literals
27
- S_8BYTE_LITERALS = 0x4
28
-
29
- # a section with only pointers to literals
30
- S_LITERAL_POINTERS = 0x5
31
-
32
- # a section with only non-lazy symbol pointers
33
- S_NON_LAZY_SYMBOL_POINTERS = 0x6
34
-
35
- # a section with only lazy symbol pointers
36
- S_LAZY_SYMBOL_POINTERS = 0x7
37
-
38
- # a section with only symbol stubs (byte size of stub in reserved2 field)
39
- S_SYMBOL_STUBS = 0x8
40
-
41
- # a section with only function pointers for initialization
42
- S_MOD_INIT_FUNC_POINTERS = 0x9
43
-
44
- # a section with only function pointers for termination
45
- S_MOD_TERM_FUNC_POINTERS = 0xa
46
-
47
- # a section with only symbols that are to be coalesced
48
- S_COALESCED = 0xb
49
-
50
- # a zero fill on demand section that can be larger than 4GB
51
- S_GB_ZEROFILE = 0xc
52
-
53
- # a section with only pairs of function pointers for interposing
54
- S_INTERPOSING = 0xd
55
-
56
- # a section with only 16 byte literals
57
- S_16BYTE_LITERALS = 0xe
58
-
59
- # a section containing DTrace Object Format
60
- S_DTRACE_DOF = 0xf
61
-
62
- # a section with only lazy symbol pointers to lazy loaded dylibs
63
- S_LAZY_DYLIB_SYMBOL_POINTERS = 0x10
64
-
65
- # a template of initial values for thread local variables
66
- S_THREAD_LOCAL_REGULAR = 0x11
67
-
68
- # a template of initial values for thread local variables
69
- S_THREAD_LOCAL_ZEROFILL = 0x12
70
-
71
- # thread local variable descriptors
72
- S_THREAD_LOCAL_VARIABLES = 0x13
73
-
74
- # pointers to thread local variable descriptors
75
- S_THREAD_LOCAL_VARIABLE_POINTERS = 0x14
76
-
77
- # functions to call to initialize thread local variable values
78
- S_THREAD_LOCAL_INIT_FUNCTION_POINTERS = 0x15
79
-
80
- # a section with only true machine instructions
81
- S_ATTR_PURE_INSTRUCTIONS = 0x80000000
82
-
83
- # a section with coalesced symbols that are not to be in a ranlib table of contents
84
- S_ATTR_NO_TOC = 0x40000000
85
-
86
- # static symbols in this section can be stripped in files with the MH_DYLDLINK flag
87
- S_ATTR_STRIP_STATIC_SYMS = 0x20000000
88
-
89
- # no dead stripping
90
- S_ATTR_NO_DEAD_STRIP = 0x10000000
91
-
92
- # blocks are live if they reference live blocks
93
- S_ATTR_LIVE_SUPPORT = 0x08000000
94
-
95
- # used with i386 code stubs written on by dyld
96
- S_ATTR_SELF_MODIFYING_CODE = 0x04000000
97
-
98
- # a debug section
99
- S_ATTR_DEBUG = 0x02000000
100
-
101
- # a section containing some machine instructions
102
- S_ATTR_SOME_INSTRUCTIONS = 0x00000400
103
-
104
- # a section containing external relocation entries
105
- S_ATTR_EXT_RELOC = 0x00000200
106
-
107
- # a section containing local relocation entries
108
- S_ATTR_LOC_RELOC = 0x00000100
109
-
110
- # currently known section names
111
- # we don't use these anywhere right now, but they're good to have
112
- SECT_TEXT = "__text"
113
- SECT_FVMLIB_INIT0 = "__fvmlib_init0"
114
- SECT_FVMLIB_INIT1 = "__fvmlib_init1"
115
- SECT_DATA = "__data"
116
- SECT_BSS = "__bss"
117
- SECT_COMMON = "__common"
118
- SECT_OBJC_SYMBOLS = "__symbol_table"
119
- SECT_OBJC_MODULES = "__module_info"
120
- SECT_OBJC_STRINGS = "__selector_strs"
121
- SECT_OBJC_REFS = "__selector_refs"
122
- SECT_ICON_HEADER = "__header"
123
- SECT_ICON_TIFF = "__tiff"
14
+ # association of section flag symbols to values
15
+ # @api private
16
+ SECTION_FLAGS = {
17
+ :S_REGULAR => 0x0,
18
+ :S_ZEROFILL => 0x1,
19
+ :S_CSTRING_LITERALS => 0x2,
20
+ :S_4BYTE_LITERALS => 0x3,
21
+ :S_8BYTE_LITERALS => 0x4,
22
+ :S_LITERAL_POINTERS => 0x5,
23
+ :S_NON_LAZY_SYMBOL_POINTERS => 0x6,
24
+ :S_LAZY_SYMBOL_POINTERS => 0x7,
25
+ :S_SYMBOL_STUBS => 0x8,
26
+ :S_MOD_INIT_FUNC_POINTERS => 0x9,
27
+ :S_MOD_TERM_FUNC_POINTERS => 0xa,
28
+ :S_COALESCED => 0xb,
29
+ :S_GB_ZEROFILE => 0xc,
30
+ :S_INTERPOSING => 0xd,
31
+ :S_16BYTE_LITERALS => 0xe,
32
+ :S_DTRACE_DOF => 0xf,
33
+ :S_LAZY_DYLIB_SYMBOL_POINTERS => 0x10,
34
+ :S_THREAD_LOCAL_REGULAR => 0x11,
35
+ :S_THREAD_LOCAL_ZEROFILL => 0x12,
36
+ :S_THREAD_LOCAL_VARIABLES => 0x13,
37
+ :S_THREAD_LOCAL_VARIABLE_POINTERS => 0x14,
38
+ :S_THREAD_LOCAL_INIT_FUNCTION_POINTERS => 0x15,
39
+ :S_ATTR_PURE_INSTRUCTIONS => 0x80000000,
40
+ :S_ATTR_NO_TOC => 0x40000000,
41
+ :S_ATTR_STRIP_STATIC_SYMS => 0x20000000,
42
+ :S_ATTR_NO_DEAD_STRIP => 0x10000000,
43
+ :S_ATTR_LIVE_SUPPORT => 0x08000000,
44
+ :S_ATTR_SELF_MODIFYING_CODE => 0x04000000,
45
+ :S_ATTR_DEBUG => 0x02000000,
46
+ :S_ATTR_SOME_INSTRUCTIONS => 0x00000400,
47
+ :S_ATTR_EXT_RELOC => 0x00000200,
48
+ :S_ATTR_LOC_RELOC => 0x00000100
49
+ }
50
+
51
+ # association of section name symbols to names
52
+ # @api private
53
+ SECTION_NAMES = {
54
+ :SECT_TEXT => "__text",
55
+ :SECT_FVMLIB_INIT0 => "__fvmlib_init0",
56
+ :SECT_FVMLIB_INIT1 => "__fvmlib_init1",
57
+ :SECT_DATA => "__data",
58
+ :SECT_BSS => "__bss",
59
+ :SECT_COMMON => "__common",
60
+ :SECT_OBJC_SYMBOLS => "__symbol_table",
61
+ :SECT_OBJC_MODULES => "__module_info",
62
+ :SECT_OBJC_STRINGS => "__selector_strs",
63
+ :SECT_OBJC_REFS => "__selector_refs",
64
+ :SECT_ICON_HEADER => "__header",
65
+ :SECT_ICON_TIFF => "__tiff"
66
+ }
124
67
 
125
68
  # Represents a section of a segment for 32-bit architectures.
126
69
  class Section < MachOStructure
@@ -187,10 +130,12 @@ module MachO
187
130
  end
188
131
 
189
132
  # @example
190
- # puts "this section is regular" if sect.flag?(S_REGULAR)
191
- # @param flag [Fixnum] a section flag constant
192
- # @return [Boolean] true if `flag` is present in the sections's flag field
133
+ # puts "this section is regular" if sect.flag?(:S_REGULAR)
134
+ # @param flag [Symbol] a section flag symbol
135
+ # @return [Boolean] true if `flag` is present in the section's flag field
193
136
  def flag?(flag)
137
+ flag = SECTION_FLAGS[flag]
138
+ return false if flag.nil?
194
139
  flags & flag == flag
195
140
  end
196
141
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-macho
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - William Woodruff
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-04 00:00:00.000000000 Z
11
+ date: 2015-11-07 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A library for viewing and manipulating Mach-O files in Ruby.
14
14
  email: william@tuffbizz.com