Class: ELFTools::Segments::Segment
- Inherits:
-
Object
- Object
- ELFTools::Segments::Segment
- Defined in:
- lib/elftools/segments/segment.rb
Overview
Base class of segments.
Direct Known Subclasses
Instance Attribute Summary collapse
-
#header ⇒ ELFTools::Structs::ELF32_Phdr, ELFTools::Structs::ELF64_Phdr
readonly
Program header.
-
#stream ⇒ #pos=, #read
readonly
Streaming object.
Class Method Summary collapse
-
.create(header, stream, *args, **kwargs) ⇒ ELFTools::Segments::Segment
Use different class according to
header.p_type
.
Instance Method Summary collapse
-
#data ⇒ String
The content in this segment.
-
#executable? ⇒ Boolean
Is this segment executable?.
-
#initialize(header, stream, offset_from_vma: nil) ⇒ Segment
constructor
Instantiate a Segment object.
-
#readable? ⇒ Boolean
Is this segment readable?.
-
#type ⇒ Integer
Return
header.p_type
in a simpler way. -
#writable? ⇒ Boolean
Is this segment writable?.
Constructor Details
#initialize(header, stream, offset_from_vma: nil) ⇒ Segment
Instantiate a ELFTools::Segments::Segment object.
17 18 19 20 21 |
# File 'lib/elftools/segments/segment.rb', line 17 def initialize(header, stream, offset_from_vma: nil) @header = header @stream = stream @offset_from_vma = offset_from_vma end |
Instance Attribute Details
#header ⇒ ELFTools::Structs::ELF32_Phdr, ELFTools::Structs::ELF64_Phdr (readonly)
Returns Program header.
7 8 9 |
# File 'lib/elftools/segments/segment.rb', line 7 def header @header end |
#stream ⇒ #pos=, #read (readonly)
Returns Streaming object.
8 9 10 |
# File 'lib/elftools/segments/segment.rb', line 8 def stream @stream end |
Class Method Details
.create(header, stream, *args, **kwargs) ⇒ ELFTools::Segments::Segment
Use different class according to header.p_type
.
22 23 24 25 26 27 28 29 30 31 |
# File 'lib/elftools/segments/segments.rb', line 22 def create(header, stream, *args, **kwargs) klass = case header.p_type when Constants::PT_DYNAMIC then DynamicSegment when Constants::PT_INTERP then InterpSegment when Constants::PT_LOAD then LoadSegment when Constants::PT_NOTE then NoteSegment else Segment end klass.new(header, stream, *args, **kwargs) end |
Instance Method Details
#data ⇒ String
The content in this segment.
32 33 34 35 |
# File 'lib/elftools/segments/segment.rb', line 32 def data stream.pos = header.p_offset stream.read(header.p_filesz) end |
#executable? ⇒ Boolean
Is this segment executable?
51 52 53 |
# File 'lib/elftools/segments/segment.rb', line 51 def executable? (header.p_flags & 1) == 1 end |
#readable? ⇒ Boolean
Is this segment readable?
39 40 41 |
# File 'lib/elftools/segments/segment.rb', line 39 def readable? (header.p_flags & 4) == 4 end |
#type ⇒ Integer
Return header.p_type
in a simpler way.
26 27 28 |
# File 'lib/elftools/segments/segment.rb', line 26 def type header.p_type end |
#writable? ⇒ Boolean
Is this segment writable?
45 46 47 |
# File 'lib/elftools/segments/segment.rb', line 45 def writable? (header.p_flags & 2) == 2 end |