Sha256: 4563b17bb23e667ab491ef085b2b57f37988fa0b06d6e6f6025efe69c3c3e39a

Contents?: true

Size: 1.18 KB

Versions: 25

Compression:

Stored size: 1.18 KB

Contents

# -*- coding: binary -*-

require 'rex/image_source/image_source'
require 'rex/struct2'

module Rex
module ImageSource
class Disk < ImageSource

  attr_accessor :file, :file_offset, :size

  WINDOW_SIZE     = 4096
  WINDOW_OVERLAP  = 64

  def initialize(_file, _offset = 0, _len = nil)
    _len = _file.stat.size if !_len

    self.file         = _file
    self.file_offset  = _offset
    self.size         = _len
  end

  def read(offset, len)
    if offset < 0 || offset+len > size
      raise RangeError, "Offset #{offset} outside of image source", caller
    end

    file.seek(file_offset + offset)
    file.read(len)
  end

  def index(search, offset = 0)
    # do a sliding window search across the disk
    while offset < size

      # get a full window size if we can, we
      # don't want to read past our boundaries
      wsize = size - offset
      wsize = WINDOW_SIZE if wsize > WINDOW_SIZE

      window = self.read(offset, wsize)
      res = window.index(search)
      return res + offset if res
      offset += WINDOW_SIZE - WINDOW_OVERLAP
    end
  end

  def subsource(offset, len)
    self.class.new(file, file_offset+offset, len)
  end

  def close
    file.close
  end
end

end
end

Version data entries

25 entries across 25 versions & 4 rubygems

Version Path
rex-bin_tools-0.1.9 lib/rex/image_source/disk.rb
rex-bin_tools-0.1.8 lib/rex/image_source/disk.rb
rex-bin_tools-0.1.7 lib/rex/image_source/disk.rb
rex-2.0.13 lib/rex/image_source/disk.rb
rex-bin_tools-0.1.6 lib/rex/image_source/disk.rb
rex-bin_tools-0.1.5 lib/rex/image_source/disk.rb
rex-2.0.12 lib/rex/image_source/disk.rb
rex-bin_tools-0.1.4 lib/rex/image_source/disk.rb
rex-2.0.11 lib/rex/image_source/disk.rb
rex-bin_tools-0.1.3 lib/rex/image_source/disk.rb
rex-bin_tools-0.1.2 lib/rex/image_source/disk.rb
rex-bin_tools-0.1.1 lib/rex/image_source/disk.rb
rex-bin_tools-0.1.0 lib/rex/image_source/disk.rb
rex-2.0.10 lib/rex/image_source/disk.rb
rex-2.0.9 lib/rex/image_source/disk.rb
rex-2.0.8 lib/rex/image_source/disk.rb
rex-2.0.7 lib/rex/image_source/disk.rb
rex-2.0.5 lib/rex/image_source/disk.rb
rex-2.0.4 lib/rex/image_source/disk.rb
dstruct-0.0.1 lib/rex/image_source/disk.rb