Class: Rex::PeParsey::Section
- Inherits:
-
Object
- Object
- Rex::PeParsey::Section
- Defined in:
- lib/rex/peparsey/section.rb
Instance Attribute Summary collapse
-
#_isource ⇒ Object
Returns the value of attribute _isource.
-
#_section_header ⇒ Object
Returns the value of attribute _section_header.
-
#base_rva ⇒ Object
Returns the value of attribute base_rva.
Instance Method Summary collapse
- #_check_offset(offset, len = 1) ⇒ Object
- #contains_file_offset?(foffset) ⇒ Boolean
- #contains_offset?(offset) ⇒ Boolean
- #contains_rva?(rva) ⇒ Boolean
- #file_offset ⇒ Object
- #file_offset_to_rva(foffset) ⇒ Object
- #flags ⇒ Object
- #index(*args) ⇒ Object
-
#initialize(isource, base_rva, section_header = nil) ⇒ Section
constructor
Initialize a section.
- #name ⇒ Object
- #offset_to_rva(offset) ⇒ Object
- #raw_size ⇒ Object
- #read(offset, len) ⇒ Object
- #read_asciiz(offset) ⇒ Object
- #read_asciiz_rva(rva) ⇒ Object
- #read_rva(rva, len) ⇒ Object
- #rva_to_file_offset(rva) ⇒ Object
- #rva_to_offset(rva) ⇒ Object
- #size ⇒ Object
- #vma ⇒ Object
Constructor Details
#initialize(isource, base_rva, section_header = nil) ⇒ Section
Initialize a section.
isource - The ImageSource class backing the image
base_vma - The address of this section base
section_header - The section header (struct2) although this is not
required, which is why there is a base_vma. This can be nil.
21 22 23 24 25 |
# File 'lib/rex/peparsey/section.rb', line 21 def initialize(isource, base_rva, section_header = nil) self._isource = isource self.base_rva = base_rva self._section_header = section_header end |
Instance Attribute Details
#_isource ⇒ Object
Returns the value of attribute _isource.
10 11 12 |
# File 'lib/rex/peparsey/section.rb', line 10 def _isource @_isource end |
#_section_header ⇒ Object
Returns the value of attribute _section_header.
10 11 12 |
# File 'lib/rex/peparsey/section.rb', line 10 def _section_header @_section_header end |
#base_rva ⇒ Object
Returns the value of attribute base_rva.
11 12 13 |
# File 'lib/rex/peparsey/section.rb', line 11 def base_rva @base_rva end |
Instance Method Details
#_check_offset(offset, len = 1) ⇒ Object
61 62 63 64 65 |
# File 'lib/rex/peparsey/section.rb', line 61 def _check_offset(offset, len = 1) if offset < 0 || offset+len > size raise BoundsError, "Offset #{offset} outside of section", caller end end |
#contains_file_offset?(foffset) ⇒ Boolean
118 119 120 |
# File 'lib/rex/peparsey/section.rb', line 118 def contains_file_offset?(foffset) contains_offset?(foffset - file_offset) end |
#contains_offset?(offset) ⇒ Boolean
114 115 116 |
# File 'lib/rex/peparsey/section.rb', line 114 def contains_offset?(offset) offset >= 0 && offset < size end |
#contains_rva?(rva) ⇒ Boolean
122 123 124 |
# File 'lib/rex/peparsey/section.rb', line 122 def contains_rva?(rva) contains_offset?(rva - base_rva) end |
#file_offset ⇒ Object
27 28 29 |
# File 'lib/rex/peparsey/section.rb', line 27 def file_offset _isource.file_offset end |
#file_offset_to_rva(foffset) ⇒ Object
97 98 99 |
# File 'lib/rex/peparsey/section.rb', line 97 def file_offset_to_rva(foffset) return offset_to_rva(foffset - file_offset) end |
#flags ⇒ Object
43 44 45 46 47 |
# File 'lib/rex/peparsey/section.rb', line 43 def flags # a section header is not required return nil if !_section_header _section_header.v['Characteristics'] end |
#index(*args) ⇒ Object
85 86 87 |
# File 'lib/rex/peparsey/section.rb', line 85 def index(*args) _isource.index(*args) end |
#name ⇒ Object
35 36 37 38 39 40 41 |
# File 'lib/rex/peparsey/section.rb', line 35 def name # a section header is not required return nil if !_section_header # FIXME make this better... _section_header.v['Name'].gsub(/\x00+$/n, '') end |
#offset_to_rva(offset) ⇒ Object
89 90 91 92 93 94 95 |
# File 'lib/rex/peparsey/section.rb', line 89 def offset_to_rva(offset) if !contains_offset?(offset) raise BoundsError, "Offset #{offset} outside of section", caller end return offset + base_rva end |
#raw_size ⇒ Object
55 56 57 58 59 |
# File 'lib/rex/peparsey/section.rb', line 55 def raw_size # a section header is not required return nil if !_section_header _section_header.v['SizeOfRawData'] end |
#read(offset, len) ⇒ Object
67 68 69 70 |
# File 'lib/rex/peparsey/section.rb', line 67 def read(offset, len) _check_offset(offset, len) return _isource.read(offset, len) end |
#read_asciiz(offset) ⇒ Object
76 77 78 79 |
# File 'lib/rex/peparsey/section.rb', line 76 def read_asciiz(offset) _check_offset(offset) return _isource.read_asciiz(offset) end |
#read_asciiz_rva(rva) ⇒ Object
81 82 83 |
# File 'lib/rex/peparsey/section.rb', line 81 def read_asciiz_rva(rva) return read_asciiz(rva_to_offset(rva)) end |
#read_rva(rva, len) ⇒ Object
72 73 74 |
# File 'lib/rex/peparsey/section.rb', line 72 def read_rva(rva, len) return read(rva_to_offset(rva), len) end |
#rva_to_file_offset(rva) ⇒ Object
110 111 112 |
# File 'lib/rex/peparsey/section.rb', line 110 def rva_to_file_offset(rva) return rva_to_offset(rva) + file_offset end |
#rva_to_offset(rva) ⇒ Object
101 102 103 104 105 106 107 108 |
# File 'lib/rex/peparsey/section.rb', line 101 def rva_to_offset(rva) offset = rva - base_rva if !contains_offset?(offset) raise BoundsError, "RVA #{rva} outside of section", caller end return offset end |
#size ⇒ Object
31 32 33 |
# File 'lib/rex/peparsey/section.rb', line 31 def size _isource.size end |
#vma ⇒ Object
49 50 51 52 53 |
# File 'lib/rex/peparsey/section.rb', line 49 def vma # a section header is not required return nil if !_section_header _section_header.v['VirtualAddress'] end |