angr/tests/analyses/decompiler/test_condition_processor.py

29 lines
1.4 KiB
Python

from __future__ import annotations
import archinfo
from angr import ailment
from angr.ailment.expression import Const, Extract, VirtualVariable, VirtualVariableCategory
from angr.analyses.decompiler.condition_processor import ConditionProcessor
def test_extract_placeholders_include_semantic_properties():
arch = archinfo.ArchAMD64()
manager = ailment.Manager(arch=arch)
condition_processor = ConditionProcessor(arch, manager)
base = VirtualVariable(0, 1, 64, VirtualVariableCategory.REGISTER, oident=arch.registers["rax"][0])
offset = Const(1, 0, 64)
extract_byte = Extract(2, 8, base, offset, arch.memory_endness)
extract_word = Extract(3, 16, base, offset, arch.memory_endness)
extract_byte_be = Extract(4, 8, base, offset, archinfo.Endness.BE)
byte_ast = condition_processor.claripy_ast_from_ail_condition(extract_byte)
word_ast = condition_processor.claripy_ast_from_ail_condition(extract_word)
byte_be_ast = condition_processor.claripy_ast_from_ail_condition(extract_byte_be)
assert byte_ast.args[0] != word_ast.args[0]
assert byte_ast.args[0] != byte_be_ast.args[0]
assert condition_processor.convert_claripy_bool_ast(byte_ast) is extract_byte
assert condition_processor.convert_claripy_bool_ast(word_ast) is extract_word
assert condition_processor.convert_claripy_bool_ast(byte_be_ast) is extract_byte_be