Class: Rex::MachParsey::Fat
- Defined in:
- lib/rex/machparsey/mach.rb
Instance Attribute Summary collapse
-
#fat_archs ⇒ Object
Returns the value of attribute fat_archs.
-
#fat_header ⇒ Object
Returns the value of attribute fat_header.
-
#isource ⇒ Object
Returns the value of attribute isource.
-
#machos ⇒ Object
Returns the value of attribute machos.
Class Method Summary collapse
Instance Method Summary collapse
-
#_parse_fat_header(isource, offset) ⇒ Object
this is useful for debugging but we don’t use it for anything.
- #close ⇒ Object
- #index(*args) ⇒ Object
-
#initialize(isource, offset = 0) ⇒ Fat
constructor
A new instance of Fat.
- #ptr_32? ⇒ Boolean
- #ptr_64? ⇒ Boolean
- #ptr_s(vaddr) ⇒ Object
- #read(offset, len) ⇒ Object
Constructor Details
#initialize(isource, offset = 0) ⇒ Fat
Returns a new instance of Fat.
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/rex/machparsey/mach.rb', line 107 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 |
Instance Attribute Details
#fat_archs ⇒ Object
Returns the value of attribute fat_archs.
105 106 107 |
# File 'lib/rex/machparsey/mach.rb', line 105 def fat_archs @fat_archs end |
#fat_header ⇒ Object
Returns the value of attribute fat_header.
105 106 107 |
# File 'lib/rex/machparsey/mach.rb', line 105 def fat_header @fat_header end |
#isource ⇒ Object
Returns the value of attribute isource.
105 106 107 |
# File 'lib/rex/machparsey/mach.rb', line 105 def isource @isource end |
#machos ⇒ Object
Returns the value of attribute machos.
105 106 107 |
# File 'lib/rex/machparsey/mach.rb', line 105 def machos @machos end |
Class Method Details
.new_from_file(filename, disk_backed = false) ⇒ Object
163 164 165 166 167 168 169 170 171 172 173 174 |
# File 'lib/rex/machparsey/mach.rb', line 163 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) ⇒ Object
177 178 179 |
# File 'lib/rex/machparsey/mach.rb', line 177 def self.new_from_string(data) return self.new(ImageSource::Memory.new(data)) end |
Instance Method Details
#_parse_fat_header(isource, offset) ⇒ Object
this is useful for debugging but we don’t use it for anything.
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'lib/rex/machparsey/mach.rb', line 132 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 ⇒ Object
201 202 203 |
# File 'lib/rex/machparsey/mach.rb', line 201 def close isource.close end |
#index(*args) ⇒ Object
197 198 199 |
# File 'lib/rex/machparsey/mach.rb', line 197 def index(*args) isource.index(*args) end |
#ptr_32? ⇒ Boolean
185 186 187 |
# File 'lib/rex/machparsey/mach.rb', line 185 def ptr_32? ptr_64? == false end |
#ptr_64? ⇒ Boolean
181 182 183 |
# File 'lib/rex/machparsey/mach.rb', line 181 def ptr_64? mach_header.bits == BITS_64 end |
#ptr_s(vaddr) ⇒ Object
189 190 191 |
# File 'lib/rex/machparsey/mach.rb', line 189 def ptr_s(vaddr) (ptr_32?) ? ("0x%.8x" % vaddr) : ("0x%.16x" % vaddr) end |
#read(offset, len) ⇒ Object
193 194 195 |
# File 'lib/rex/machparsey/mach.rb', line 193 def read(offset, len) isource.read(offset, len) end |