Class: ELFTools::Segments::LoadSegment
- Defined in:
- lib/elftools/segments/load_segment.rb
Overview
For DT_LOAD segment. Able to query between file offset and virtual memory address.
Instance Attribute Summary
Attributes inherited from Segment
Instance Method Summary collapse
-
#file_head ⇒ Integer
Returns the start of this segment.
-
#file_tail ⇒ Integer
Returns the end of this segment.
-
#mem_head ⇒ Integer
Returns the start virtual address of this segment.
-
#mem_size ⇒ Integer
Returns size in memory.
-
#mem_tail ⇒ Integer
Returns the end virtual address of this segment.
-
#offset_in?(offset, size = 0) ⇒ Boolean
Query if the given file offset located in this segment.
-
#offset_to_vma(offset) ⇒ Integer
Convert file offset into virtual memory address.
-
#size ⇒ Integer
Returns size in file.
-
#vma_in?(vma, size = 0) ⇒ Boolean
Query if the given virtual memory address located in this segment.
-
#vma_to_offset(vma) ⇒ Integer
Convert virtual memory address into file offset.
Methods inherited from Segment
create, #data, #executable?, #initialize, #readable?, #type, #writable?
Constructor Details
This class inherits a constructor from ELFTools::Segments::Segment
Instance Method Details
#file_head ⇒ Integer
Returns the start of this segment.
13 14 15 |
# File 'lib/elftools/segments/load_segment.rb', line 13 def file_head header.p_offset.to_i end |
#file_tail ⇒ Integer
Returns the end of this segment.
27 28 29 |
# File 'lib/elftools/segments/load_segment.rb', line 27 def file_tail file_head + size end |
#mem_head ⇒ Integer
Returns the start virtual address of this segment.
34 35 36 |
# File 'lib/elftools/segments/load_segment.rb', line 34 def mem_head header.p_vaddr.to_i end |
#mem_size ⇒ Integer
Returns size in memory.
41 42 43 |
# File 'lib/elftools/segments/load_segment.rb', line 41 def mem_size header.p_memsz.to_i end |
#mem_tail ⇒ Integer
Returns the end virtual address of this segment.
48 49 50 |
# File 'lib/elftools/segments/load_segment.rb', line 48 def mem_tail mem_head + mem_size end |
#offset_in?(offset, size = 0) ⇒ Boolean
Query if the given file offset located in this segment.
58 59 60 |
# 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) ⇒ Integer
Convert file offset into virtual memory address.
66 67 68 69 |
# 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 ⇒ Integer
Returns size in file.
20 21 22 |
# File 'lib/elftools/segments/load_segment.rb', line 20 def size header.p_filesz.to_i end |
#vma_in?(vma, size = 0) ⇒ Boolean
Query if the given virtual memory address located in this segment.
77 78 79 80 |
# 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) ⇒ Integer
Convert virtual memory address into file offset.
86 87 88 |
# File 'lib/elftools/segments/load_segment.rb', line 86 def vma_to_offset(vma) vma - header.p_vaddr + header.p_offset end |