摘要:1.背景 中间代码是指一种应用于抽象机器的编程语言,它设计的目的,是用来帮助我们分析计算机程序。在编译的过程中,编译器会在将源代码转换成目标机器上机器码的过程中,先把源代码转换成一种中间的表述形式。 Go语言中提供了SSA包以将源代码转换成静态单赋值形式的中间代码,本文就是对于SSA包源码的解读。本
阅读全文
摘要:1.程序修复现状 1.1程序修复的问题 对于Bug的处理是每一位开发者都必须面对的问题,该处理主要分为四个步骤:知晓故障——定位故障——分析故障——修复故障(打补丁)。人工修复bug基本上就是人工编写代码补丁并检验补丁正确性的过程。在实际应用程序中bug往往是比较难以发现的,因此对于程序的修复也遇到
阅读全文
摘要:对于指针分析尤其是Java指针分析来说,上下文敏感是最有效的提升精度的方法,上下文敏感的指针分析是指针分析领域最近几年研究的热点,上下文敏感不是指针分析独有的技术,理论上所有跨函数间的分析都会涉及到上下文敏感。我们当前先研究上下文敏感的指针分析。 1.上下文不敏感指针分析的缺陷 我们用一个例子来说明
阅读全文
摘要:最近在学习软件分析相关知识的过程中,很多老师都推荐了Soot这个代码分析工具,所以我就去学习了一下soot的基本用法。soot项目在github上的地址为:https://github.com/Sable/soot 1.Soot简介 soot是java优化框架,提供4种中间代码来分析和转换字节码。
阅读全文
摘要:本文是对于南京大学李樾和谭添老师开设的《软件分析》课程视频的笔记总结。相对应的视频在可以再B站上观看。 1.Motivation 上节回顾 在笔记3里我学习了CHA有关的概念和用法,用一个例子来复习一下: 如上图所示,定义了一个接口Number,然后有三个类继承了该接口,实例化了一个Number对象
阅读全文
摘要:1数据流分析基础 1.1停机问题 抽象方法 针对基础篇中的停机问题,我们可以试用抽象方法去尝试解决问题。邪恶程序存在的关键在于程序中有if存在 。因此可以采取以下方式。 1.1.1忽略掉所有程序的if条件部分 ~~~c void Evil(){ if(!Halt(Evil))return; else
阅读全文
摘要:本文是对于北京大学熊英飞老师《软件分析》课件以及南京大学李樾老师《软件分析》课程视频的总结。 1.哥德尔不完备定理及其在软件分析中应用 1.1定理内容 对任意能表示自然数的系统,一定有定理不能 被证明 1.2定理应用 主流程序语言的语法+语义=能表示自然数的形式系统 。 哥德尔不完备定理在处理内存泄
阅读全文