[发明专利]一种利用数据流分析算法分析C代码中的内存安全的方法在审
申请号: | 202111201254.6 | 申请日: | 2021-10-15 |
公开(公告)号: | CN114153451A | 公开(公告)日: | 2022-03-08 |
发明(设计)人: | 贾枭;孙振东 | 申请(专利权)人: | 上海那一科技有限公司 |
主分类号: | G06F8/41 | 分类号: | G06F8/41 |
代理公司: | 上海国瓴律师事务所 31363 | 代理人: | 傅耀 |
地址: | 200240 上海市闵行*** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 利用 数据流 分析 算法 代码 中的 内存 安全 方法 | ||
1.一种利用数据流分析算法分析C代码中的内存安全的方法,其特征在于:将C语言内存指令定义成形式化后的指令集,然后进行如下操作,
静态分析出代码需要并给对应指针添加标记的位置,并为代码自动添加标记;
将上述代码转化成抽象语法树,并对其每一个指令进行类型检查,同时对涉及到的指针权限转移或借用语句进行修改,使之在静态单赋值中有所区分;
对抽象语法树进行线性化,得到静态单赋值形式的控制流图,进行数据流分析,得到收敛的权限映射表的结果;
利用数据流分析算法迭代稳定后的结果,利用错误检查函数检查是否存在内存安全问题。
2.根据权利要求1所述的一种利用数据流分析算法分析C代码中的内存安全的方法,其特征在于:所述指针包括拥有所有权和不拥有所有权两种类型。
3.根据权利要求2所述的一种利用数据流分析算法分析C代码中的内存安全的方法,其特征在于:所述指令集包括内存分配、内存释放、内存所有权转移、内存所有权借用、强制类型转化、指针离开作用域、取指令、存指令、合并指令和函数调用指令。
4.根据权利要求3所述的一种利用数据流分析算法分析C代码中的内存安全的方法,其特征在于:错误检测方法包括内存泄漏检测、多次释放检查、在被借走时转移或释放检查、释放后使用检查。
5.根据权利要求4所述的一种利用数据流分析算法分析C代码中的内存安全的方法,其特征在于:所述抽象语法树包括函数参数和返回值的信息,数据流分析算法根据抽象语法树计算函数对应的指针权限映射表,指针权限映射表包含了所有从变量到它所具有的指针权限的映射。
6.根据权利要求5所述的一种利用数据流分析算法分析C代码中的内存安全的方法,其特征在于:分析前,对传入的文件进行预处理,遍历整个文件的代码,查找其中全部的指针并观测指针的行为,对指针是否有内存分配或释放的行为进行分析,添加不同的指针标记;如果有内存释放或分配、或对具有所有权的指针进行转移的行为,代表它对一块内存具有所有权,应为这个指针添加具有所有权的标记;反之,认为这个指针仅借走了所有权,添加不具有所有权的标记。
7.根据权利要求6所述的一种利用数据流分析算法分析C代码中的内存安全的方法,其特征在于:对于抽象语法树中的每一个函数,遍历其中的每一条指令,如果涉及到所有权转移,如将拥有一块空间的指针转移给另一个拥有所有权的指针,添加指针所有权需要转移的注释;如果涉及到所有权借出,如一个没有所有权的指针借走了另一个指针的权限,添加指针所有权被借出的注释。
8.根据权利要求7所述的一种利用数据流分析算法分析C代码中的内存安全的方法,其特征在于:数据分析的具体步骤如下,
对每个函数逐一进行分析,分别记录它们参数和返回值的权限种类,即拥有所有权还是不拥有所有权;
如果是拥有所有权的参数和返回值,在函数调用时转移所有权;
如果是不拥有所有权的参数和返回值,由于不知道函数内部的情况,在函数调用时将权限记为“*”;
如果不是指针,不涉及到所有权的变化,记为“非指针”;
然后为每条涉及内存的指令定义权限映射表的转移方程,即由一个指针权限经过一条指令后可能转变为的指针权限,以及不同权限映射表的合并操作;
将抽象语法树转化为静态单赋值,对于每个函数分别进行分析。
9.根据权利要求8所述的一种利用数据流分析算法分析C代码中的内存安全的方法,其特征在于:内存错误检查具体算法如下:
(a)将函数入口点的指针权限映射表初始化为函数参数权限,其余每个基本块的入口点的指针权限映射表初始化为空;
(b)对于每个基本块的每条指令进行顺序分析,得到一条指令结束后的指针权限映射表并传递给下一条指令,直至基本块出口处,同时,记录是否有基本块的指针权限映射表发生了变化;
(c)如果指针权限映射表发生变化,将位于每个基本块父节点处的基本块的出口处指针权限映射表合并,并且传递给这个块,作为该基本块的入口处权限映射表。重复(b)和(c)操作;
(d)如果指针权限映射表没有发生变化,结束迭代,此时得到的结果是收敛的指针权限映射表;
(e)重新遍历每条指令和执行这条指令之前的指针权限映射表,利用内存错误检测机制判断是否出现不安全的行为。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于上海那一科技有限公司,未经上海那一科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202111201254.6/1.html,转载请声明来源钻瓜专利网。