Beispiel #1
0
 def MakeLibrary(self, ctx):
     vectors = ctx.cpu.r_reg(REG_A0)
     struct = ctx.cpu.r_reg(REG_A1)
     init = ctx.cpu.r_reg(REG_A2)
     dsize = ctx.cpu.r_reg(REG_D0)
     seglist = ctx.cpu.r_reg(REG_D1)
     ml = MakeLib(ctx.machine, ctx.alloc)
     lib_base, mobj = ml.make_library(vectors, struct, init, dsize, seglist)
     log_exec.info("MakeLibrary: vectors=%06x, struct=%06x, init=%06x, " \
                   "dsize=%06x seglist=%06x -> lib_base=%06x, mobj=%s",
                   vectors, struct, init, dsize, seglist, lib_base, mobj)
     return lib_base
Beispiel #2
0
 def MakeLibrary(self, ctx):
   vectors = ctx.cpu.r_reg(REG_A0)
   struct = ctx.cpu.r_reg(REG_A1)
   init = ctx.cpu.r_reg(REG_A2)
   dsize = ctx.cpu.r_reg(REG_D0)
   seglist = ctx.cpu.r_reg(REG_D1)
   ml = MakeLib(ctx.machine, ctx.alloc)
   lib_base, mobj = ml.make_library(vectors, struct, init, dsize, seglist)
   log_exec.info("MakeLibrary: vectors=%06x, struct=%06x, init=%06x, " \
                 "dsize=%06x seglist=%06x -> lib_base=%06x, mobj=%s",
                 vectors, struct, init, dsize, seglist, lib_base, mobj)
   return lib_base
Beispiel #3
0
def libnative_makelib_test():
    machine = Machine()
    mem = machine.get_mem()
    sp = machine.get_ram_begin() - 4
    alloc = MemoryAlloc.for_machine(machine)

    # build lib info in memory
    vectors = 0x100
    mem.w32(vectors, 0x400)
    mem.w32(vectors + 4, 0x600)
    mem.w32(vectors + 8, 0x800)
    mem.w32(vectors + 12, 0xFFFFFFFF)
    name_addr = 0x1F0
    mem.w_cstr(name_addr, "bla.library")

    init_tab = 0x200
    ib = InitStructBuilder(mem, init_tab)
    name_off = LibraryStruct.get_field_offset_for_path("lib_Node.ln_Name")
    ib.init_long(name_off, name_addr)
    ib.end()

    init_func = 0x300
    mem.w16(init_func, op_rts)

    pos_size = LibraryStruct.get_size()

    # make library
    ml = MakeLib(machine, alloc)
    lib_base, mem_obj = ml.make_library(vectors,
                                        init_tab,
                                        init_func,
                                        pos_size,
                                        0,
                                        run_sp=sp)
    assert lib_base != 0

    # check library
    lib = Library(mem, lib_base)
    assert lib.get_name() == "bla.library"
    assert lib.get_pos_size() == 36
    assert lib.get_neg_size() == 20  # round_long(3*6)
    assert mem.r32(lib_base - 4) == 0x400
    assert mem.r32(lib_base - 10) == 0x600
    assert mem.r32(lib_base - 16) == 0x800

    # cleanup
    alloc.free_memory(mem_obj)
    assert alloc.is_all_free()
def libnative_makelib_test():
  machine = Machine()
  mem = machine.get_mem()
  sp = machine.get_ram_begin() - 4
  alloc = MemoryAlloc.for_machine(machine)

  # build lib info in memory
  vectors = 0x100
  mem.w32(vectors, 0x400)
  mem.w32(vectors+4, 0x600)
  mem.w32(vectors+8, 0x800)
  mem.w32(vectors+12, 0xffffffff)
  name_addr = 0x1f0
  mem.w_cstr(name_addr, "bla.library")

  init_tab = 0x200
  ib = InitStructBuilder(mem, init_tab)
  name_off = LibraryStruct.get_field_offset_for_path("lib_Node.ln_Name")
  ib.init_long(name_off, name_addr)
  ib.end()

  init_func = 0x300
  mem.w16(init_func, op_rts)

  pos_size = LibraryStruct.get_size()

  # make library
  ml = MakeLib(machine, alloc)
  lib_base, mem_obj = ml.make_library(
      vectors, init_tab, init_func, pos_size, 0,
      run_sp=sp)
  assert lib_base != 0

  # check library
  lib = Library(mem, lib_base)
  assert lib.get_name() == "bla.library"
  assert lib.get_pos_size() == 36
  assert lib.get_neg_size() == 20 # round_long(3*6)
  assert mem.r32(lib_base - 4) == 0x400
  assert mem.r32(lib_base - 10) == 0x600
  assert mem.r32(lib_base - 16) == 0x800

  # cleanup
  alloc.free_memory(mem_obj)
  assert alloc.is_all_free()