Ejemplo n.º 1
0
def mem_cache_rwx_read_test():
  mem = MockMemory()
  # build main mem contents
  mem.w8(0x100, 42)
  assert mem.r8(0x100) == 42
  mem.w16(0x200, 0xdead)
  assert mem.r16(0x200) == 0xdead
  mem.w32(0x300, 0xcafebabe)
  assert mem.r32(0x300) == 0xcafebabe
  mem.write(0, 0x101, 43)
  assert mem.read(0, 0x101) == 43
  mem.write(1, 0x202, 0x1234)
  assert mem.read(1, 0x202) == 0x1234
  mem.write(2, 0x304, 0x11223344)
  assert mem.read(2, 0x304) == 0x11223344
  # write to cache
  cmem = MemoryCache(0x100, 0x210)
  cmem.read_cache(mem)
  # check cache mem
  assert cmem.r8(0x100) == 42
  assert cmem.r16(0x200) == 0xdead
  assert cmem.r32(0x300) == 0xcafebabe
  assert cmem.read(0, 0x101) == 43
  assert cmem.read(1, 0x202) == 0x1234
  assert cmem.read(2, 0x304) == 0x11223344
Ejemplo n.º 2
0
def mem_cache_rwx_read_test():
    mem = MockMemory()
    # build main mem contents
    mem.w8(0x100, 42)
    assert mem.r8(0x100) == 42
    mem.w16(0x200, 0xdead)
    assert mem.r16(0x200) == 0xdead
    mem.w32(0x300, 0xcafebabe)
    assert mem.r32(0x300) == 0xcafebabe
    mem.write(0, 0x101, 43)
    assert mem.read(0, 0x101) == 43
    mem.write(1, 0x202, 0x1234)
    assert mem.read(1, 0x202) == 0x1234
    mem.write(2, 0x304, 0x11223344)
    assert mem.read(2, 0x304) == 0x11223344
    # write to cache
    cmem = MemoryCache(0x100, 0x210)
    cmem.read_cache(mem)
    # check cache mem
    assert cmem.r8(0x100) == 42
    assert cmem.r16(0x200) == 0xdead
    assert cmem.r32(0x300) == 0xcafebabe
    assert cmem.read(0, 0x101) == 43
    assert cmem.read(1, 0x202) == 0x1234
    assert cmem.read(2, 0x304) == 0x11223344
Ejemplo n.º 3
0
def astructs_enum_inst_test():
    mem = MockMemory()
    mem.w32(4, 3)
    # instance
    me = MyEnum(mem=mem, addr=4)
    assert me.get() == MyEnum.a
    assert str(me) == "a"
    assert repr(me) == "MyEnum('a')"
    assert int(me) == MyEnum.a
    # change
    me.set(MyEnum.c)
    assert me.get() == MyEnum.c
    assert str(me) == "c"
    assert int(me) == MyEnum.c
    assert mem.r32(4) == MyEnum.c
    me.set("b")
    assert me.get() == MyEnum.b
    assert str(me) == "b"
    assert int(me) == MyEnum.b
    assert mem.r32(4) == MyEnum.b
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
def machine_mem_rw_test():
    mem = MockMemory()

    mem.w8(0x100, 42)
    assert mem.r8(0x100) == 42

    mem.w16(0x200, 0xDEAD)
    assert mem.r16(0x200) == 0xDEAD

    mem.w32(0x300, 0xCAFEBABE)
    assert mem.r32(0x300) == 0xCAFEBABE

    mem.write(0, 0x101, 43)
    assert mem.read(0, 0x101) == 43

    mem.write(1, 0x202, 0x1234)
    assert mem.read(1, 0x202) == 0x1234

    mem.write(2, 0x304, 0x11223344)
    assert mem.read(2, 0x304) == 0x11223344

    # invalid values
    with pytest.raises(ValueError):
        mem.w8(0x100, 0x100)
    with pytest.raises(ValueError):
        mem.w8(0x100, -1)
    # invalid values
    with pytest.raises(struct.error):
        mem.w16(0x100, 0x10000)
    with pytest.raises(struct.error):
        mem.w16(0x100, -2)
    # invalid values
    with pytest.raises(struct.error):
        mem.w32(0x100, 0x100000000)
    with pytest.raises(struct.error):
        mem.w32(0x100, -3)
    # invalid type
    with pytest.raises(TypeError):
        mem.w8(0x100, "hello")
    # invalid type
    with pytest.raises(struct.error):
        mem.w16(0x100, "hello")
    # invalid type
    with pytest.raises(struct.error):
        mem.w32(0x100, "hello")
    # invalid width
    with pytest.raises(ValueError):
        mem.write(7, 0x202, 12)
    with pytest.raises(ValueError):
        mem.read(7, 0x202)
Ejemplo n.º 6
0
def machine_mem_rw_test():
  mem = MockMemory()

  mem.w8(0x100, 42)
  assert mem.r8(0x100) == 42

  mem.w16(0x200, 0xdead)
  assert mem.r16(0x200) == 0xdead

  mem.w32(0x300, 0xcafebabe)
  assert mem.r32(0x300) == 0xcafebabe

  mem.write(0, 0x101, 43)
  assert mem.read(0, 0x101) == 43

  mem.write(1, 0x202, 0x1234)
  assert mem.read(1, 0x202) == 0x1234

  mem.write(2, 0x304, 0x11223344)
  assert mem.read(2, 0x304) == 0x11223344

  # invalid values
  with pytest.raises(ValueError):
    mem.w8(0x100, 0x100)
  with pytest.raises(ValueError):
    mem.w8(0x100, -1)
  # invalid values
  with pytest.raises(struct.error):
    mem.w16(0x100, 0x10000)
  with pytest.raises(struct.error):
    mem.w16(0x100, -2)
  # invalid values
  with pytest.raises(struct.error):
    mem.w32(0x100, 0x100000000)
  with pytest.raises(struct.error):
    mem.w32(0x100, -3)
  # invalid type
  with pytest.raises(ValueError):
    mem.w8(0x100, 'hello')
  # invalid type
  with pytest.raises(struct.error):
    mem.w16(0x100, 'hello')
  # invalid type
  with pytest.raises(struct.error):
    mem.w32(0x100, 'hello')
  # invalid width
  with pytest.raises(ValueError):
    mem.write(7, 0x202, 12)
  with pytest.raises(ValueError):
    mem.read(7, 0x202)
Ejemplo n.º 7
0
def atypes_library_sum_test():
    mem = MockMemory()
    alloc = MemoryAlloc(mem)
    # alloc lib
    name = "my.library"
    id_str = "my.library 1.2"
    neg_size = 30
    pos_size = LibraryStruct.get_size()
    lib = Library.alloc(alloc, name, id_str, neg_size)
    # assume rounded neg size
    assert lib.get_neg_size() == 32
    mem.w32(lib.addr - 32, 0xdeadbeef)
    mem.w32(lib.addr - 28, 0xcafebabe)
    my_sum = (0xdeadbeef + 0xcafebabe) & 0xffffffff
    lib_sum = lib.calc_sum()
    assert lib_sum == my_sum
    lib.update_sum()
    assert lib.get_sum() == my_sum
    assert lib.check_sum()
    # done
    lib.free()
    assert alloc.is_all_free()
Ejemplo n.º 8
0
def astructs_bitfield_inst_test():
    mem = MockMemory()
    mem.w32(4, 1)
    # instance
    bf = MyBF(mem=mem, addr=4)
    assert str(bf) == "a"
    assert repr(bf) == "MyBF('a')"
    assert int(bf) == MyBF.a
    assert bf.has_bits(MyBF.a)
    assert bf.has_bits("a")
    # set bit
    bf.set_bits(MyBF.c)
    assert str(bf) == "a|c"
    assert int(bf) == MyBF.c | MyBF.a
    assert bf.has_bits("c")
    assert bf.has_bits(MyBF.c)
    assert bf.has_bits("a")
    assert bf.has_bits(MyBF.a)
    assert mem.r32(4) == MyBF.c | MyBF.a
    # clr bit
    bf.clr_bits(MyBF.a)
    assert str(bf) == "c"
    assert int(bf) == MyBF.c
    assert bf.has_bits("c")
    assert bf.has_bits(MyBF.c)
    assert not bf.has_bits("a")
    assert not bf.has_bits(MyBF.a)
    assert mem.r32(4) == MyBF.c
    # set value
    bf.set(MyBF.a | MyBF.b)
    assert str(bf) == "a|b"
    assert int(bf) == MyBF.b | MyBF.a
    assert bf.has_bits("b")
    assert bf.has_bits(MyBF.b)
    assert bf.has_bits("a")
    assert bf.has_bits(MyBF.a)
    assert mem.r32(4) == MyBF.b | MyBF.a