一种自动化生成z3变量的方法 (基于Python)

from z3 import *


var_allocate={}


def IRtoZ3expr(var): # if var is number , return a number , else return a z3expr
    x = str(var)
    if ("0x" in x):
        return int(x, 16)
    else:
        if (x not in var_allocate):
            strcmd = "%s = Int('%s')" % (x, x)
            exec strcmd
            var_allocate["%s" % x] = eval(x)
            return eval(x)
        else:
            return var_allocate["%s" % x]
            1


a = IRtoZ3expr('a')
b = IRtoZ3expr('a')
c = IRtoZ3expr('a')
print a.__hash__()
print b.__hash__()

print c.__hash__()


from z3 import *

var_allocate={}

def IRtoZ3expr(var): # if var is number , return a number , else return a z3expr
    x = str(var)
    if ("0x" in x):
        return int(x, 16)
    else:
        if (x not in var_allocate):
            strcmd = "%s = Int('%s')" % (x, x)
            exec strcmd
            var_allocate["%s" % x] = eval(x)
            return eval(x)
        else:
            return var_allocate["%s" % x]
            1

a = IRtoZ3expr('a')
b = IRtoZ3expr('a')
c = IRtoZ3expr('a')
print a.__hash__()
print b.__hash__()
print c.__hash__()

输出 的 变量hash值相同,证明我们生成名字为 a 的 Int 值是同一个,没有被覆盖!

你可能感兴趣的:(python用法)