Class: ELFTools::Segments::Segment

Inherits:
Object
  • Object
show all
Defined in:
lib/elftools/segments/segment.rb

Overview

Base class of segments.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(header, stream, offset_from_vma: nil) ⇒ Segment

Instantiate a ELFTools::Segments::Segment object.

Parameters:



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

#headerELFTools::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.

Returns:

  • (#pos=, #read)

    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.

Parameters:

Returns:



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

#dataString

The content in this segment.

Returns:

  • (String)

    The content.



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?

Returns:

  • (Boolean)

    True or false.



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?

Returns:

  • (Boolean)

    True or false.



39
40
41
# File 'lib/elftools/segments/segment.rb', line 39

def readable?
  (header.p_flags & 4) == 4
end

#typeInteger

Return header.p_type in a simpler way.

Returns:

  • (Integer)

    The type, meaning of types are defined in Constants::PT.



26
27
28
# File 'lib/elftools/segments/segment.rb', line 26

def type
  header.p_type
end

#writable?Boolean

Is this segment writable?

Returns:

  • (Boolean)

    True or false.



45
46
47
# File 'lib/elftools/segments/segment.rb', line 45

def writable?
  (header.p_flags & 2) == 2
end