def libnative_libfuncs_add_library_test(): machine = Machine() mem = machine.get_mem() alloc = MemoryAlloc.for_machine(machine) # setup exec lib exec_lib = ExecLibrary.alloc(alloc, "exec.library", "bla", 36) exec_lib.setup() mem.w32(4, exec_lib.get_addr()) # new lib lib = Library.alloc(alloc, "my.library", "bla", 36) lib.setup() mem.w32(lib.get_addr()-36, 0xdeadbeef) # check lib sum assert lib.sum == 0 # add lib lf = LibFuncs(machine, alloc) lf.add_library(lib.get_addr()) # check that lib was added assert len(exec_lib.lib_list) == 1 assert [a for a in exec_lib.lib_list] == [lib] assert lib.sum == 0xdeadbeef assert lf.find_library("my.library") == lib.get_addr() # cleanup lib.free() exec_lib.free() assert alloc.is_all_free()
def libnative_libfuncs_add_library_test(): machine = Machine() mem = machine.get_mem() alloc = MemoryAlloc.for_machine(machine) # setup exec lib exec_lib = ExecLibrary.alloc(alloc, "exec.library", "bla", 36) exec_lib.setup() mem.w32(4, exec_lib.get_addr()) # new lib lib = Library.alloc(alloc, "my.library", "bla", 36) lib.setup() mem.w32(lib.get_addr() - 36, 0xDEADBEEF) # check lib sum assert lib.sum == 0 # add lib lf = LibFuncs(machine, alloc) lf.add_library(lib.get_addr()) # check that lib was added assert len(exec_lib.lib_list) == 1 assert [a for a in exec_lib.lib_list] == [lib] assert lib.sum == 0xDEADBEEF assert lf.find_library("my.library") == lib.get_addr() # cleanup lib.free() exec_lib.free() assert alloc.is_all_free()
def atypes_execlib_alloc_test(): mem = MockMemory() alloc = MemoryAlloc(mem) el = ExecLibrary.alloc(alloc, "exec.library", "bla", 20) el.setup() el.fill_funcs() el.free() assert alloc.is_all_free()
def add_library(self, lib_base, exec_lib=None): lib = Library(self.mem, lib_base) lib.node.type = NodeType.NT_LIBRARY self.sum_library(lib_base) if exec_lib is None: exec_addr = self.mem.r32(4) exec_lib = ExecLibrary(self.mem, exec_addr) exec_lib.lib_list.enqueue(lib.node)
def find_library(self, lib_name, exec_lib=None): """find lib by name and return base addr or 0""" if exec_lib is None: exec_addr = self.mem.r32(4) exec_lib = ExecLibrary(self.mem, exec_addr) node = exec_lib.lib_list.find_name(lib_name) if node: return node.get_addr() else: return 0
def setup(): machine = Machine() mem = machine.get_mem() alloc = MemoryAlloc.for_machine(machine) sp = machine.get_ram_begin() - 4 # setup exec exec_lib = ExecLibrary.alloc(alloc, "exec.library", "bla", 520*6) exec_lib.setup() exec_lib.fill_funcs() exec_base = exec_lib.get_addr() mem.w32(4, exec_base) machine.set_zero_mem(0, exec_base) return machine, alloc, sp, mem, exec_lib
def setup(): machine = Machine() mem = machine.get_mem() alloc = MemoryAlloc.for_machine(machine) sp = machine.get_ram_begin() - 4 # setup exec exec_lib = ExecLibrary.alloc(alloc, "exec.library", "bla", 520 * 6) exec_lib.setup() exec_lib.fill_funcs() exec_base = exec_lib.get_addr() mem.w32(4, exec_base) machine.set_zero_mem(0, exec_base) return machine, alloc, sp, mem, exec_lib
def libnative_initres_autoinit_test(buildlibnix): machine = Machine() mem = machine.get_mem() cpu = machine.get_cpu() traps = machine.get_traps() alloc = MemoryAlloc.for_machine(machine) init_addr = machine.get_ram_begin() - 4 sp = init_addr - 4 # load lib seglist, addr, size, end = load_lib(alloc, buildlibnix) # setup init func def init_func(op, pc): assert cpu.r_reg(REG_A0) == seglist.get_baddr() trap_id = traps.setup(init_func, auto_rts=True) mem.w16(init_addr, trap_id | 0xA000) # fake vectors vectors = 0x100 mem.w32(vectors, 0x400) mem.w32(vectors + 4, 0x600) mem.w32(vectors + 8, 0x800) mem.w32(vectors + 12, 0xFFFFFFFF) # build fake resident res = Resident.alloc(alloc, "bla.library", "blub") res.setup(flags=ResidentFlags.RTF_AUTOINIT, version=42, type=NodeType.NT_LIBRARY, pri=-7) auto_init = AutoInit.alloc(alloc) auto_init.setup(functions=vectors, init_func=init_addr) res.set_auto_init(auto_init) # setup exec lib exec_lib = ExecLibrary.alloc(alloc, "exec.library", "bla", 36) exec_lib.setup() mem.w32(4, exec_lib.get_addr()) # init resident ir = InitRes(machine, alloc) lib_base, mem_obj = ir.init_resident(res.get_addr(), seglist.get_baddr(), run_sp=sp, exec_lib=exec_lib) assert lib_base assert mem_obj seglist.free() res.free() auto_init.free() alloc.free_memory(mem_obj) exec_lib.free() traps.free(trap_id) assert alloc.is_all_free()
def setup(path_mgr=None): machine = Machine() mem = machine.get_mem() alloc = MemoryAlloc.for_machine(machine) segload = SegmentLoader(alloc, path_mgr=path_mgr) loader = LibLoader(machine, alloc, segload) sp = machine.get_ram_begin() - 4 # setup exec exec_lib = ExecLibrary.alloc(alloc, "exec.library", "bla", 520*6) exec_lib.setup() exec_lib.fill_funcs() exec_base = exec_lib.get_addr() mem.w32(4, exec_base) machine.set_zero_mem(0, exec_base) return loader, segload, alloc, mem, sp, exec_lib
def setup(path_mgr=None): machine = Machine() mem = machine.get_mem() alloc = MemoryAlloc.for_machine(machine) segload = SegmentLoader(alloc, path_mgr=path_mgr) loader = LibLoader(machine, alloc, segload) sp = machine.get_ram_begin() - 4 # setup exec exec_lib = ExecLibrary.alloc(alloc, "exec.library", "bla", 520 * 6) exec_lib.setup() exec_lib.fill_funcs() exec_base = exec_lib.get_addr() mem.w32(4, exec_base) machine.set_zero_mem(0, exec_base) return loader, segload, alloc, mem, sp, exec_lib
def libnative_initres_autoinit_test(buildlibnix): machine = Machine() mem = machine.get_mem() cpu = machine.get_cpu() traps = machine.get_traps() alloc = MemoryAlloc.for_machine(machine) init_addr = machine.get_ram_begin() - 4 sp = init_addr - 4 # load lib seglist, addr, size, end = load_lib(alloc, buildlibnix) # setup init func def init_func(op, pc): assert cpu.r_reg(REG_A0) == seglist.get_baddr() trap_id = traps.setup(init_func, auto_rts=True) mem.w16(init_addr, trap_id | 0xa000) # fake vectors vectors = 0x100 mem.w32(vectors, 0x400) mem.w32(vectors+4, 0x600) mem.w32(vectors+8, 0x800) mem.w32(vectors+12, 0xffffffff) # build fake resident res = Resident.alloc(alloc, "bla.library", "blub") res.setup(flags=ResidentFlags.RTF_AUTOINIT, version=42, type=NodeType.NT_LIBRARY, pri=-7) auto_init = AutoInit.alloc(alloc) auto_init.setup(functions=vectors, init_func=init_addr) res.set_auto_init(auto_init) # setup exec lib exec_lib = ExecLibrary.alloc(alloc, "exec.library", "bla", 36) exec_lib.setup() mem.w32(4, exec_lib.get_addr()) # init resident ir = InitRes(machine, alloc) lib_base, mem_obj = ir.init_resident( res.get_addr(), seglist.get_baddr(), run_sp=sp, exec_lib=exec_lib) assert lib_base assert mem_obj seglist.free() res.free() auto_init.free() alloc.free_memory(mem_obj) exec_lib.free() traps.free(trap_id) assert alloc.is_all_free()
def bootstrap_exec(self, exec_info=None, version=0, revision=0): """setup exec library""" if exec_info is None: date = datetime.date(day=7, month=7, year=2007) exec_info = LibInfo('exec.library', version, revision, date) # make sure its an exec info assert exec_info.get_name() == 'exec.library' # create vlib vlib = self._create_vlib(exec_info, False) assert vlib assert vlib.impl # setup exec_lib lib_base = vlib.get_library().get_addr() self.exec_lib = ExecLibrary(self.mem, lib_base) # store lib base self.machine.set_zero_mem(0, lib_base) # with exec_lib in place we can add exec's vlib self._add_vlib(vlib) # inc exec's open cnt so lib gets never expunged self.exec_lib.lib_node.inc_open_cnt() return vlib
def atypes_execlib_base_test(): mem = MockMemory() el = ExecLibrary(mem, 0x100) el.setup() el.fill_funcs()