码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【软件分析第13讲-学习笔记】符号执行 Symbolic Execution


    文章目录

    • 前言
    • 正文
      • 符号执行
      • 基于霍尔逻辑的符号执行
      • 谓词转换计算
        • 最弱前置条件
      • 动态符号执行
      • 符号执行:进一步探究
    • 小结
    • 参考文献

    前言

    创作开始时间:2022年11月16日18:46:31

    如题,学习一下符号执行 Symbolic Execution的相关知识。参考:熊英飞老师2018《软件分析》课件。

    正文

    符号执行

    程序的规约通常表示为前条件和后条件。

    形成命题:

    1. 前条件->后条件
    2. 命题成立=逆命题不可满足
    3. 用SMT solver可求解

    用符号执行发现:

    • 缓冲区溢出
    • 除零错
    • 路径可行性

    基于霍尔逻辑的符号执行

    霍尔三元组:{前条件}语句{后条件}

    霍尔逻辑表示三者之间的推导关系。又称为公理语义

    霍尔逻辑规则:

    • 空语句(Empty statement axiom schema)
    • 赋值语句(Assignment axiom schema)
    • 合成规则(Rule of composition)
    • 条件规则(Conditional rule)
    • 推导规则(Consequence rule)
    • 循环规则(While rule)

    在这里插入图片描述
    可参考:

    • 霍尔逻辑Hoare Logic https://blog.csdn.net/Campsisgrandiflora/article/details/111410348
      这篇博客讲的挺详细的。
      在这里插入图片描述
      大概了解了这个证明过程。

    谓词转换计算

    最弱前条件计算:给定后条件和语句,求能形成霍尔三元组的最弱前条件
    最强后条件计算:给定前条件和语句,求能形成霍尔三元组的最强后条件

    基于谓词转换的符号执行:

    • 给定输入需要满足的条件 P ,代码 c ,输出需要满足的条件Q
    • 前向符号执行:基于P、c计算最强后条件Q’,验证Q’->Q
    • 后向符号执行:基于Q、c计算最弱前条件P’,验证P->P’

    最弱前置条件

    参考:

    • weakest-precondition https://www.cs.umd.edu/~mvz/handouts/weakest-precondition.pdf
    • Weakest Precondition Calculus https://comp.anu.edu.au/courses/comp2600/Lectures/19wp1.pdf

    Starting with a post-assertion, what is the weakest pre-condition that makes the assertion true?
    In other words, what must be true before to make the assertion true after?

    如果A->B,但是B不->A。那么B比A更弱。(相当于B包含了A)

    在这里插入图片描述

    赋值语句的示例:
    在这里插入图片描述

    还是比较好理解的。

    更多的例子就不一一列出,可访问原参考链接。

    动态符号执行

    • 混合程序的真实执行和符号执行
    • 在约束求解无法进行的时候,用真实值代替符号值
    • 代表工作:Concolic Testing,Execution Generated Testing

    看了下案例:

    在这里插入图片描述

    好处应该就是可以根据具体的状态(Concrete state)求解能够探索新路径的值。可以不断迭代,从而遍历所有路径。

    符号执行:进一步探究

    参考:

    • Symbolic execution https://courses.cs.washington.edu/courses/cse403/16au/lectures/L16.pdf

    在这里插入图片描述

    符号执行可以生成一个具体的输入,使得程序出错(不符合规约)。但是不能证明程序没错。

    用自动定理证明器(如SAT、SMT求解器)来求解是否存在使程序出错的具体输入值。

    在这里插入图片描述

    小结

    大概明白了符号执行。后续再补充完善。

    创作结束时间:2022年11月16日20:20:44

    参考文献

  • 相关阅读:
    python(自4) xpath下载 lxml安装 lxml语法 使用方式
    通过内网穿透远程控制家中Home Assistant智能家居系统
    【EF Core】主从实体关系与常见实体关系的区别
    【限时优惠】RHCE9.0培训考证-红帽官方授权中心
    Mybatis知识【Mybatis快速入门】第二章
    界面组件Kendo UI for Angular——让应用数据显示更直观!(一)
    Vue3 快速上手从0到1,两小时学会【附源码】
    03、自定义镜像上传阿里云
    窦华书教授在纳维-斯托克斯(NS)方程问题上取得新进展
    【JAVA】HTTP协议
  • 原文地址:https://blog.csdn.net/weixin_39278265/article/details/127890944
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号