【静态分析】静态分析笔记01 - Introduction
参考:
BV1zE411s77Z
[南京大学]-[软件分析]课程学习笔记(一)-introduction_南京大学软件分析笔记-CSDN博客
------------------------------------------------------------------------------------------------------
1. program language and static analysis
背景:在过去的十年中,语言的核心基本没有变化,但是程序变得显著的更大和更复杂。
挑战:如何确保大规模复杂程序的可靠性、安全性和其他承诺。
2. why we learn static analysis
2.1 程序的可靠性 reliability:
- null pointer dereference 空指针引用
- 去引用的时候没有 define,就会带来很多 bug
- memory leak 内存泄漏
- malloc 没有 free,内存占用过多会导致 crash
2.2 程序的安全性 security:
- private information leak 私有信息的泄露
- injection attack 注入攻击
2.3 编译器优化
- dead code elimination 死代码消除
- code motion 代码移动
2.4 程序理解
- IDE call hierarchy 调用层次
- type indication 类型指示
3. what is static analysis
静态分析通过分析程序 P 来推理其行为,并在运行 P 之前确定其是否满足某些属性。
Does P contain any private information leaks?
Does P dereference any null potinters?
Are all the cast operations in P safe? 类型转换操作符
Can v1 and v2 in P point to the same memory location?
Will certain assert statements in P fail?
Is this piece of code in P dead(so that it could be eliminated)?
一个 perfect static analysis 是不存在的。
从学术的角度来看,一个 perfect 的 static analysis 需要满足以下两个条件:
- sound: over approximate
- complete: under approximate

所以并不追求完美的静态分析,而是追求 useful static analysis:
- Compromise soundness (false negatives)
- Compromise completeness (false positives)
绝大多数静态分析追求的都是追求Soundness,会造成误报;在确保soundness的同时,在分析精度和分析速度之间做好权衡。
4. static analysis features and examples
Abstraction + Over-approximation(抽象和过近似)
- abstraction
- over-approximation
- transfer function
- control flows
Example:
判断给定的程序中所有变量的符号:正、负或者是0.
- T(Top):unknow 可正可负(over-approximation 过近似)
- bottom:undefined,除零操作,抛出异常操作

transfer function 定义了如何在抽象值上评估不同的程序状态,并且应该根据分析问题和不同程序状态的语义去定义。

图:Transfer functions
- 1问题是除零、抛出异常,则应该为 undefined;
- 2问题是下标为负,抛出异常,也应该为 undefined
- 3问题则是 over-approximated,也即是误报,在实际的程序中 a=x+y=9,所以并不会报错,而在抽象化为符号的过程中会模糊这个界限,导致产生误报

图:Control Flows
控制流分析,y 的两个值是两个branch,执行分支不同会使 z 的值产生变化。并且在实际中枚举所有路径是不可能的,空间特别庞大,因此 flow merging 则被很多静态分析采用。
相关文章:
【静态分析】静态分析笔记01 - Introduction
参考: BV1zE411s77Z [南京大学]-[软件分析]课程学习笔记(一)-introduction_南京大学软件分析笔记-CSDN博客 ------------------------------------------------------------------------------------------------------ 1. program language and static analysis…...
使用的sql
根据CODE去重 SELECT * FROM ( SELECT count( camera_code ) AS count, camera_code FROM n_camera_basic GROUP BY camera_code ) t WHERE t.count >1 DELETE FROM n_camera_basic WHERE camera_id NOT IN (SELECT dt.minno…...
【ZZULIOJ】1052: 数列求和4(Java)
目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy code 题目描述 输入n和a,求aaaaaa…aa…a(n个a),如当n3,a2时,222222的结果为246 输入 包含两个整数,n和a,含义如上述,你可以假定n和a都是小于10的非负整…...
【Linux】tcpdump P3 - 过滤和组织返回信息
文章目录 基于TCP标志的过滤器格式化 -X/-A额外的详细选项按协议(udp/tcp)过滤低详细输出 -q时间戳选项 本文继续展示帮助你过滤和组织tcpdump返回信息的功能。 基于TCP标志的过滤器 可以根据各种TCP标志来过滤TCP流量。这里是一个基于tcp-ack标志进行过滤的例子。 # tcpdump…...
vscode免费登录ssh ,linux git配置免密码
1、vscode远程ssh免密 在windows下生成密钥 , cmd窗口下执行 ssh-keygen -t rsa 在C:\Users\xxxx\.ssh目录下生成 在linux下面 cd .ssh 创建authorized_keys 文件, 把之前windows下生成的 id_rsa.pub内容复制进去 2、gitlab 配置。 在linux下面 ssh-keygen -t rs…...
Netty 心跳(heartbeat)——服务源码剖析(上)(四十一)
剖析目的 Netty 作为一个网络框架,提供了诸多功能,比如编码解码等,Netty 还提供了非常重要的一个服务----心跳机制 heartbeat.通过心跳检査对方是否有效,这是 RPC 框架中是必不可少的功能。下面我们分析一下 Netty 内部心跳服务源码实现。 源…...
C语言—每日选择题—Day65
前言 我们的刷题专栏又又又开始了,本专栏总结了作者做题过程中的好题和易错题。每道题都会有相应解析和配图,一方面可以使作者加深理解,一方面可以给大家提供思路,希望大家多多支持哦~ 第一题 1、如下代码输出的是什么…...
【环境变量】基本概念理解 | 查看环境变量echo | PATH的应用和修改
目录 前言 基本概念&理解 注意的点 查看环境变量的方法 PATH环境变量 PTAH应用系统指令 PTAH应用用户程序 命令行参数的修改(内存级) 配置文件的修改 windows环境变量 大家天天开心🙂 bash进程的流程。环境变量在系统指…...
5.7Python之元组
元组(Tuple)是Python中的一种数据类型,它是一个有序的、不可变的序列。元组使用圆括号 () 来表示,其中的元素可以是任意类型,并且可以包含重复的元素。 与列表(List)不同,元组是不可…...
Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之一 简单视频放大抖动效果
Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之一 简单视频放大抖动效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之一 简单视频放大抖动效果 一、简单介绍 二、简单视频放大抖动效果实现原理 三、简单视频放大…...
如何通过VPN访问内网?
VPN(Virtual Private Network)是一种通过公共网络建立私有网络连接的技术,可以在不同地点的网络中建立安全通道,实现远程访问内网资源的目的。本文将介绍如何通过VPN访问内网,并介绍一款名为“天联”的VPN服务。 什么是…...
RabbitMQ3.13.0起支持MQTT5.0协议及MQTT5.0特性功能列表
RabbitMQ3.13.0起支持MQTT5.0协议及MQTT5.0特性功能列表 文章目录 RabbitMQ3.13.0起支持MQTT5.0协议及MQTT5.0特性功能列表1. MQTT概览2. MQTT 5.0 特性1. 特性概要2. Docker中安装RabbitMQ及启用MQTT5.0协议 3. MQTT 5.0 功能列表1. 消息过期1. 描述2. 举例3. 实现 2. 订阅标识…...
常用脚本01 - 生成证书
1 生成证书 第一步、准备脚本文件 [rootharbor-01 ssl]# vim gencert.sh #!/usr/bin/env bash set -eDOMAIN"$1" IP"$2" WORK_DIR"$(mktemp -d)"if [ -z "$DOMAIN" ]; thenecho "Domain name needed."exit 1 fiecho "…...
【jQuery】jQuery框架
目录 1.jQuery基本用法 1.1选择器 1.2jQuery对象 1.3事件绑定 1.4链式编程 1.5过滤方法 1.6样式操纵 1.6属性操纵 1.7操作value 1.8查找方法 1.9类名操纵 1.10事件进阶 1.11触发事件 1.12window事件绑定 2.节点操作与动画 2.1获取位置 2.2滚动距离 2.3显示/隐…...
使用OMP复原一维信号(MATLAB)
参考文献 https://github.com/aresmiki/CS-Recovery-Algorithms/tree/master MATLAB代码 %% 含有噪声 % minimize ||x||_1 % subject to: (||Ax-y||_2)^2<eps; % minimize : (||Ax-y||_2)^2lambda*||x||_1 % y传输中可能含噪 yyw % %% clc;clearvars; close all; %% 1.构…...
Linux安装最新版Docker完整教程
参考官网地址:Install Docker Engine on CentOS | Docker Docs 一、安装前准备工作 1.1 查看服务器系统版本以及内核版本 cat /etc/redhat-release1.2 查看服务器内核版本 uname -r这里我们使用的是CentOS 7.6 系统,内核版本为3.10 1.3 安装依赖包 …...
iOS object-c self关键字总结
在Objective-C中,self 关键字是一个指向当前对象的指针。它是对象自身实例的别名,通常在对象内部的方法中使用,以提供一个指向当前对象的引用。使用 self 可以帮助你访问对象的属性和方法,特别是在处理消息传递和方法调用时。 以…...
京东云16核64G云服务器租用优惠价格500元1个月、5168元一年,35M带宽
京东云16核64G云服务器租用优惠价格500元1个月、5168元一年,35M带宽,配置为:16C64G-450G SSD系统盘-35M带宽-8000G月流量 华北-北京,京东云活动页面 yunfuwuqiba.com/go/jd 活动链接打开如下图: 京东云16核64G云服务器…...
hive管理之ctl方式
hive管理之ctl方式 hivehive --service clictl命令行的命令 #清屏 Ctrl L #或者 ! clear #查看数据仓库中的表 show tabls; #查看数据仓库中的内置函数 show functions;#查看表的结构 desc表名 #查看hdfs上的文件 dfs -ls 目录 #执行操作系统的命令 !命令…...
cpp 内存分区模型
c程序在执行前,将内存大方向划分为4个区域。 1.代码区:存放函数的二进制代码,有操作系统进行管理 2.全局区:存放全局变量和静态变量以及常量 3.栈区:由编译器自动分配释放,存放的函数参数和局部变量 4.…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
