南京大学《软件分析》笔记01 - 静态分析的基本概念

2023-11-01

Rice’s Theorem

“Any non-trivial property of the behavior of programs in a r.e. language is undecidable.”

r.e.(recursively enumerable) = recognizable by a Turing-machine
所有我们感兴趣的,需要静态分析的部分,都是non-trivial的。
这句话的意思就是,没有一个完美的静态分析算法可以对一个non-trivial的程序给出一个绝对准确的结果。
完美的静态分析要求既Sound,又Complete。Sound可以理解为全面,Complete可以理解为准确。
Rice's throrem
注:这里与原作者的图稍有出入,原作者将False Negatives放在了Truth下边,我认为是不对的,本图是按我自己的理解绘制的
虽然根据Rice’s Theorem我们无法实现一个perfect的静态分析,但我们还是可以实现一个userful的静态分析算法。
一般来说,如果说某一个静态分析算法是userful的,那他要么Compromise soundness,要么Compromise completeness

  • Compromise soundness(false positives)
  • Compromise completeness(false negatives)

A false positive is an error in binary classification in which a test result incorrectly indicates the presence of a condition (such as a disease when the disease is not present), while a false negative is the opposite error, where the test result incorrectly indicates the absence of a condition when it is actually present. These are the two kinds of errors in a binary test.

而市面上的静态分析,大多数都是sound的。
Static Analysis: ensure(or get close to)soundness, while making good trade-offs between analysis precision and analysis speed.

Abstraction + Over-approximation

静态分析可以分为may analysis和must analysis。
may analysis可以用两个单词来概括,分别是abstraction和over-approximation
abstraction是may analysis和must analysis两者公有的特性,既然over-approximation是may analysis的特性,那参考上图,under-approximation就是must-analysis的特性呗。

Abstraction

抽象就是将程序里的具体的值转变为特定的几个符号,这样做的意义是减少状态空间的域,加快分析的速度。举个栗子。
abstraction
这个栗子定义了五个符号,分别代表了正数、负数、零、unknown(一般称为top)和undefined(一般称为bottom),上图前四条比较好理解,在此不再过多赘述,主要解释一下第五和第六条吧。
第五条的变量v有两种可能性,要么是正数1要么是负数-1,所以我们无法把它归入正数、负数、零这三类中的任何一类,只好新增一类unknown来归入那些具有多种可能性的语句。
第六条的变量v会产生除0异常,类似第五条,我们新增一个undefined来归入这些会产生异常的语句。

Over-approximation

over-approximation包括Transfer functions和Control flows。

Transfer functions

在静态分析中,transfer functions就是根据分析目的和不同程序语句的语义制定的一套转换规则。
transfer functions作用在抽象域(Abstract Domain)。
比如,我们可以制定下图的八个规则。
transfer-rule
通过上图这八个规则,我们就可以做一些除0检测或是数组负数下标检测了。
transfer-stm
通过观察上图经过transfer function转换的结果,我们就可以很轻易的看出最下边的三条语句可能会产生异常,但如果想要知道具体是哪条语句除0异常,哪条是数组负数下标异常,那就需要更进一步的静态分析了。
另外还需要指出的是,抽象不考虑具体数值,在本例中,最后一条语句是不会产生异常的,但在我们的over-approximated静态分析中,它会false positive。也就是说它会误报,但总体来说它是useful的。

Control Flows

可以说transfer function是语句的over-approximation,而control flow则是语句和语句之间关系的over-approximation。
control-flows
在实际应用中,枚举所有的路径几乎是不可能的事情,所以在绝大多数的静态分析中,都会采取control-flow的flow merging来加快分析的速度,即多个箭头指向同一语句时进行归并,如上图中绿框所示。

南京大学《软件分析》01: https://www.bilibili.com/video/BV1b7411K7P4
我的博客:https://yanzhichen.top

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

南京大学《软件分析》笔记01 - 静态分析的基本概念 的相关文章

  • 静态分析简介

    一 程序静态分析简介 Program Static Analysis 程序静态分析简介 Program Static Analysis 是指在不运行代码的方式下 通过词法分析 语法分析 控制流 数据流分析等技术对程序代码进行扫描 验证代码是
  • jenkins安装pmd对代码进行静态分析

    1 在Jenkins的插件管理中 安装PMD Plugin插件 2 在被编译的代码中 增加如下配置 1 顶级pom中 在dependencyManagement中增加对PMD插件的依赖
  • 安全工具箱必备技术之静态分析安全测试(SAST)

    有几种技术可以识别软件和系统的漏洞 聪明的组织把它们放在他们的 安全工具箱 中 并使用各种测试工具的组合 包括 静态分析安全测试 SAST 动态分析安全测试 DAST 源成分分析 SCA 漏洞扫描器 渗透测试 通过自动化工具提高安全性的动机
  • Fortify自定义规则笔记(一)

    一 Fortify SCA 自定义规则介绍 Fortify是一款强大的静态代码扫描分析工具 其发现代码漏洞缺陷的能力十分强悍 主要是将代码经过编译 依托于其强大的内置规则库来发现漏洞的 其次fortify SCA 团队在开发此商业工具时 也
  • lecture1 Introduction-笔记

    本文参考了该作者的一些图解和见解 https zhuanlan zhihu com p 128156349 由于疫情原因 偶然间学习了南大的软件分析 Static Analysis 课程 后面会用SA来替代Static Analysis 因
  • SAT&SMT

    前言 本文性质 个人学习笔记 SAT SATISFIABILITY 布尔可满足性问题 SMT Satisfiability Modulo Theories 可满足性模理论 根据哥德尔不完备定理 停机问题 莱斯定理 我们可以知道在有限时间内是
  • 代码审查领域所面临的瓶颈分析

    代码审查是检查代码中存在缺陷的重要手段 通常分为两阶段进行 一个阶段在代码解析阶段进行 主要应用词法分析 语法分析以及控制流分析等技术检测同数据传递无关的代码缺陷 另外一个阶段是在代码解析后进行 主要应用数据相关路径遍历等技术检测同数据相关
  • CWE-通用弱点枚举简介

    对于软件来说 安全是航空 航天 军工 电力 金融等关键行业极为重视的特性之一 因此 保证软件尽量安全是软件研发人员的重要责任 可以说 软件安全漏洞是软件研发者的一大死敌 古语有云 知彼知己 百战不殆 要想取得战争的胜利 就要尽可能充分认识软
  • 南京大学《软件分析》笔记01 - 静态分析的基本概念

    Rice s Theorem Any non trivial property of the behavior of programs in a r e language is undecidable r e recursively enu
  • Gimpel Software推出C和C ++的首选静态分析工具 PC-lint Plus,不再维护PC-lint/FlexeLint。

    Gimpel Software已不再维护PC lint FlexeLint版本9 最终更新是2014年发布的版本9 00L Gimpel Software在2018年底之前为PC lint FlexeLint提供技术支持 Gimpel So
  • Memory shadowing

    Memory shadowing in the context of dynamic analysis usually refers to a technique where a parallel or shadow memory spac
  • 【静态分析】【系列1-南大软件分析】1.0 导论学习笔记

    文章目录 印象回顾 二刷复习 主要内容 课程说明 本节划重点 个人理解重点和扩展 理解并记忆内容 扩展信息 南大硕士招生信息 印象回顾 昨天看了南大 软件分析 的第一节导论 回忆一下还记得哪些重要内容 此部分回顾不打算纠正 静态分析概念 在
  • [论文笔记] GENDA: A Graph Embedded Network Based Detection Approach on encryption algorithm

    GENDA A Graph Embedded Network Based Detection Approach on encryption algorithm of binary program JISA 2022 Xiao Li Scho
  • 恶意软件的检测和攻击 文献整理

    本文按照时间顺序整理了恶意软件攻防对抗 或更进一步是机器学习 深度学习的安全 近些年来的文献发表情况 希望能和对该领域感兴趣的研究人员做一个分享 有些文献我只是大概地浏览了一下 如下文有错误 请为我指出来 感激不尽 感兴趣的朋友可以在评论里
  • under-approximation & over-approximation

    Under approximation and over approximation are concepts often used in the context of formal methods a field that applies
  • “基于机器学习算法的推荐系统” 在软件静态分析领域的应用方法

    一 软件静态分析背景 软件静态分析的相当部分的内容就是发现代码中的缺陷 缺陷的形式往往五花八门 各式各样 每当发现一个缺陷 测试人员首先会感到高兴 终于抓到了一条 虫 可继而很可能会感到心虚 因为 在现有技术条件下 一条软件行业的规律是仍然
  • 【软件分析/静态分析】学习笔记01——Introduction

    课程链接 李樾老师和谭天老师的 南京大学 软件分析 课程01 Introduction 哔哩哔哩 bilibili 目录 一 静态程序分析介绍 1 1 PL and Static Analysis 程序语言和静态分析 1 2 为什么要学 S
  • [网络安全自学篇] 八十八.基于机器学习的恶意代码检测技术详解

    这是作者网络安全自学教程系列 主要是关于安全工具和实践操作的在线笔记 特分享出来与博友们学习 希望您喜欢 一起进步 前文分享了传统的恶意代码检测技术 包括恶意代码检测的对象和策略 特征值检测技术 校验和检测技术 启发式扫描技术 虚拟机检测技
  • TscanCode C/C++静态分析开源分析工具安装与使用

    TscanCode是腾讯静态分析团队开发的一款开源免费的C C 静态分析工具 由于其比较简单实用 准确率较高 并且扫描C C 代码不需要进行编译 所以个人觉得对C C 项目开发挺有帮助的 就简单介绍一下该工具的安装与使用 1 Tscanco
  • 国军标 软件测评 静态分析常见问题总结

    违背国军标R x x x 禁止 define被重复定义 没有用 undef 解除前面的定义 违背国军标R 1 1 7 以函数形式定义的宏 参数和结果必须用括号括起来 违背国军标R 1 1 13 函数声明中必须对参数类型进行声明 并带有变量名

随机推荐

  • 一张图看懂小程序全生态!目前总结最全的,没有之一

    本文为微信公众号 造个程序 ID zgcx007 原创 授权CSDN首发 版权归作者所有 责编 陈秋歌 关注微信开发等领域 寻求报道或者投稿请发邮件至chenqg csdn net 2017年1月9日 小程序发布在万众瞩目中发布 不仅占据了
  • k8s-进阶-工作负载

    一 控制器 Pod 容器组 是 Kubernetes 中最小的调度单元 您可以通过 kubectl 直接创建一个 Pod Pod 本身并不能自愈 self healing 如果一个 Pod 所在的 Node 节点 出现故障 或者调度程序自身
  • 《MFC添加语音功能》

    MFC一般提示都是用消息对话框来处理 同时我们也可以加上语音播报功能 语音播报我们可以调用微软自带的Microsoft Speech API SAPI 5 4 它里面有语音识别 还有有一个Text to Speech 引擎 可以将文本转化为
  • 目标检测——YOLOv3、YOLOv4、YOLOv5、YOLOv7正负样本匹配、YOLO3损失函数理解

    系列文章目录 目标检测 map概念 IoU汇总IoU GIoU DIoU CIoU SIoU EIoU Wiou Focal alpha 目标检测 YOLOv3 YOLOv4 YOLOv5 YOLOv7正负样本匹配 YOLO3损失函数理解
  • linux redhat 离线安装 mysql 8.0.20

    官方文档 https dev mysql com doc refman 8 0 en linux installation rpm html 以下操作都是用 root 用户操作 另配置文件是使用mysqld initialize 生成的 e
  • kafka消费主题和消费组总结

    1 查询kafka主题列表的命令 切换到kafka的安装目录bin目录下 执行如下代码 kafka topics sh list zookeeper zookeeprerIp zookeeperPort 比如 kafka topics sh
  • WSL 的安装、报错解决、使用技巧

    需要Windows10或以上系统版本 如果你的操作系统是Windows 10 版本 2004 及更高版本 内部版本 19041 及更高版本 或 Windows 11 并且你从来没有安装过WSL 你可以使用命令行简单的安装安装 WSL 使用管
  • linux Oops和Panic关系

    常在河边走 哪能不湿鞋 用Linux 总有死机的时候 如果运气好 会看到一些所谓 Oops 信息 在屏幕上或系统日志中 比如 Unable to handle kernel paging request at virtual address
  • 印象笔记、为知笔记、有道云笔记使用比较

    特点比较 印象笔记 为知笔记 有道云笔记 Bear Typora 特点比较 功能 印象笔记 为知笔记 有道笔记 费用 免费 有会员 60 元 年 免费 有会员 手机 PC 云同步 微信保存 网页剪藏 笔记内容加密 共享笔记本 快捷键 批量导
  • 完整LUT解释说明

    什么是LUT 我们业内在LUT的应用方面有着许多混乱的认识 很多人会把LUT看成是一种 黑魔法 然而实际上它们是再正常不过的东西 因此为了帮助大家了解LUT的定义和工作原理 本文将会尽可能详细地为大家讲述LUT以及它的应用 包括用于校准的技
  • 简介JSONObject的各种用法

    1 java对象转化成String String s JSONObject toJSONString javaObject class 2 java对象转化成Object Object str JSONObject toJSON javaO
  • SW-3配置文件

    CS6200 28X EI config hos SW 3 SW 3 config vlan 10 SW 3 config vlan10 name FB YX SW 3 config vlan10 vlan 20 SW 3 config v
  • 树莓派Raspbian Buster/Debian 10 安装ROS

    目录 一些补充 安装ROS 初始化rosdep 测试 平台 树莓派4B 系统版本 2020 05 27 raspios buster arm64 img 一些补充 系统安装参考 树莓派学习笔记 一 烧录系统 无屏幕 配置Wifi和SSH服务
  • QT 元对象解析 及和其他语言区别

    说Qt信号与槽是一个很好机制 不如说Qt的元对象系统很强大 这也是大家讲Qt就必须将信号与槽 讲信号与槽就要讲Qt的元对象系统 当然初学者知道怎么用就OK啦 当然随着你写的代码越多 接触的平台越多的时候 你就会好奇Qt是如何把两个 多个 任
  • Java程序——检索文件(含内容)

    项目说明 给定一个指定目录和关键字 扫描其中的文件名和文件内容 找到包含关键字的文件 完整代码 import java io File import java io FileInputStream import java io IOExce
  • 利用find命令进行批量操作

    前些天 我要把Linux上的几千个txt文档进行转码 需要用到iconv命令 可是我总不能 一个一个的去敲 文档转码命令 iconv f GBK t UTF 8 file1 o file2 将file1从GBK转为UTF 8 并输出为fil
  • Wireshark抓包体验

    1 嗅探器原理 嗅探技术是网络安全攻防技术中很重要的一种 通过它可以获取网络中的大量信息 与主动扫描相比 嗅探更难以被察觉 能够对网络中的活动进行实时监控 网络嗅探器实际上就是网络中的窃听器 其用途就是捕获分析网络中的数据包 帮助网络管理员
  • CMake方式配置PCL+VS开发环境

    PCL VS安装配置其他方式看下面博客 本文链接 win10 vs2019 pcl1 11 0安装教程 a zhua66的博客 CSDN博客 win10 安装pcl 考虑到配置属性表 xxx props 非常麻烦繁琐 换设备又得重新选择PC
  • 电源设计问题

    目录 一 电源器件 1 法拉电容 二 充电规则 1 充电限制 2 充电时间计算 三 有线充电 四 无线充电 一 电源器件 1 法拉电容 超级电容具有功率密度高 充放电时间短 循环寿命长 工作温度范围宽等显著的优点 适合应用在大功率能量流动的
  • 南京大学《软件分析》笔记01 - 静态分析的基本概念

    Rice s Theorem Any non trivial property of the behavior of programs in a r e language is undecidable r e recursively enu