基于区域内存模型的 LLVM 抽象解释
1. 引言
在对 C 程序进行静态分析时,内存模型的选择至关重要。传统的静态分析工具在处理复杂的内存操作和数据结构时面临挑战。本文介绍了一种基于区域的内存模型(RBMM),它能够简化内存抽象,提高静态分析的效率和准确性。
2. 动机示例
通过一个创建和检查链表属性的 C 程序来展示 RBMM 的优势。该程序定义了一个链表节点结构体,并实现了初始化和创建链表的函数,最后检查链表节点的一些属性:
typedef struct node{
int *data;
size_t len;
size_t cap;
struct node *n;
} *List;
int* init(size_t sz , int val) {
int* data = (int *) malloc( sizeof(int)*sz);
assume(data > 0);
for (int i=0;i<sz;++i)
data[i] = val;
return data;
}
List mk_list( size_t list_sz , size_t data_sz , int val) {
List l = 0;
for(size_t i=0;i<list_sz;i++){
List tmp = (List)malloc( sizeof(struct node));
assume(tmp > 0);
tmp ->data