程序运行模型
函数运行模型
- 将程序分解为每一个函数的状态的组合
- 函数内部运行一个独立的自动机
- 每一个函数的自动机组合在一起形成整个程序的自动机
自动机构建
- 静态生成:链表存放函数状态转移
- 动态生成:函数运行的过程中动态生成自动机。可以减少特征值存放所需要的空间,但是遇到某些未加入状态的正常函数会产生误报。
动态完整性度量方法
- 程序进入新函数时,度量模块就会将函数调用者对应的调用序列压栈保存,并新建空间保存当前序列
- 函数运行过程中,度量模块记录程序这段时间的调用,作为度量内容
- 函数运行结束后,度量模块已经记录函数运行序列,并将其与函数自动机比对,验证度量是否成功
- 度量符合则继续运行,不符合则结束运行
- 程序返回上一个函数,并将原先保存的序列出栈,继续以上过程,直到程序结束
小结
Qian 的这篇文章,其实本质上和我们提的方法是一样的。但是这种形式化的描述方法,算法的描述都非常值得借鉴学习!
参考
Lee 发来的一篇不知篇名的文章(未检索到相关信息)