Z3 - 如何在BitVec上设置字节约束

时间:2016-10-26 10:09:38

标签: python z3 bitvector

我正在尝试在BitVec中设置可能允许的字节列表,但我不确定我是否正在以正确的方式设置约束。

E.g:

让我们拥有一个名为bv的32位BV和一个名为Solver()的{​​{1}}:

s

我希望每个字节可以是s = Solver() bv = BitVec(8 * 4) 0x20x34,所以我使用了0xFF

Extract()

可悲的是,i = 0 while (i < 8 * 4): s.add(Extract(i + 7, i, bv) == 0x2) s.add(Extract(i + 7, i, bv) == 0x34) s.add(Extract(i + 7, i, bv) == 0xFF) i += 8 返回s.check()

我认为这不是表达那些字节可能是 0x2或0x34或0xFF 的正确方法。 我是否以正确的方式编写约束,或者我的思维过程是完全错误的?

2 个答案:

答案 0 :(得分:2)

求解器中的约束隐含地是一个连词,即,你必须首先构建一个析取,然后再s.add(...)这个析取。

答案 1 :(得分:1)

i = 0
while (i < 8 * 4):
   s.add(Or(Extract(i + 7, i, bv) == 0x2), 
            Extract(i + 7, i, bv) == 0x34),
            Extract(i + 7, i, bv) == 0xFF)) 
i += 8
相关问题