Z3:如何从常数中提取()?

时间:2013-05-09 09:02:46

标签: python z3

在Z3 Python中,要提取BitVector V的8位,我们可以执行以下操作:

Extract(7, 0, V)

但是,有时在我的程序中,V可以是常量,所以在这种情况下代码就像:

Extract(7, 0, 0x87654)

遗憾的是,这是错误的,因为上面的代码没有指定0x87654是32位BitVector.7。

一种解决方案是创建一个临时变量,例如:

tmp = BitVec('tmp', 32)
tmp == 0x87654
Extract(7, 0, tmp)

然而,这有点麻烦,因为我必须为此创建一个临时工作。我想知道是否有另一种方法而不必创建临时变量?有没有办法在我的代码中将0x87654内联到BitVector内联?

非常感谢。

1 个答案:

答案 0 :(得分:3)

我认为你想使用BitVecVal(value, bits)

Extract(7, 0, BitVecVal(0x87654, 32))

以下是API说明:http://research.microsoft.com/en-us/um/redmond/projects/z3/z3.html#-BitVecVal