1
0
mirror of https://github.com/angr/angr synced 2026-06-08 13:09:39 +00:00
Files
angr-angr/tests/state_plugins/solver/test_simsolver.py
Kevin Phoenix feda6f6909 Apply ruff SIM lints (#4793)
* Apply SIM lints

* Fix some failing tests

* Fix more bugs
2024-08-29 16:56:53 -07:00

59 lines
2.2 KiB
Python
Executable File

#!/usr/bin/env python3
# pylint:disable=no-self-use
from __future__ import annotations
import struct
import unittest
import claripy
import angr
class TestSolverEvalCasting(unittest.TestCase):
"""
Basic test cases of SimSolver::eval's `cast_to` function.
"""
def test_eval_cast_bvv_to_bytes(self):
s = angr.SimState(arch="AMD64", mode="symbolic")
assert s.solver.eval(claripy.BVV(0, 0), cast_to=bytes) == b""
assert s.solver.eval(claripy.BVV(0, 8), cast_to=bytes) == b"\x00"
assert s.solver.eval(claripy.BVV(0x12345678, 32), cast_to=bytes) == b"\x12\x34\x56\x78"
def test_eval_cast_bvv_to_bytes__non_8bit_length_multiple(self):
s = angr.SimState(arch="AMD64", mode="symbolic")
for nbits in [1, 2, 7]:
with self.subTest(nbits=nbits), self.assertRaises(ValueError):
s.solver.eval(claripy.BVV(0, nbits), cast_to=bytes)
def test_eval_cast_fpv_to_bytes(self):
s = angr.SimState(arch="AMD64", mode="symbolic")
value = 1.23456
fpv = claripy.FPV(value, claripy.FSORT_FLOAT)
assert s.solver.eval(fpv, cast_to=bytes) == struct.pack(">f", value)
fpv = claripy.FPV(value, claripy.FSORT_DOUBLE)
assert s.solver.eval(fpv, cast_to=bytes) == struct.pack(">d", value)
def test_eval_cast_fpv_to_int(self):
s = angr.SimState(arch="AMD64", mode="symbolic")
value = 1.23456
fpv = claripy.FPV(value, claripy.FSORT_FLOAT)
assert s.solver.eval(fpv, cast_to=int) == int.from_bytes(struct.pack(">f", value), "big")
fpv = claripy.FPV(value, claripy.FSORT_DOUBLE)
assert s.solver.eval(fpv, cast_to=int) == int.from_bytes(struct.pack(">d", value), "big")
def test_eval_cast_bool_to_bytes(self):
s = angr.SimState(arch="AMD64", mode="symbolic")
assert s.solver.eval(claripy.BoolV(False), cast_to=bytes) == b"\x00"
assert s.solver.eval(claripy.BoolV(True), cast_to=bytes) == b"\x01"
def test_eval_cast_bool_to_int(self):
s = angr.SimState(arch="AMD64", mode="symbolic")
assert s.solver.eval(claripy.BoolV(False), cast_to=int) == 0
assert s.solver.eval(claripy.BoolV(True), cast_to=int) == 1
if __name__ == "__main__":
unittest.main()