class ELFTools::Segments::Segment

Base class of segments.

Class methods of {Segments::Segment}.

Attributes

header[R]
stream[R]

Public Class Methods

create(header, stream, *args, **kwargs) click to toggle source

Use different class according to header.p_type. @param [ELFTools::Structs::ELF32_Phdr, ELFTools::Structs::ELF64_Phdr] header Program header of a segment. @param [#pos=, read] stream Streaming object. @return [ELFTools::Segments::Segment]

Return object dependes on +header.p_type+.
# 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
new(header, stream, offset_from_vma: nil) click to toggle source

Instantiate a {Segment} object. @param [ELFTools::Structs::ELF32_Phdr, ELFTools::Structs::ELF64_Phdr] header

Program header.

@param [#pos=, read] stream

Streaming object.

@param [Method] offset_from_vma

The method to get offset of file, given virtual memory address.
# 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

Public Instance Methods

data() click to toggle source

The content in this segment. @return [String] The content.

# File lib/elftools/segments/segment.rb, line 32
def data
  stream.pos = header.p_offset
  stream.read(header.p_filesz)
end
executable?() click to toggle source

Is this segment executable? @return [Boolean] Ture or false.

# File lib/elftools/segments/segment.rb, line 51
def executable?
  (header.p_flags & 1) == 1
end
readable?() click to toggle source

Is this segment readable? @return [Boolean] Ture or false.

# File lib/elftools/segments/segment.rb, line 39
def readable?
  (header.p_flags & 4) == 4
end
type() click to toggle source

Return header.p_type in a simplier way. @return [Integer]

The type, meaning of types are defined in {Constants::PT}.
# File lib/elftools/segments/segment.rb, line 26
def type
  header.p_type
end
writable?() click to toggle source

Is this segment writable? @return [Boolean] Ture or false.

# File lib/elftools/segments/segment.rb, line 45
def writable?
  (header.p_flags & 2) == 2
end