面向大规模源代码的内存安全性动态分析技术
2021-08-02王冲,孙毅,仵俊
计算机技术与发展 2021年7期
王 冲,孙 毅,仵 俊
(南京航空航天大学 计算机科学与技术学院,江苏 南京 211100)
0 引 言
C语言常用于诸如操作系统、嵌入式软件系统等对性能要求较高的系统的编写。然而C语言本身缺乏对内存安全性检测的相关功能,因此使用其编写的程序可能存在较为严重的内存安全性漏洞[1-5]。动态分析[6-8]是目前常用的对程序进行内存安全检测的方法,目前常用的实现方法有二进制代码插桩、中间代码插桩、源代码插桩[9-10]等。
二进制代码插桩是对可执行程序进行插桩,优点是不需要源代码就可以对程序进行动态分析;中间代码插桩是对编译后的代码插桩,可以利用优化,减少不必要的插桩;源代码插桩是指对源码上进行修改,添加行为监代码,对程序进行检测,优点是可以获取源代码中的位置,准确地报告错误信息。
为了能更准确有效地检测程序的错误并能将错误的变量信息准确地反馈给用户,该文采用了源代码插桩技术进行插桩,并在基于指针技术[11-13]的基础上,借助开源编译器Clang和C++语言实现了内存安全分析工具Movec,完成其对大规模C程序的内存安全性检测,并通过实验进行了验证,表明该内存分析工具对大规模程序的内存检测是有效且高效的。
1 基础知识
基于指针的内存安全性检测技术的主要思想是对程序中的所有指针变量构造一个指针元数据,用来记录该指针的内存状态、上下界以及指向当前内存的指针的个数。然后,当指针赋值或者以函数参数传递的时候,更新这个指针的元数据,用来保持数据的一致性。……
登录APP查看全文
