Class/Module Index [+]

Quicksearch

Rex::MachParsey::Fat

Attributes

fat_archs[RW]
fat_header[RW]
isource[RW]
machos[RW]

Public Class Methods

new(isource, offset = 0) click to toggle source
# File lib/rex/machparsey/mach.rb, line 106
def initialize(isource, offset = 0)
        self.fat_archs = []
        self.machos = []
        self.isource = isource
        self.fat_header = FatHeader.new(isource.read(offset, FAT_HEADER_SIZE))

        if !self.fat_header
                raise FatHeaderError, "Could not parse FAT header"
        end

        print "Detected " +  self.fat_header.nfat_arch.to_s +  " archs in binary.\n"

        offset += FAT_HEADER_SIZE

        self.fat_header.nfat_arch.times do
                fat_arch = FatArch.new(isource.read(offset, FAT_ARCH_SIZE), self.fat_header.endian)
                self.fat_archs << fat_arch
                self.machos << Mach.new(isource, fat_arch.offset, true)
                offset += FAT_ARCH_SIZE
        end


end
new_from_file(filename, disk_backed = false) click to toggle source
# File lib/rex/machparsey/mach.rb, line 162
def self.new_from_file(filename, disk_backed = false)

        file = ::File.open(filename, "rb")

        if disk_backed
                return self.new(ImageSource::Disk.new(file))
        else
                obj = new_from_string(file.read)
                file.close
                return obj
        end
end
new_from_string(data) click to toggle source
# File lib/rex/machparsey/mach.rb, line 176
def self.new_from_string(data)
        return self.new(ImageSource::Memory.new(data))
end

Public Instance Methods

_parse_fat_header(isource, offset) click to toggle source

this is useful for debugging but we don't use it for anything.

# File lib/rex/machparsey/mach.rb, line 131
def _parse_fat_header(isource, offset)
        archs = []
        nfat_arch = self.fat_header.nfat_arch

        print "Number of archs in binary: " + nfat_arch.to_s + "\n"

        nfat_arch.times do
                arch = FatArch.new(isource.read(offset, FAT_ARCH_SIZE), self.endian)

                case arch.cpu_type

                when CPU_TYPE_I386
                        print "i386\n"

                when CPU_TYPE_X86_64
                        print "x86_64\n"

                when CPU_TYPE_ARM
                        print "Arm\n"

                when CPU_TYPE_POWERPC
                        print "Power PC\n"

                when CPU_TYPE_POWERPC64
                        print "Power PC 64\n"
                end

                offset += FAT_ARCH_SIZE
        end
end
close() click to toggle source
# File lib/rex/machparsey/mach.rb, line 200
def close
        isource.close
end
index(*args) click to toggle source
# File lib/rex/machparsey/mach.rb, line 196
def index(*args)
        isource.index(*args)
end
ptr_32?() click to toggle source
# File lib/rex/machparsey/mach.rb, line 184
def ptr_32?
        ptr_64? == false
end
ptr_64?() click to toggle source
# File lib/rex/machparsey/mach.rb, line 180
def ptr_64?
        mach_header.bits == BITS_64
end
ptr_s(vaddr) click to toggle source
# File lib/rex/machparsey/mach.rb, line 188
def ptr_s(vaddr)
        (ptr_32?) ? ("0x%.8x" % vaddr) : ("0x%.16x" % vaddr)
end
read(offset, len) click to toggle source
# File lib/rex/machparsey/mach.rb, line 192
def read(offset, len)
        isource.read(offset, len)
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.