【论文阅读】符号执行研究综述
芦笑瑜 战略支援部队信息工程大学 2022
一篇综述文章
符号执行:
核心思想在于使用抽象符号来代替具体的程序输入,并在执行过程中动态维护不同路径下的程序状态,包括程序变量的符号表达式以及路径约束条件。符号执行在软件测试和漏洞挖掘领域均有着重要的应用。
符号执行模式:
经典模式
符号执行不需要任何具体的程序输入,其执行流程描述如下:首先,将程序期望的输入,按照一定方式,抽象为符号集。然后,开始对目标程序进行符号模拟,每执行一条指令,便会相应地更新程序状态信息
混合模式
符号执行依赖于具体输入用例的执行,将具体执行与符号执行相结合。混合模式将具体执行与符号执行相结合,只在与符号相关的部分进行符号模拟,其余部分仅进行具体执行,因此可以避免不必要低效符号模拟。
执行生成测试模式
同样需要依赖具体输入样例的执行。
优势在于:能够更加系统且不重复地分析出所有路径的信息并生成相应的输入用例
选择执行模式
需要依赖具体输入样例的执行,并且支持用户指定需要进行符号化搜索的代码区域。首先,指定目标程序的具体执行区域和符号执行区域。 接着为目标程序提供合法输入并运行。
主要挑战
路径爆炸
约束求解困难
符号模拟低效
先进符号执行系统
S2E、 Angr、 QSYM、 SymCC、 SymQEMU
1、基于解释执行的符号执行系统
思想:在符号执行期间,实时地将机器码指令转化为等效的中间表示,然后对中间表示进行动态插桩,并逐条解释执行。
代表:S2E、 Angr
2、基于编译执行的符号执行系统
思想:一次编译多次执行的工作方式,可以避免重复处理,从而大大提升系统性能。
代表:QSYM、 SymCC、 SymQEMU
将机器码转化为中间表示
将源码转化为机器