基于静态分析的Rust内存安全缺陷检测研究基于静态分析的Rust内存安全缺陷检测研究 报告人:徐辉 报告日期:2022.11.25 复旦大学 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 Rust语言 ❑ 系统级安全编程语言 ▪ 内存安全 ▪ 并发安全 ▪ 效率 2006年 2011年 handling drop(_0) 返回值 Auto Memory Reclaim问题:示例2 创建未初始化的变量foo Panic将导致访问未初始化内存 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 研究挑战和思路 ❑ 研究挑战:指针分析是NP-hard问题 ▪ 准确性:应采用路径敏感的指针分析算法,避免过多误报 ▪ 分析效率:应基于Rust MIR的特点对算法进行优化,使其可行 MIR的特点对算法进行优化,使其可行 ❑ 整体思路:基于编译过程中的生成的MIR进行静态分析 ▪ 路径提取:控制流图=>生成树 ▪ 别名分析:分析指针之间的关联关系 ▪ 模式识别:根据预定义的缺陷模式检测指针漏洞 路径提取 别名分析 模式识别 “SafeDrop: Detecting memory deallocation bugs of Rust programs via static data-flow0 码力 | 28 页 | 1.55 MB | 1 年前3
Comprehensive Rust(简体中文) 202412. . 273 53.6.1 开始使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 53.7 异常 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 53.8 Other projects C、C++ 和 Java 的互操作性。 你需要检出 AOSP。在同一机器上检出课程库,然后将 src/android/ 目录移至所检出的 AOSP 的根 目录。这将确保 Android 构建系统能检测到 src/android/ 中的 Android.bp 文件。 确保 adb sync 适用于你的模拟器或实际设备,并使用 src/android/build_all.sh 预构建所有 Android are accessed with method syntax, e.g., (a * b).saturating_add(b * c).saturating_add(c * a). 事实上,编译器会检测常量表达式的溢出情况,这便是为何该示例需要单独的函数。 5.5 类型推导 Rust 会根据变量的使用来确定其类型: fn takes_u32(x: u32) { println!("u32:0 码力 | 359 页 | 1.33 MB | 10 月前3
Rust 程序设计语言 简体中文版 1.85.0Rust 用来表明程 序因错误而退出。第九章 “panic! 与不可恢复的错误” 部分会详细介绍 panic。 使用 --release flag 在 release 模式中构建时,Rust 不会检测会导致 panic 的整型溢 出。相反发生整型溢出时,Rust 会进行一种被称为二进制补码 wrapping(two’s complement wrapping)的操作。简而言之,比此类型能容纳最大值还大的值会回绕 告问题并重试操作。 不可恢复的错误总是 bug 出现的征兆,比如试图访问一个超过数组末端的位置,因此我们要 立即停止程序。 大多数语言并不区分这两种错误,并采用类似异常(exception)这样方式统一处理它们。 Rust 没有异常。相反,它有 Result类型,用于处理可恢复的错误,还有 panic! 宏, 在程序遇到不可恢复的错误时停止执行。本章首先介绍 panic! 调用,接着会讲到如何返回 out; finished in 0.00s 现在让我们增加另一个测试,不过这一次是一个会失败的测试!当测试函数中出现 panic 时测 试就失败了。每一个测试都在一个新线程中运行,当主线程发现测试线程异常了,就将对应测 试标记为失败。第九章讲到了最简单的造成 panic 的方法:调用 panic! 宏。写入新测试 another 后,src/lib.rs 现在看起来如示例 11-3 所示: 文件名:src/lib 0 码力 | 562 页 | 3.23 MB | 29 天前3
Rust 程序设计语言简体中文版Rust 用来表明程序因错误而退出。第九章 “panic! 与不可恢复的错误” 部分会详细介 绍 panic。 使用 --release flag 在 release 模式中构建时,Rust 不会检测会导致 panic 的整型 溢出。相反发生整型溢出时,Rust 会进行一种被称为二进制补码 wrapping(two’s complement wrapping)的操作。简而言之,比此类型能容纳最大值还大的值会回绕 只想向用户报告问题并重试操作。 不可恢复的错误总是 bug 出现的征兆,比如试图访问一个超过数组末端的位置,因此我们要 立即停止程序。 大多数语言并不区分这两种错误,并采用类似异常这样方式统一处理它们。Rust 没有异常。 相反,它有 Result类型,用于处理可恢复的错误,还有 panic! 宏,在程序遇到不可 恢复的错误时停止执行。本章首先介绍 panic! 调用,接着会讲到如何返回 out; finished in 0.00s 现在让我们增加另一个测试,不过这一次是一个会失败的测试!当测试函数中出现 panic 时测 试就失败了。每一个测试都在一个新线程中运行,当主线程发现测试线程异常了,就将对应测 试标记为失败。第九章讲到了最简单的造成 panic 的方法:调用 panic! 宏。写入新测试 another 后, src/lib.rs 现在看起来如示例 11-3 所示: 0 码力 | 600 页 | 12.99 MB | 1 年前3
Rust并行编译的挑战与突破用优秀的设计消减数据同步代价 读写分离 限制作用范围 COPY-WRITE机制 优化并行粒度 任务粒度与并行效率的关系 rayon库中的粒度控制函数 死锁的检测和处理 基于rayon线程池的自动触发式死锁检测 通过有向图环路检测移除死锁 Rust社区与并行编译 Rust社区与并行编译 18年1月由编译器团队成员提出 成立社区工作组 陷入技术阻塞,人员逐渐流失 编译器Roadmap寻求帮助0 码力 | 25 页 | 4.60 MB | 1 年前3
Rust 语言学习笔记掌握的基础知识,并且重新调整了目录结构。 我个人对 Rust 语言设计的看法主要是:重大创新,却又博采众长。 Rust 为了解决内存安全问题重新设计了类型系统,提出了所有权的概念,同时 为了能够解决当前大多数语言无法检测到的运行时错误,rust 创造性地设计了 无畏并发。Rust 借鉴了很多优秀语言的设计理念,以及快速迭代的社区,这些 都是 Rust 受到赞赏的重要因素。 Rust 是一门系统级编程语言,被设计为保证内存和线程安全,并防止段错误。 #[cfg_attr(a, b)] 这表示若 a 成立,则这个就相当于#[cfg(b)]。 5.1.2.5 Linter 参数 目前的 Rust 编译器已自带的 Linter,它可以在编译时静态帮你检测不用的代码、死循环、编 码风格等等。Rust 提供了一系列的属性用于控制 Linter 的行为 allow(C) - 编译器将不会警告对于 C 条件的检查错误。 deny(C) - anonymous_fnmut() { let fn_name = "anonymous_fnmut"; let mut b = String::from("hello"); // rust 自动检测到 pushed_data 这个匿名函数要修改其外部的环境变量. // 因此自动推理出 pushed_data 是一个 FnMut 匿名函数. let pushed_data =0 码力 | 117 页 | 2.24 MB | 1 年前3
新一代分布式高性能图数据库的构建 - 沈游人Graph Technology Landscape 2020 • 图数据库 • 图数据建模 • 图计算引擎 • 图数据集成 • 可视化分析 • 知识图谱解决方案 • 图查询语言 • 欺诈检测 • 网络安全分析 • 社交网络分析 • BI 工具 • 图分析工具集 • 图咨询服务 Source : Graph Aware 图数据库发展趋势 AtlasGraph 研发背景 • 基于多版本乐观并发控制技术的分布式事 务实现,在保障一致性的前提下,提供优 秀的分析性能 分布式事务技术方案 MVOCC 处理流程 全面的算法支持 覆盖全部常用算法 • 路径计算、社区检测、相似度计算 等 丰富的自研图算法 • 环路识别、链路识别、节点间全路径、 发散子图识别、汇聚子图识别、金字塔 子图识别 与图数据库的深度结合 使用 cypher 语句直接调用 支持在用户筛选出的子图上计算0 码力 | 38 页 | 24.68 MB | 1 年前3
Rust 在算法交易中的实际应用与积极效应lead 股票 互联网新闻 外 部 交 互 交易所引擎 Web客户端 下单指令 信息回报 母单/信息上传 统计信息查询等 数据获取 模型训练 信号预测 交易指令 交易指令 涵盖异常的事前、事中、事后的全方位监控 基于 Rust 异步编程框架开发,风控逻辑可插拔,兼顾部署灵活性与执行性能 风控服务端和桌面客户端 Rust 全栈应用实践 - 桌面客户端、风控 高性能异步日志库0 码力 | 18 页 | 3.49 MB | 1 年前3
洛佳 组件化驱动、ROM运行环境与RustSBI上下文调用时先保存部分寄存器,让高级语言判断是 否进入完整流程,或给定需要设置的寄存器数量 • 尽量减少上下文切换对空间局部性的破坏 • 向量化陷入:硬件取向量,分流mtime、msoft等中断 过程和异常过程,进一步细化通路,明确上下文保存 需求 • 不同等级的上下文保存到不同结构体中,地址存于突 发寄存器,快速处理程序可为完整处理程序提供参数 • 项目地址:https://github.com/YdrMaster/fast-0 码力 | 21 页 | 3.12 MB | 1 年前3
刘用涛 CnosDB时序数据库的Rust实践中的枚举与 C 语言中的联合体 类似,如左图所示的枚举代码,实际 大小为16字节加8个字节的鉴别器, 总共24字节。 3.2 流式处理 3.2 流式处理 3.3 Rust 的锁 2. 异步死锁检测 https://github.com/tokio-rs/async-backtrace 1. sync rwlock parking_lot0 码力 | 26 页 | 3.28 MB | 1 年前3
共 15 条
- 1
- 2













