while len(simgr.active) > 0:
for active in simgr.active:
if active.addr not in blocks and active.addr == 0x4007a2: # 指定该块,执行过后就剪掉
simgr.active.remove(active)
blocks.discard(active.addr)
# hook call instructions
......
simgr.step()
最后的结果反汇编如下
可以看到是去除了。
思考:
我这种处理方法是特例,因为变量 i 对后续代码的影响有限。
要是后续有使用 i 且产生分支,我觉得有两种处理方法,都是人工干预
1、在剪掉这个路径后,在下一个代码块开始时,手动对循环中变化的变量(本例中为 i )进行符号化赋值,或者直接跳过这个循环,然后符号化赋值。