Giter VIP home page Giter VIP logo

nju-software-analysis-homework's Introduction

本仓库的使命已完成,请移步官方Tai-e教程:
仓库:https://github.com/pascal-lab/Tai-e-assignments
官方网站:http://tai-e.pascal-lab.net
知乎帖子:https://zhuanlan.zhihu.com/p/488957195

本仓库是早期作业的参考实现...

欢迎加程序分析工具开发群 (二维码过期,参考issue #4)

https://canliture.github.io/imgs/group.jpg


这里是南京大学软件分析课程实验作业的非官方实现

注:南大课程作业Bamboo没开源,为啥有这个仓库?

  • 作业的pdf南大课程给了,API也给了;照着API,再根据自己的理解就基本上可以做了。

目前状态

  • 还没经过大量测试(至少保证Lecture 里面的例子是没问题的)
  • 第5次作业就差最后的obj/type-sensitive代码的填空了
  • 希望提bug/issue
  • 最近挺忙的,先停更1/2个月吧.相信这份代码仍然能够给人一些帮助.(2021-11-08)

环境

  • Java 8
  • Soot 4.2.1
  • IntelliJ IDEA
  • Maven构建/Junit测试

文档

  • docs/org为南大课程的作业原题pdf
  • docs/soot为soot参考资料
  • src/main/java/com/canliture/soot/每个子目录下的作业都有一个README,作为作业的简单说明

代码

  • com.canliture.soot.ass1
    • 第一次作业的代码实现
    • 常量传播
  • com.canliture.soot.ass2
    • 第二次作业的代码实现
    • 常量传播 + 活性检测 应用于死代码消除
  • com.canliture.soot.ass3
    • 第三次作业的代码实现
    • CHA用于构造调用图
  • com.canliture.soot.ass4
    • 第四次作业的代码实现
    • 流不敏感指针分析
  • com.canliture.soot.ass5
    • 第五次作业的代码实现
    • 流敏感指针分析

测试

运行单元测试的代码: src/test/java/目录下

  • com.canliture.soot.ass{n}

被测试代码: src/test/testcodes/ass/*

调试运行

  • 使用IntelliJ IDEA时,将目录src/test/testcodes/ass标记为Test sources root

    • 这样就能够在调试/运行的时候自动将被测试代码编译到target/test-classes目录下,方便测试
  • 以ass1的调试/运行 测试为例

    • 找到com.canliture.soot.ass1.IntraConstantPropagationTest类,运行Junit测试即可
    • 每个测试类都有一个getTransformer()方法,里面的返回的Transformer的internalTransform方法就是分析的入口了
  • 对整个测试怎么跑起来, 可以查看InterBaseTest和IntraBaseTest类,这里封装个小的测试框架

    • @Before 测试前先配置一下Soot
    • @Test 执行测试代码
    • @After 输出Jimple IR到sootOutput目录下

How-To-Run-Test

nju-software-analysis-homework's People

Contributors

canliture avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

nju-software-analysis-homework's Issues

ass3 CHACallGraphBuilder中dispatch方法存在问题

对比参数列表中未完全匹配所有参数列表,某一相同位置参数类型相同则视为匹配成功,没有类型匹配错误的处理。

for (int i = 0; i < m.getParameterCount(); i++) {
    Type t = m.getParameterType(i);
    Type t1 = method.getParameterType(i);
    if (t.toQuotedString().equals(t1.toQuotedString())) {
        return m;
    }
    ...
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.