class Rex::MachParsey::MachBase::MachHeader

Attributes

bits[RW]
endian[RW]

Public Class Methods

new(rawdata) click to toggle source
# File lib/rex/machparsey/machbase.rb, line 131
def initialize(rawdata)
  mach_header = MACH_HEADER_LSB.make_struct
  if !mach_header.from_s(rawdata)
    raise MachHeaderError, "Could't access Mach-O Magic", caller
  end

  if mach_header.v['magic'] == MH_MAGIC
    endian = ENDIAN_LSB
    bits = BITS_32
    mach_header = MACH_HEADER_LSB.make_struct
  elsif mach_header.v['magic'] == MH_CIGAM
    bits = BITS_32
    endian = ENDIAN_MSB
    mach_header = MACH_HEADER_MSB.make_struct
  elsif mach_header.v['magic'] == MH_MAGIC_64
    endian = ENDIAN_LSB
    bits = BITS_64
    mach_header = MACH_HEADER_LSB.make_struct
  elsif mach_header.v['magic'] == MH_CIGAM_64
    endian = ENDIAN_MSB
    bits = BITS_64
    mach_header = MACH_HEADER_MSB.make_struct
  else
    raise MachHeaderError, "Couldn't find Mach Magic", caller
  end

  if !mach_header.from_s(rawdata)
    raise MachHeaderError, "Could't process Mach-O Header", caller
  end

  self.struct = mach_header
  self.endian = endian
  self.bits = bits
end