diff options
Diffstat (limited to 'miasm2/jitter/loader')
| -rw-r--r-- | miasm2/jitter/loader/elf.py | 6 | ||||
| -rw-r--r-- | miasm2/jitter/loader/pe.py | 12 |
2 files changed, 11 insertions, 7 deletions
diff --git a/miasm2/jitter/loader/elf.py b/miasm2/jitter/loader/elf.py index 08df632a..db0f1cb7 100644 --- a/miasm2/jitter/loader/elf.py +++ b/miasm2/jitter/loader/elf.py @@ -47,7 +47,7 @@ def preload_elf(vm, e, runtime_lib, patch_vm_imp=True): return runtime_lib, dyn_funcs -def vm_load_elf(vm, fdata, **kargs): +def vm_load_elf(vm, fdata, name="", **kargs): """ Very dirty elf loader TODO XXX: implement real loader @@ -56,6 +56,7 @@ def vm_load_elf(vm, fdata, **kargs): e = elf_init.ELF(fdata, **kargs) i = interval() all_data = {} + for p in e.ph.phlist: if p.ph.type != elf_csts.PT_LOAD: continue @@ -72,7 +73,8 @@ def vm_load_elf(vm, fdata, **kargs): i += [(a_addr, b_addr - 2)] for a, b in i.intervals: # print hex(a), hex(b) - vm.add_memory_page(a, PAGE_READ | PAGE_WRITE, "\x00" * (b + 2 - a)) + vm.add_memory_page(a, PAGE_READ | PAGE_WRITE, "\x00" * (b + 2 - a), + repr(name)) for r_vaddr, data in all_data.items(): vm.set_mem(r_vaddr, data) diff --git a/miasm2/jitter/loader/pe.py b/miasm2/jitter/loader/pe.py index 1d33f9b8..2d80c8df 100644 --- a/miasm2/jitter/loader/pe.py +++ b/miasm2/jitter/loader/pe.py @@ -101,7 +101,7 @@ def get_export_name_addr_list(e): return out -def vm_load_pe(vm, fdata, align_s=True, load_hdr=True, **kargs): +def vm_load_pe(vm, fdata, align_s=True, load_hdr=True, name="", **kargs): """Load a PE in memory (@vm) from a data buffer @fdata @vm: VmMngr instance @fdata: data buffer to parse @@ -136,7 +136,7 @@ def vm_load_pe(vm, fdata, align_s=True, load_hdr=True, **kargs): pe_hdr = pe.content[:hdr_len] + max( 0, (min_len - hdr_len)) * "\x00" vm.add_memory_page(pe.NThdr.ImageBase, PAGE_READ | PAGE_WRITE, - pe_hdr) + pe_hdr, "%r: PE Header" % name) # Align sections size if align_s: @@ -160,7 +160,8 @@ def vm_load_pe(vm, fdata, align_s=True, load_hdr=True, **kargs): attrib = PAGE_READ if section.flags & 0x80000000: attrib |= PAGE_WRITE - vm.add_memory_page(pe.rva2virt(section.addr), attrib, data) + vm.add_memory_page(pe.rva2virt(section.addr), attrib, data, + "%r: %r" % (name, section.name)) return pe @@ -217,7 +218,7 @@ def vm_load_pe_lib(vm, fname_in, libs, lib_path_base, **kargs): fname = os.path.join(lib_path_base, fname_in) with open(fname) as fstream: - pe = vm_load_pe(vm, fstream.read(), **kargs) + pe = vm_load_pe(vm, fstream.read(), name=fname_in, **kargs) libs.add_export_lib(pe, fname_in) return pe @@ -484,7 +485,8 @@ def vm_load_pe_and_dependencies(vm, fname, name2module, runtime_lib, try: with open(fname) as fstream: log.info('Loading module name %r', fname) - pe_obj = vm_load_pe(vm, fstream.read(), **kwargs) + pe_obj = vm_load_pe( + vm, fstream.read(), name=fname, **kwargs) except IOError: log.error('Cannot open %s' % fname) name2module[name] = None |