class ELFTools::Segments::LoadSegment

For DT_LOAD segment. Able to query between file offset and virtual memory address.

Public Instance Methods

file_head() click to toggle source

Returns the start of this segment. @return [Integer]

The file offset.
# File lib/elftools/segments/load_segment.rb, line 13
def file_head
  header.p_offset.to_i
end
file_tail() click to toggle source

Returns the end of this segment. @return [Integer]

The file offset.
# File lib/elftools/segments/load_segment.rb, line 27
def file_tail
  file_head + size
end
mem_head() click to toggle source

Returns the start virtual address of this segment. @return [Integer]

The vma.
# File lib/elftools/segments/load_segment.rb, line 34
def mem_head
  header.p_vaddr.to_i
end
mem_size() click to toggle source

Returns size in memory. @return [Integer]

The size.
# File lib/elftools/segments/load_segment.rb, line 41
def mem_size
  header.p_memsz.to_i
end
mem_tail() click to toggle source

Returns the end virtual address of this segment. @return [Integer]

The vma.
# File lib/elftools/segments/load_segment.rb, line 48
def mem_tail
  mem_head + mem_size
end
offset_in?(offset, size = 0) click to toggle source

Query if the given file offset located in this segment. @param [Integer] offset

File offset.

@param [Integer] size

Size.

@return [Boolean]

# File lib/elftools/segments/load_segment.rb, line 58
def offset_in?(offset, size = 0)
  file_head <= offset && offset + size < file_tail
end
offset_to_vma(offset) click to toggle source

Convert file offset into virtual memory address. @param [Integer] offset

File offset.

@return [Integer]

# File lib/elftools/segments/load_segment.rb, line 66
def offset_to_vma(offset)
  # XXX: What if file_head is not aligned with p_vaddr (which is invalid according to ELF spec)?
  offset - file_head + header.p_vaddr
end
size() click to toggle source

Returns size in file. @return [Integer]

The size.
# File lib/elftools/segments/load_segment.rb, line 20
def size
  header.p_filesz.to_i
end
vma_in?(vma, size = 0) click to toggle source

Query if the given virtual memory address located in this segment. @param [Integer] vma

Virtual memory address.

@param [Integer] size

Size.

@return [Boolean]

# File lib/elftools/segments/load_segment.rb, line 77
def vma_in?(vma, size = 0)
  vma >= (header.p_vaddr & -header.p_align) &&
    vma + size <= mem_tail
end
vma_to_offset(vma) click to toggle source

Convert virtual memory address into file offset. @param [Integer] vma

Virtual memory address.

@return [Integer]

# File lib/elftools/segments/load_segment.rb, line 86
def vma_to_offset(vma)
  vma - header.p_vaddr + header.p_offset
end