SATSMTZ3和符号执行

Posted 白马负金羁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SATSMTZ3和符号执行相关的知识,希望对你有一定的参考价值。

符号执行(symbolic execution)是一种计算机科学领域的程序分析技术,通过采用抽象的符号代替精确值作为程序输入变量,得出每个路径抽象的输出结果。 这一技术在软件测试中有很重要的应用,能够有效地发现程序中的漏洞。本专栏中前面已经介绍过在angr中使用符号执行来解决CTF题目的例子。本文将通过几个例子来演示一下symbolic execution(或者SMT solver)在软件分析领域的应用。

一、程序等价性检验(Program Equivalence Checking)

这是《深入理解计算机系统》(参见【1】)中给出的一个问题。有一段计算机程序,在使用之前定义好的宏变量M和N后被编译成了二进制代码。由于编译器对程序中的乘法和除法运算做了一些优化,当把二进制代码反编译回C代码之后,对比两份源码,其实很难看出来它们是等价的(尽管它们确实是等价的)。现在的问题是,想求出:M和N的值到底是多少?

注意我们这里不会使用《深入理解计算机系统》中的分析方法(那个相当于是手工分析)。现在我们希望使用SMT solver来解决这个问题。

#!/usr/bin/env python3
from z3 

以上是关于SATSMTZ3和符号执行的主要内容,如果未能解决你的问题,请参考以下文章

SATSMTZ3和符号执行

SATSMTZ3和符号执行

如何在 Javadoc 中使用 @ 和 符号格式化代码片段?

是否可以动态编译和执行 C# 代码片段?

c_cpp 这个简单的代码片段显示了如何使用有符号整数在C中完成插值。 for()循环确定要插入的范围

以下代码片段的算法复杂度