4、指针分析与副作用分析

指针分析与副作用分析

在软件开发中,对程序进行精确的分析是至关重要的,特别是在处理库模块和客户端模块时。本文将介绍一种构建库模块摘要信息的方法,以及如何利用这些摘要进行客户端模块的单独指针分析和修改分析。

1. 整体程序分析

整体程序分析是后续最坏情况分析和基于摘要分析的基础。假设使用简化的类 C 程序表示,结构和数组被视为整体对象,不区分其单个元素。malloc 等函数调用被替换为“x = &heapi”形式的语句。

  • 变量分类 :程序表示中的变量集合 V 可分为全局变量、过程变量(表示过程名称)、局部变量(包括形式参数)和堆变量。
  • Andersen 指针分析 :构建一个指针图,节点对应 V 中的变量,有向边 (v1, v2) 表示 v1 可能包含 v2 的地址。每个语句定义一个转移函数,用于向指针图添加边。分析从空图开始,应用转移函数直到达到固定点。
  • 修改分析 :定义一个修改算法,为每个语句 s 计算一组修改的变量 Mod(s)⊆V。该算法通过添加两个变量过滤器来补偿底层指针分析的不精确性。

以下是一个示例程序:

proc main() {
    proc exec(p,fp) {
        local x,y,z,w
        local s,u,q,t
        1: x = 1
        11: s = 3
        12: u = 4
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值