Admin Panel
from amitools.vamos.machine import MockMemory
from amitools.vamos.libnative import MakeFuncs
from amitools.vamos.machine.opcodes import op_jmp
def make_functions_offset_test():
mem = MockMemory()
# build an offset array
ptr = 0
offsets = [-10, 2, 16, 32, 68, 100]
for off in offsets:
mem.w16s(ptr, off)
ptr += 2
mem.w16s(ptr, -1)
# build func table
disp_base = 0x1000
lib_base = 0x800
mf = MakeFuncs(mem)
size = mf.make_functions(lib_base, 0, disp_base)
assert size == len(offsets) * 6
# check jump table
ptr = lib_base - 6
for off in offsets:
addr = disp_base + off
assert mem.r16(ptr) == op_jmp
assert mem.r32(ptr+2) == addr
ptr -= 6
def make_functions_ptr_test():
mem = MockMemory()
# build an offset array
ptr = 0
fptrs = [0x100, 0x202, 0x404, 0x808, 0x10000]
for fptr in fptrs:
mem.w32(ptr, fptr)
ptr += 4
mem.w32s(ptr, -1)
# build func table
lib_base = 0x800
mf = MakeFuncs(mem)
size = mf.make_functions(lib_base, 0)
assert size == len(fptrs) * 6
# check jump table
ptr = lib_base - 6
for fptr in fptrs:
assert mem.r16(ptr) == op_jmp
assert mem.r32(ptr+2) == fptr
ptr -= 6