为什么Z3落入此



我正在尝试使用Z3-Solver
解决此问题但是主题是它给了我错误的价值
我试图用LShR替换>>的值更改,但它们的不正确是相关的
但是我知道w的值应为0x41414141在十六进制中
我还尝试将w设置为0x41414141,并说它是unsat

from z3 import *
def F(w):
    return ((w * 31337) ^ (w * 1337 >> 16)) % 2**32
s = Solver()
w = BitVec("w",32)
s.add ( F(w) == F(0x41414141))
while s.check() == sat:
     print s.model()
     s.add(Or(w != s.model()[w]))

python使用任意大小的整数,而Z3夹在所有中间结果为32位,因此F给出了Python和Z3的不同结果。您需要

之类的东西
def F1(w):
    return ((w * 31337) ^ (((w * 1337) & 0xffffffff) >> 16)) % 2**32
def F1Z(w):
    return ((w * 31337) ^ LShR(((w * 1337) & 0xffffffff), 16)) % 2**32
s.add ( F1Z(w) == F1(0x41414141))

相关内容

  • 没有找到相关文章

最新更新