Class: MachO::LoadCommands::SegmentCommand
- Inherits:
-
LoadCommand
- Object
- MachOStructure
- LoadCommand
- MachO::LoadCommands::SegmentCommand
- Defined in:
- lib/macho/load_commands.rb
Overview
A load command indicating that part of this file is to be mapped into the task's address space. Corresponds to LC_SEGMENT.
Direct Known Subclasses
Constant Summary collapse
- FORMAT =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
"L=2a16L=4l=2L=2".freeze
- SIZEOF =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
56
Instance Attribute Summary collapse
-
#fileoff ⇒ Integer
readonly
The file offset of the segment.
-
#filesize ⇒ Integer
readonly
The amount to map from the file.
-
#flags ⇒ Integer
readonly
Any flags associated with the segment.
-
#initprot ⇒ Integer
readonly
The initial VM protection.
-
#maxprot ⇒ Integer
readonly
The maximum VM protection.
-
#nsects ⇒ Integer
readonly
The number of sections in the segment.
-
#segname ⇒ String
readonly
The name of the segment.
-
#vmaddr ⇒ Integer
readonly
The memory address of the segment.
-
#vmsize ⇒ Integer
readonly
The memory size of the segment.
Attributes inherited from LoadCommand
Instance Method Summary collapse
-
#flag?(flag) ⇒ Boolean
True if
flagis present in the segment's flag field. -
#initialize(view, cmd, cmdsize, segname, vmaddr, vmsize, fileoff, filesize, maxprot, initprot, nsects, flags) ⇒ SegmentCommand
constructor
private
A new instance of SegmentCommand.
-
#sections ⇒ Array<MachO::Sections::Section>, Array<MachO::Sections::Section64>
All sections referenced within this segment.
Methods inherited from LoadCommand
create, new_from_bin, #offset, #serializable?, #serialize, #to_s, #type
Methods inherited from MachOStructure
Constructor Details
#initialize(view, cmd, cmdsize, segname, vmaddr, vmsize, fileoff, filesize, maxprot, initprot, nsects, flags) ⇒ SegmentCommand
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of SegmentCommand.
408 409 410 411 412 413 414 415 416 417 418 419 420 |
# File 'lib/macho/load_commands.rb', line 408 def initialize(view, cmd, cmdsize, segname, vmaddr, vmsize, fileoff, filesize, maxprot, initprot, nsects, flags) super(view, cmd, cmdsize) @segname = segname.delete("\x00") @vmaddr = vmaddr @vmsize = vmsize @fileoff = fileoff @filesize = filesize @maxprot = maxprot @initprot = initprot @nsects = nsects @flags = flags end |
Instance Attribute Details
#fileoff ⇒ Integer (readonly)
Returns the file offset of the segment.
382 383 384 |
# File 'lib/macho/load_commands.rb', line 382 def fileoff @fileoff end |
#filesize ⇒ Integer (readonly)
Returns the amount to map from the file.
385 386 387 |
# File 'lib/macho/load_commands.rb', line 385 def filesize @filesize end |
#flags ⇒ Integer (readonly)
Returns any flags associated with the segment.
397 398 399 |
# File 'lib/macho/load_commands.rb', line 397 def flags @flags end |
#initprot ⇒ Integer (readonly)
Returns the initial VM protection.
391 392 393 |
# File 'lib/macho/load_commands.rb', line 391 def initprot @initprot end |
#maxprot ⇒ Integer (readonly)
Returns the maximum VM protection.
388 389 390 |
# File 'lib/macho/load_commands.rb', line 388 def maxprot @maxprot end |
#nsects ⇒ Integer (readonly)
Returns the number of sections in the segment.
394 395 396 |
# File 'lib/macho/load_commands.rb', line 394 def nsects @nsects end |
#segname ⇒ String (readonly)
Returns the name of the segment.
373 374 375 |
# File 'lib/macho/load_commands.rb', line 373 def segname @segname end |
#vmaddr ⇒ Integer (readonly)
Returns the memory address of the segment.
376 377 378 |
# File 'lib/macho/load_commands.rb', line 376 def vmaddr @vmaddr end |
#vmsize ⇒ Integer (readonly)
Returns the memory size of the segment.
379 380 381 |
# File 'lib/macho/load_commands.rb', line 379 def vmsize @vmsize end |
Instance Method Details
#flag?(flag) ⇒ Boolean
Returns true if flag is present in the segment's flag field.
446 447 448 449 450 |
# File 'lib/macho/load_commands.rb', line 446 def flag?(flag) flag = SEGMENT_FLAGS[flag] return false if flag.nil? flags & flag == flag end |
#sections ⇒ Array<MachO::Sections::Section>, Array<MachO::Sections::Section64>
All sections referenced within this segment.
425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 |
# File 'lib/macho/load_commands.rb', line 425 def sections klass = case self when SegmentCommand64 MachO::Sections::Section64 when SegmentCommand MachO::Sections::Section end offset = view.offset + self.class.bytesize length = nsects * klass.bytesize bins = view.raw_data[offset, length] bins.unpack("a#{klass.bytesize}" * nsects).map do |bin| klass.new_from_bin(view.endianness, bin) end end |