创作开始时间:2022年11月16日18:46:31
如题,学习一下符号执行 Symbolic Execution的相关知识。参考:熊英飞老师2018《软件分析》课件。
程序的规约通常表示为前条件和后条件。
形成命题:
用符号执行发现:
霍尔三元组:{前条件}语句{后条件}
霍尔逻辑表示三者之间的推导关系。又称为公理语义
霍尔逻辑规则:

可参考:

最弱前条件计算:给定后条件和语句,求能形成霍尔三元组的最弱前条件
最强后条件计算:给定前条件和语句,求能形成霍尔三元组的最强后条件
基于谓词转换的符号执行:
参考:
Starting with a post-assertion, what is the weakest pre-condition that makes the assertion true?
In other words, what must be true before to make the assertion true after?
如果A->B,但是B不->A。那么B比A更弱。(相当于B包含了A)

赋值语句的示例:

还是比较好理解的。
更多的例子就不一一列出,可访问原参考链接。
看了下案例:

好处应该就是可以根据具体的状态(Concrete state)求解能够探索新路径的值。可以不断迭代,从而遍历所有路径。
参考:

符号执行可以生成一个具体的输入,使得程序出错(不符合规约)。但是不能证明程序没错。
用自动定理证明器(如SAT、SMT求解器)来求解是否存在使程序出错的具体输入值。

大概明白了符号执行。后续再补充完善。
创作结束时间:2022年11月16日20:20:44