z3-solver安装和使用方法
Z3是一个微软研究院开源的theorem prover(定理证明器),支持位向量、布尔、数组、浮点数、字符串以及其他数据类型。Z3是一个SMT solver以及支持SMTLIB的格式。
这里简单介绍几个概念:
SAT(Boolean Satisfiability Problem/布尔可满足性问题)
SMT(Satisfiability Modulo Theories/可满足性模理论)
SAT + Theory Solvers = SMT
github项目:https://github.com/Z3Prover/z3
官方文档:http://z3prover.github.io/api/html/
angr框架的内置Z3: https://github.com/angr/angr-z3
0x01 安装z3-solver
pip install z3-solver
以下是错误安装方式:
# 别安装成这个
# Backup ZFS snapshots to S3
pip install z3
0x02 使用z3-solver来解方程
例如最简单的三元一次方程组:
from z3 import *
x,y,z=Ints('x y z')
s=Solver()
s.add(2*x+3*y+z==6)
s.add(x-y+2*z==-1)
s.add(x+2*y-z==5)
print s.check()
print s.model()
模运算:
from z3 import *
x=Int('x')
s=Solver()
a = 65537
b = 64834
c = 41958
s.add(x>0)
s.add(x % a == b)
s.add(x % b == c)
print s.check()
print s.model()
0x03 其他用法
等pcat以后再补充