Z3:将BoolRef转换为BitVecVal

时间:2016-09-08 18:47:37

标签: z3 z3py

我正在尝试使用x86公式来模拟z3汇编代码。目前,我被困在模拟setnz操作码的语义。

setnz的语义定义为

checking the value of CPU flag `ZF`, and if it is equal to 1, then set a register byte as 1, otherwise set it as 0.

例如,可以用这种方式模拟上述过程:

python
>>> from z3 import *
>>> a = BitVecVal(1, 1)
>>> c = (a == 1)
>>> set_register("al", c)

但是,请注意c的类型是BoolRef,我想将al的值设置为8位长BitVecVal }。

所以这是我的问题:

  1. 我遵循模拟此类set操作码的最佳做法?
  2. 如果是这样,我如何将BoolRef翻译成8位长的BitVecVal才能设置寄存器?

1 个答案:

答案 0 :(得分:1)

您可以使用If:

some text some text some text New paragraph text Another new paragraph