def parse(self, data, vm=None): # Parse signature if not data.startswith('\x7fELF'): raise ContainerSignatureException() # Build executable instance try: if vm is not None: self._executable = vm_load_elf(vm, filename) else: self._executable = elf_init.ELF(data) except Exception, error: raise ContainerParsingException('Cannot read ELF: %s' % error)
def __init__(self, custom_methods, *args, **kwargs): super(OS_Linux, self).__init__(custom_methods, *args, **kwargs) # Import manager libs = libimp() self.libs = libs elf = vm_load_elf(self.jitter.vm, self.fname) self.elf = elf preload_elf(self.jitter.vm, elf, libs) # Library calls handler self.jitter.add_lib_handler(libs, custom_methods)
def __init__(self, filename, vm = None, addr = None): data = open(filename).read() log.info('load binary') e, bs, ep = None, None, None if data.startswith('MZ'): try: if vm is not None: e = vm_load_pe(vm, filename) else: e = pe_init.PE(data) if e.isPE() and e.NTsig.signature_value == 0x4550: bs = bin_stream_pe(e.virt) ep = e.rva2virt(e.Opthdr.AddressOfEntryPoint) except: log.error('Cannot read PE!') elif data.startswith('\x7fELF'): try: if vm is not None: e = vm_load_elf(vm, filename) else: e = elf_init.ELF(data) bs = bin_stream_elf(e.virt) ep = e.Ehdr.entry except: log.error('Cannot read ELF!') else: bs = bin_stream_str(data) if vm is not None: if addr is None: raise ValueError('set load addr') vm.add_memory_page(addr, PAGE_READ, data) self.e, self.bs, self.ep = e, bs, ep