angr 动态处理 solver中的constraints

angr中最重要的就是符号值,如果我们想要动态的调整我们的constraints,就需要添加constraints和删除我们的constraints。

在state中添加constraints

添加state中的constraints,需要使用state中的

add_constraints(*args, **kwargs)

向状态添加一些约束。可以将任意数量的符号布尔值作为可变的位置参数传递。

添加完constraints之后,我们可以使用

satisfiable(**kwargs)

检测状态的约束是否满足

在state中delete constraints

主要参考angr中的一个issue:https://github.com/angr/angr/issues/1188

在这个issue中,最重要的一个方法就是

state.se.constraints.pop()
state.se.reload_solver()
state.satisfiable()

这个三个方法使用,其中se是之前版本angr中solver的用法,现在已经被遗弃,使用solver。pop()函数里面我们可以自己设置参数,0就代表constriants这个list里面的第一条constriant

第二个,reload_solver()是重新分析我们的constraints,同时根据我们调整后的constraints刷新之前的solver的cache,如果我们跟踪过solver的分析可以知道,其实很多分析都是通过solver中的_solver这个cache中的好多变量来进行判断的。

第三个satisfiable其实就是判断我们当前这个状态是不是satisfiable的,如果是可满足的,就会返回ture,也就是说我们删除的constraints是成功的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值