def test_symbolic(self): sy = self.state.symbolicate_buffer('+++\0') s = self._push_string(sy) ret = strlen(self.state, s) print solver.get_all_values(self.state.constraints, ret) self.assertItemsEqual( range(4), solver.get_all_values(self.state.constraints, ret)) self.state.constrain(sy[0] == 0) ret = strlen(self.state, s) self.assertFalse(solver.can_be_true(self.state.constraints, ret != 0)) self._clear_constraints() self.state.constrain(sy[0] != 0) self.state.constrain(sy[1] == 0) ret = strlen(self.state, s) self.assertFalse(solver.can_be_true(self.state.constraints, ret != 1)) self._clear_constraints() self.state.constrain(sy[0] != 0) self.state.constrain(sy[1] != 0) self.state.constrain(sy[2] == 0) ret = strlen(self.state, s) self.assertFalse(solver.can_be_true(self.state.constraints, ret != 2)) self._clear_constraints() self.state.constrain(sy[0] != 0) self.state.constrain(sy[1] != 0) self.state.constrain(sy[2] != 0) ret = strlen(self.state, s) self.assertFalse(solver.can_be_true(self.state.constraints, ret != 3))
def test_symbolic(self): sy = self.state.symbolicate_buffer('+++\0') s = self._push_string(sy) ret = strlen(self.state, s) print solver.get_all_values(self.state.constraints, ret) self.assertItemsEqual(range(4), solver.get_all_values(self.state.constraints, ret)) self.state.constrain(sy[0] == 0) ret = strlen(self.state, s) self.assertFalse(solver.can_be_true(self.state.constraints, ret != 0)) self._clear_constraints() self.state.constrain(sy[0] != 0) self.state.constrain(sy[1] == 0) ret = strlen(self.state, s) self.assertFalse(solver.can_be_true(self.state.constraints, ret != 1)) self._clear_constraints() self.state.constrain(sy[0] != 0) self.state.constrain(sy[1] != 0) self.state.constrain(sy[2] == 0) ret = strlen(self.state, s) self.assertFalse(solver.can_be_true(self.state.constraints, ret != 2)) self._clear_constraints() self.state.constrain(sy[0] != 0) self.state.constrain(sy[1] != 0) self.state.constrain(sy[2] != 0) ret = strlen(self.state, s) self.assertFalse(solver.can_be_true(self.state.constraints, ret != 3))
def test_SDIVS3(self): constraints, world, vm = self._make() xx = constraints.new_bitvec(256, name="x") yy = constraints.new_bitvec(256, name="y") constraints.add(xx == 0x20) constraints.add(yy == -1) result = vm.SDIV(xx, yy) self.assertListEqual(list(map(evm.to_signed, solver.get_all_values(constraints, result))), [-0x20])
def test_SDIVS2(self): constraints, world, vm = self._make() xx = constraints.new_bitvec(256, name="x") yy = constraints.new_bitvec(256, name="y") constraints.add(xx == 0x20) constraints.add(yy == 2) result = vm.SDIV(xx, yy) self.assertListEqual(solver.get_all_values(constraints, result), [0x10])