blob: acc9183ca99944048108f6e834f1c7e389ae1431 [file] [edit]
import fadec
nop = fadec.decode64(b"\x90")
assert str(nop) == "nop"
assert repr(nop) == '<fadec.Inst "nop",size=1>'
assert nop.size == 1
assert nop.type == fadec.Inst.NOP
assert nop.addrsize == 8
assert nop.has_rep is False
assert nop.has_repnz is False
assert nop.has_lock is False
assert nop.has_3e is False
assert nop.maskreg is None
assert nop.ops == ()
add_rr = fadec.decode64(b"\x01\xc1")
assert str(add_rr) == "add ecx, eax"
assert repr(add_rr) == '<fadec.Inst "add ecx, eax",size=2>'
assert add_rr.size == 2
assert add_rr.type == fadec.Inst.ADD
assert len(add_rr.ops) == 2
assert repr(add_rr.ops[0]) == '<fadec.Op "add ecx, eax",idx=0>'
assert add_rr.ops[0].is_reg
assert not add_rr.ops[0].is_imm
assert not add_rr.ops[0].is_mem
assert not add_rr.ops[0].is_off
assert not add_rr.ops[0].is_membcst
assert add_rr.ops[0].size == 4
assert str(add_rr.ops[0].reg) == "ecx"
assert repr(add_rr.ops[0].reg) == f'<fadec.Reg "ecx",size=2,type={fadec.Reg.GPL},idx=1>'
assert add_rr.ops[0].reg.sizelg == 2
assert add_rr.ops[0].reg.type == fadec.Reg.GPL
assert add_rr.ops[0].reg.idx == 1
assert repr(add_rr.ops[1]) == '<fadec.Op "add ecx, eax",idx=1>'
assert add_rr.ops[1].is_reg
assert add_rr.ops[1].size == 4
assert str(add_rr.ops[1].reg) == "eax"
assert repr(add_rr.ops[1].reg) == f'<fadec.Reg "eax",size=2,type={fadec.Reg.GPL},idx=0>'
assert add_rr.ops[1].reg.sizelg == 2
assert add_rr.ops[1].reg.type == fadec.Reg.GPL
assert add_rr.ops[1].reg.idx == 0
mov_mi = fadec.decode64(b"\x66\xc7\x00\x42\x00")
assert str(mov_mi) == "mov word ptr [rax], 0x42"
assert mov_mi.size == 5
assert mov_mi.type == fadec.Inst.MOV
assert len(mov_mi.ops) == 2
assert mov_mi.ops[0].size == 2
assert mov_mi.ops[0].is_mem
assert str(mov_mi.ops[0].base) == "rax"
assert mov_mi.ops[0].index is None
assert mov_mi.ops[0].disp == 0
assert mov_mi.ops[1].size == 2
assert mov_mi.ops[1].is_imm
assert mov_mi.ops[1].imm == 0x42