C语言代码静态检查学习笔记(结尾有惊喜)

2023-11-10

  • 静态检查
    • 静态分析的概念
      • 定义
        • 程序静态分析是指在不运行代码的方式下,通过各种分析工具对程序代码进行扫描并做出评估的过程。
      • 特点
        • 不实际执行程序,只是通过对代码的静态扫描对程序进行分析
        • 执行速度快、效率高
    • 静态分析技术
      • 类型检查
      • 风格检查
        • 风格检查程序所显示的错误常只是影响代码的可读性和可维护性,而不是程序运行过程中会发生的某种错误
      • 程序理解
        • 程序理解最主要的用途在于帮助理解程序,搞懂代码库中的大量代码。它是一个从计算机程序中获取知识信息的过程,这些知识信息可以用于程序排错、增强程序、重用程序和整理文档等工作。在很多集成开发环境(IDE)中,都包括了一些初级的程序理解功能,比如:查找本变量的声明和使用位置。更高级一点的还能帮助查找类之间的关联关系等。
      • 程序验证和属性检查
        • 程序验证是对源代码进行分析,如果源代码符合预先专门制定的一份描述程序行为的规格说明,那么则说明该程序完好。
        • 属性检查的方法跟程序验证的方法从本质上是一样的,它们的区别在于,属性检查依据的只是描述部分程序行为的部分规格说明,而程序验证依据的是描述所有程序行为的规格说明。
      • Bug查找
        • Bug查找是指按照预先制定的一些共同认同的规则,来查找程序中存在的一些bug。
      • 安全审查
        • 以安全为中心的静态分析
        • 现代安全分析工具往往更像是一种属性检查程序和bug查找程序的混合体,许多安全属性能被简洁的表达为程序属性,对于一个属性检查程序来说,搜索潜在的缓冲区溢出漏洞可以当做是检查这样的程序属性:“程序不会访问被分配内存的边界之外的地址”
        • 安全分析工具采纳了这样一种观念,即开发人员往往会继续再使用相同的不安全的方法来解决问题,这可说成是一种不安全的惯例。
      • 代码安全静态分析工具的引入
        • 对程序员来说,对安全编程所需的知识缺乏理解会导致其所编写的代码不符合安全规范而引发安全问题,另外,即使是经验丰富的程序员也无法完全避免在代码编写的过程中出现或多或少的拼写错误,这类简单错误有时也可能引发安全问题。
        • 静态分析工具能够完整而客观地进行程序检测,而不管编码人员是否了解哪些代码是与安全相关的。
        • 当一种新的攻击出现时,静态分析工具可以迅速地对相关代码进行复查,同时分析该新型攻击能否对代码构成威胁。在被发现之前,某些安全缺陷已在程序中存在很久了,静态分析工具有能力针对新发现的缺陷类型对遗留代码进行检查。
        • 尽管误报难以避免,但从安全的角度看,漏报才是最严重的局限性。
        • HP Fortify
    • 静态分析的过程
      • 提取源代码
      • 根据分析需求把程序源代码变换成易于分析处理的程序模型。在这个过程用到了编译原理中的成熟技术。
        • 语法分析
        • 语法解析
        • 抽象语法
        • 语义分析
        • 跟踪控制流
        • 跟踪数据流
        • 污染传播
        • 指针别名歧义
      • 将代码按照检查规则执行分析
        • 组成
        • 断言
        • 本地分析法
        • 全局分析
        • 定义及分类
          • 规则格式:专用的规则文件、批注
          • 用于传播的规则
          • 源规则
      • 按照制定的报告模式生成分析报告
        • 将所报告的结果进行分类并分组
        • 消除所报告的结果中非预期的部分
        • 对所报告结果的意义进行解释

兄弟们学累了看一会程序员笑话吧:

1、从前,有一个程序猿,他得到了一盏神灯。灯神答应实现他一个愿望。然后他向神灯许愿,希望在有生之年能写一个好项目。后来…后来…他得到了永生。

2、深度优先和广度优先:深度优先就是追一个mm追到底,直到失败然后换个mm继续追;广度优先就是同时追多个mm,一起发展。

3、前端工程师说,我去交友网站找女朋友去了。朋友问,找到了么?工程师说,找到了他们页面的一个bug……

4、我的初恋是C,曾经暗恋过java,迷恋过C++,C#也是过客,现在疯狂追求Python,而Ruby,PHP也渐渐闯入了我的视野…… 

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

C语言代码静态检查学习笔记(结尾有惊喜) 的相关文章

  • ZYNQ ARM核之SCU

    Snoop Control Unit 窥探控制单元 详情见UG585 SCU主要是解决ARM的L1和L2的缓存协调 因为两个processor的缓存是共用的 和AXI总线的ACP存取的 也就是DMA等高速中断需求的外设 SCU 块将两个 C
  • javascript 基础知识之derfer 妙用

    javascript 一般是加载完后立即执行 但是有些时候并不想立即执行 而是等到页面装载完毕时再执行 怎么实现这样的需求呢 答案就是使用
  • DHCP技术原理详解

    今天给大家讲解一下DHCP的原理和技术细节 本文从DHCP基本原理 实现流程和DHCP重启后的流程和租约和续约机制三个方面对DHCP进行了全方位的讲解 基本上涵盖了DHCP的全方面 一 DHCP基本原理 DHCP Dynamic Host
  • JDBC编程——JDBC连接数据库六步骤

    JDBC编程的6步骤 实现数据库连接之前 我们要先理解一下URL 统一资源定位器 是跟数据库进行连接的时候 用来连接到指定远程数据库标识符 可以在该URL中指定连接用户名和密码 同时 对于不同的数据库有不同的标识 URL 统一资源定位符 U

随机推荐

  • sort排序的用法

    https www cnblogs com stones dream p 10183210 html
  • 【IT项目管理】第七章课后习题

    完成作业1 3的要求 使用 project 或其他项目管理工具 1 成本模型如下图 2 为项目每个月制定成本基线如下图 3 已知 Budget at Completion BAC 200000 Planned Value PV 120000
  • 深度学习 图像融合使用笔记 2023 harmonized

    目录 cvpr2023 INR Harmonization即将开源 CDTnet没开源 DCCF 图像滤镜 变色 pil灰度图转opencv
  • java Type 详解

    转自 https blog csdn net gdutxiaoxu article details 68926515 为什么要写这一系列的博客呢 因为在 Android 开发的过程中 泛型 反射 注解这些知识进场会用到 几乎所有的框架至少都
  • 简约精致的目录浏览程序:Files Photo Gallery

    引言 灵均说尽孤高事 全与逍遥意不同 勿埋我心 该程序给勿埋我心的感觉就是特别的简单 从头到尾就是一个php文件 但是它能够实现的功能却不容小觑 它用作在线相册是个不错的选择 简单介绍一下 Files是一个单文件的PHP应用程序 可以拖放到
  • 基于YOLOv7的头部解耦改进

    基于YOLOv7的头部解耦改进 利用YOLOX解耦头优化YOLOv7 提高计算机视觉识别率 近年来 计算机视觉技术不断发展 其中物体识别技术的提升对于多个领域具有重要意义 目前 一种被广泛使用的物体识别算法是 YOLO You Only L
  • 算法讲解--选择排序、数组链表

    算法讲解 选择排序 数组链表 数组和链表 选择排序 本文是对 算法图解 的第二章的学习的笔记 欢迎多多指正 数组和链表 数组 使用数组存储item意味着所有item在内存中都是相连的 在数组中存储新的item可能很麻烦 because if
  • 剑指offer 学习笔记 连续子数组的最大和

    面试题42 连续子数组的最大和 输入一个整型数组 数组里有正数也有负数 数组中的一个或连续多个整数组成一个子数组 求子数组中数字的和的最大值 要求时间复杂度为O n 直观解法是枚举数组中所有子数组并求出它们的和 一个长度为n的数组 总共有n
  • idea 创建项目之后,不识别application.yml文件

    今天烦躁的是 创建了一个服务 项目的各个包都已经识别到了 源码包 配置包 然而 创建的application yml的文件没有识别为spring的小树叶加小齿轮的图标 而是一个YML的图标 意识到idea没有正常的工作 于是各种查原因 最后
  • Vue 2 - 常见面试题汇总大全

    文章目录 一 基础知识 1 vue 的生命周期 1 1 钩子函数 1 2 钩子函数的使用方法 1 3 父子组件生命周期构造函数执行顺序 2 v show 与 v if v for 2 1 v show 与 v if 的区别 2 2 v if
  • 一元函数中的导数、微分和不定积分的关系

    在同济大学高等数学教材里 关于微分和不定积分有如下介绍 老猿在这里思考了很久 到底是微分与积分运算互逆 还是求导数与积分运算互逆 导数与微分是什么关系 查阅了各种资料 莫衷一是 有说导数是积分逆运算的 也有说微分是积分逆运算的 还有说微分和
  • 导出文件 java.util.zip.ZipException: invalid stored block lengths

    提取压缩文件会引发错误 无效的存储块长度 解决方法是 添加maven resources plugin插件 指定文件类型不编码
  • Spring Boot 统一设置Json数据返回风格(Java驼峰命名转下划线)

    编写重写了WebMvcConfigurerAdapter的配置类 Configuration EnableWebMvc public class WebMvcConfig extends WebMvcConfigurerAdapter 统一
  • vuejs入门项目-产品售卖平台

    项目已经上传github 项目github地址 1 项目介绍 本项目主要是利用vuejs实现一个产品售卖的平台 vuejs的重要思想之一就是组件化 在本项目中也将不同的小模块进行组件化 这样可以重复利用一些模块 复用代码 减少代码的冗余 利
  • Android端RSA加密,服务端无法解密的一个坑

    关于加密填充方式 Android端RSA加密过的数据 服务器端死活解密不了 原来android系统的RSA实现是 RSA None NoPadding 而标准JDK实现是 RSA None PKCS1Padding 这造成了在android
  • FIX协议介绍与QuickFIX使用入门(上)

    定义 FIX协议是由国际FIX协会组织提供的一个开放式协议 目的是推动国际贸易电子化的进程 在各类参与者之间 包括投资经理 经纪人 买方 卖方建立起实时的电子化通讯协议 FIX协议的目标是把各类证券金融业务需求流程格式化 使之成为一个个可用
  • 50道web前端工程师面试题及答案解析,你学会了吗

    简介 本文包含了50个实用的前端面试题及答案解析 涵盖了HTML CSS JavaScript DOM Ajax MVC 模块化 ES6 SPA Webpack Babel Virtual DOM 响应式设计 移动优先设计 响应式图片 CS
  • 常用的传输媒体有哪些,各有什么特点

    常见的传输媒体有以下几种 1 双绞线 双绞线分屏蔽双绞线和无屏蔽双绞线 由两根相互绝缘的导线组成 可以传输模拟信号 也可以传输数字信号 有效带宽达250kHz 通常距离一般为几道十几公里 导线越粗其通信距离越远 在数字传输时 若传输速率为每
  • eterm系统服务器地址,Eterm管理系统

    Eterm管理系统提供用户管理 PID管理 分组管理 角色管理 指令管理等功能 可以帮助用户管理自己的设备 适合企业使用 企业可以在软件添加多种设备到软件管理 可以分组管理不同的网络设备 可以为管理员设置账户 可以在软件编辑控制设备的指令
  • C语言代码静态检查学习笔记(结尾有惊喜)

    静态检查 静态分析的概念 定义 程序静态分析是指在不运行代码的方式下 通过各种分析工具对程序代码进行扫描并做出评估的过程 特点 不实际执行程序 只是通过对代码的静态扫描对程序进行分析 执行速度快 效率高 静态分析技术 类型检查 风格检查 风