15、基于区域内存模型的 LLVM 抽象解释

基于区域内存模型的 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值