BitVecで使用可能なバイトのリストを設定しようとしていますが、実際に正しい方法で制約を設定しているかどうかはわかりません。Z3 - BitVecでバイト制約を設定する方法
例:
は私たちが持ってみましょう32ビットBV bv
と呼ばれ、s
呼ばSolver()
:私は各バイトができることをしたい
s = Solver()
bv = BitVec(8 * 4)
ので、私はExtract()
を使用0x2
か0x34
または0xFF
のいずれか:
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()
はunsat
を返します。
私は、これは、それらのバイトがを0x2または0x34のOR 0xFFであり得ることを表現するための正しい方法ではないと思います。 私は正しい方法で制約を書いていたのですか、あるいは私の思考プロセスは間違っていますか?