Parent

Class/Module Index [+]

Quicksearch

Rex::PeParsey::Section

Attributes

_isource[RW]
_section_header[RW]
base_rva[RW]

Public Class Methods

new(isource, base_rva, section_header = nil) click to toggle source

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.
# File lib/rex/peparsey/section.rb, line 22
def initialize(isource, base_rva, section_header = nil)
        self._isource        = isource
        self.base_rva        = base_rva
        self._section_header = section_header
end

Public Instance Methods

_check_offset(offset, len = 1) click to toggle source
# File lib/rex/peparsey/section.rb, line 62
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) click to toggle source
# File lib/rex/peparsey/section.rb, line 125
def contains_file_offset?(foffset)
        contains_offset?(foffset - file_offset)
end
contains_offset?(offset) click to toggle source
# File lib/rex/peparsey/section.rb, line 121
def contains_offset?(offset)
        offset >= 0 && offset < size
end
contains_rva?(rva) click to toggle source
# File lib/rex/peparsey/section.rb, line 129
def contains_rva?(rva)
        contains_offset?(rva - base_rva)
end
file_offset() click to toggle source
# File lib/rex/peparsey/section.rb, line 28
def file_offset
        _isource.file_offset
end
file_offset_to_rva(foffset) click to toggle source
# File lib/rex/peparsey/section.rb, line 98
def file_offset_to_rva(foffset)
        return offset_to_rva(foffset - file_offset)
end
flags() click to toggle source
# File lib/rex/peparsey/section.rb, line 44
def flags
        # a section header is not required
        return nil if !_section_header
        _section_header.v['Characteristics']
end
index(*args) click to toggle source
# File lib/rex/peparsey/section.rb, line 86
def index(*args)
        _isource.index(*args)
end
name() click to toggle source
# File lib/rex/peparsey/section.rb, line 36
def name
        # a section header is not required
        return nil if !_section_header

        # FIXME make this better...
        _section_header.v['Name'].gsub(/\x00+$/, '')
end
offset_to_rva(offset) click to toggle source
# File lib/rex/peparsey/section.rb, line 90
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() click to toggle source
# File lib/rex/peparsey/section.rb, line 56
def raw_size
        # a section header is not required
        return nil if !_section_header
        _section_header.v['SizeOfRawData']
end
read(offset, len) click to toggle source
# File lib/rex/peparsey/section.rb, line 68
def read(offset, len)
        _check_offset(offset, len)
        return _isource.read(offset, len)
end
read_asciiz(offset) click to toggle source
# File lib/rex/peparsey/section.rb, line 77
def read_asciiz(offset)
        _check_offset(offset)
        return _isource.read_asciiz(offset)
end
read_asciiz_rva(rva) click to toggle source
# File lib/rex/peparsey/section.rb, line 82
def read_asciiz_rva(rva)
        return read_asciiz(rva_to_offset(rva))
end
read_rva(rva, len) click to toggle source
# File lib/rex/peparsey/section.rb, line 73
def read_rva(rva, len)
        return read(rva_to_offset(rva), len)
end
rva_to_file_offset(rva) click to toggle source
# File lib/rex/peparsey/section.rb, line 117
def rva_to_file_offset(rva)
        return rva_to_offset(rva) + file_offset
end
rva_to_offset(rva) click to toggle source
if offset < 0 || offset < file_offset || offset >= file_offset+size
        raise BoundsError, "File offset #{offset} outside of section", caller
end

return (offset - file_offset) + base_rva

end

# File lib/rex/peparsey/section.rb, line 108
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() click to toggle source
# File lib/rex/peparsey/section.rb, line 32
def size
        _isource.size
end
vma() click to toggle source
# File lib/rex/peparsey/section.rb, line 50
def vma
        # a section header is not required
        return nil if !_section_header
        _section_header.v['VirtualAddress']
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.