# 程序分析 大作业 报告
## 题目要求
给出 `Benchmark.alloc(allocId)` 作为标记点,然后其后的第一处 new 得到的对象的变量需要被标记为(可能)来自该点。经过一系列可能的变量赋值,最终会有 `Benchmark.test(testId, var)` 来询问特定变量的值可能来自哪些标记点。
输出格式类似于 `<testId>: <allocId> <allocId>...`,每行一个。
## 样例输入
```java
public static void main(String[] args) {
Benchmark.alloc(1);
A a = new A();
Benchmark.alloc(2);
A b = new A();
Benchmark.alloc(3);
A c = new A();
if (args.length>1) a=b;
Benchmark.test(1, a);
Benchmark.test(2, c);
}
```
上例应输出
```
1: 1 2
2: 3
```
## 设计思想
根据题意,需使用单独的程序对给定的 Java 代码做静态分析。我们组采用了 [SOOT 框架](https://github.com/Sable/soot)。
通过 `soot.Scene.v().getMainMethod()` 获取到程序入口。通过模拟变量值 `Val`、引用 `Var`、作用域 `Scope` 构建合适的分析环境。通过模拟程序执行(顺序执行、函数调用和分支处理),跟踪桩代码和变量引用的指向,将所需信息存入全局的 `Analyzer` 对象。最后根据查询要求,从 `Analyzer` 中获取相应的结果。
因为是静态分析,发现递归函数(在函数调用链上发现同一函数签名)和成环分支(在分支的前驱链上发现同一语句,一般是循环语句)时,会予以忽略。
## 题外话
因为是大作业,只为了完成作业要求做了一点工作,简单了解了 SOOT 是什么而已,尚有很多真正需要研究的地方没有学习。我们的研究方向也意不在此,粗浅涉猎一下,不多深究。
看到这个仓库的同学、同行:诸君,有缘,江湖再见。
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论





























收起资源包目录







































共 28 条
- 1
资源评论


好家伙VCC
- 粉丝: 4948
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- Excel模板:应届生简历表格绿色.xlsx
- Excel表格模板:公司年度销售对比系统(智能统计-功能齐全-打开即用.xlsx
- Excel模板:入库单(公式统计-可设入库类型、库房).xlsx
- Excel表格通用模板:办公室装修预算表.xls
- 供应商报价管理系统excel表模板.xls
- Excel表格模板:家庭记账本.xlsx
- Excel表格模板:全面的公司行政费用统计表.xlsx
- 接入网设备(非对称数字用户环路ADSL)通信系统检验批工程质量验收记录(一)-(二)GD.xls
- Excel模板:分类账(公式计算模板).xlsx
- 理财散点js图
- Excel表格通用模板:公司报价单(简易模板).xls
- Excel表格模板:部门费用预算表.xls
- Excel表格模板:收支月财务报表公式自动统计.xlsx
- Excel表格模板:采购订单模板范本.xlsx
- Excel表格模板:会议与会人员签到表.xlsx
- Excel表格通用模板:加班记录统计表.xls
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
