软件分析技术学习笔记(一)

本文是软件分析技术学习笔记的第一部分,介绍了停机问题和数据流分析。通过哥德尔不完备定理和莱斯定理探讨了程序的不可判定性和可判定属性。针对停机问题,提出了抽象近似求解方法。数据流分析中,讨论了如何处理控制流图的交汇路径,并给出了一般的数据流分析算法框架。算法的soundness和收敛性基于半格和偏序关系的概念。
摘要由CSDN通过智能技术生成

软件分析技术学习笔记(一)

写在前面

由于要做一个软件分析+AI方向的项目,写博客记录一下学习的内容,也是激励自己学习的动力吧。软件分析学习主要参考北大熊英飞老师的课程,链接:https://xiongyingfei.github.io/SA/2020/main.htm。

第一章

运用哥德尔不完备定理论证了程序中的缺陷不可能完全判定。哥德尔定理:包含自然数和基本算术运算的系统一定不完备,即包含一个无法证明的定理。哥德尔定理证明略,与停机问题证明类似,证明下面的程序是否可以停机:

void Evil() {
	if (!Halt(Evil) return;
	else while(1);
	}

显然可以得出矛盾。

这些问题属于不可判定性问题。通过莱斯定理得到程序哪些属性是可判定的。莱斯定理:把任意程序看成输入到输出上的函数,该函数的所有非平凡属性都不存在可以检查该属性的通用算法,证明略。

故只能近似求解判定问题。减少回答的信息,但将回答中的信息量与真正的解逼近。
近似的解中很重要的性质是soundness,要保证分析不改变程序语义。

近似方法1–抽象:将原问题投射到一个抽象域里求解,缩小问题的范围。
方法2–搜索:这个很好理解。

第二章

停机问题

使用抽象近似求解停机问题:忽略条件判定,改为让程序随机走return或while(1)。我们会得到结果:不知道程序会不会停机,虽然信息量更小,是一个近似值,但我们得到了结果。进一步说就是原始程序有一条执行路径&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值