Rust API可靠性分析与验证Conf 2021 – 2022, Online, China 姜剑峰 Rust API可靠性分析与验证 Rust China Conf 2021 – 2022, Online, China 主题内容 • Rust第三方库API可靠性现状 • 现用方法的局限性 • 基于程序合成+模糊测试的可靠性分析方法 Rust China Conf 2021 – 2022, Online, China China Rust静态检查与动态检查 静态检查: • 基于所有权和生命周期的内存管理模型:内存安全 • 通过trait来确保代码符合某些规范:Send, Sync, Unpin等 动态检查: • 数组越界 • 整数溢出 • Unicode字符边界 Rust China Conf 2021 – 2022, Online, China Rust API 可靠性 现有的机制是否足够呢? unsafe代码没有破坏内存安全性 • no memory leakage • panic free 在任何合法使用API的情况下 • 所有静态检查提供的保证都应该被满足(不应该被unsafe所破坏) • 所有动态检查都不应该被违背(可以被安全的移除),除非panic是一种 允许的行为 Rust China Conf 2021 – 2022, Online, China 现有的可靠性分析方法及其局限性0 码力 | 13 页 | 1.68 MB | 1 年前3
Await-Tree Async Rust 可观测性的灵丹妙药 - 赵梓淇Await-Tree Async Rust 可观测性的灵丹妙药 赵梓淇 Bugen Zhao Await-Tree Async Rust 可观测性的灵丹妙药 Await-Tree 的 设计原理与实现 2 回顾 Async Rust 的设计与痛点 1 Await-Tree 的 应用与真实案例 3 Await-Tree Async Rust 可观测性的灵丹妙药 Await-Tree 的 设计原理与实现 poll 驱动的状态机 • 组合嵌套为调度单元: Task • async fn 语法糖 Async Rust 观测与调试的痛点 Async Rust 回顾 • 特性: Future 灵活的可组合性 • 任意定制 Poll 的执行逻辑 (Join / Select / Timeout) • 动态的调用关系 • 痛点:观测与调试工具无法理解灵活的执行逻辑 • Backtrace 不够直观 ( 痛点:观测与调试工具无法还原 Pending Task 的执行状态 • 难以得知 Task 阻塞的位置和原因 • 难以调试 Async Stuck • ? 如何解决? Await-Tree Async Rust 可观测性的灵丹妙药 Await-Tree 的 设计原理与实现 2 回顾 Async Rust 的设计与痛点 1 Await-Tree 的 应用与真实案例 3 设计目标 Await Tree 的设计原理与实现0 码力 | 37 页 | 8.60 MB | 1 年前3
Rust 程序设计语言 简体中文版 1.85.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 19.2. Refutability(可反驳性): 模式是否会匹配失效 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451 19.3. 模式语法 . io/trpl- zh-cn/ 在线阅读,PDF 版本请下载 Rust 程序设计语言 简体中文版.pdf) 本书也有由 No Starch Press 出版的纸质版和电子版。 🚨 想要具有互动性的学习体验吗?试试 Rust Book 的另一个版本,其中包括测验、 高亮、可视化等功能:https://rust-book.cs.brown.edu 5/562Rust 程序设计语言 简体中文版 重视速度和稳定性的开发者 Rust 适合那些渴望在编程语言中寻求速度与稳定性的开发者。对于速度来说,既是指 Rust 可 以运行的多快,也是指编写 Rust 程序的速度。Rust 编译器的检查确保了增加功能和重构代码 时的稳定性,这与那些缺乏这些检查的语言中脆弱的祖传代码形成了鲜明对比,开发者往往不 敢去修改这些代码。通过追求零成本抽象(zero-cost abstractions)—— 将高级语言特性编 译成底层代0 码力 | 562 页 | 3.23 MB | 1 月前3
Rust 程序设计语言简体中文版........................................................................ 463 18.2. Refutability(可反驳性): 模式是否会匹配失效 ...................................................... 468 18.3. 模式语法 ................. 翻译版本。简体中文译本可以在 https://kaisery.github.io/trpl-zh-cn/ 在线 阅读。 本书也有 由 No Starch Press 出版的纸质版和电子版。 ? 想要具有互动性的学习体验吗?试试 Rust Book 的另一个版本,其中包括测验、 高亮、可视化等功能:https://rust-book.cs.brown.edu 5/600 Rust 程序设计语言 简体中文版 重视速度和稳定性的开发者 Rust 适合那些渴望在编程语言中寻求速度与稳定性的开发者。对于速度来说,既是指 Rust 可 以运行的多快,也是指编写 Rust 程序的速度。Rust 编译器的检查确保了增加功能和重构代码 时的稳定性,这与那些缺乏这些检查的语言中脆弱的祖传代码形成了鲜明对比,开发者往往不 敢去修改这些代码。通过追求零成本抽象(zero-cost abstractions)—— 将高级语言特性编 译成底层代0 码力 | 600 页 | 12.99 MB | 1 年前3
Comprehensive Rust(简体中文) 20241222.1 借用值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 22.2 借用检查 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 22.3 内部可变性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 36 日志记录 205 37 互操作性 207 37.1 与 C 的互操作性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 37.1.1 使用 Bindgen 12Building in Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 37.3 与 Java 的互操作性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 38 习题 219 X Chromium 220 390 码力 | 359 页 | 1.33 MB | 11 月前3
Rust 语言学习笔记..... 38 3.4.1.函数传递参数和返回参数类似于 let 语句 .................................... 38 3.4.2 涉及到函数和结构体的借用检查器 ........................................... 39 第四章 面向对象编程 ..................................... 可以被归为通用的、多范式、编译型的编程语言,类似 C 或者 C++。与 这两门编程语言不同的是,Rust 是线程安全的! Rust 编程语言的目标是,创建一个高度安全和并发的软件系统。它强调安全性、 并发和内存控制。尽管 Rust 借用了 C 和 C++ 的语法,它不允许空指针和悬 挂指针,二者是 C 和 C++ 中系统崩溃、内存泄露和不安全代码的根源。 Rust 中有诸如 if else Rust 本身可 用于操作系统的开发; 2.Rust 中的一个文件内,可包含多个模块,直接将 a::b::c::d 映射到 a/b/c/d.rs 会引起一些歧义; 3.Rust 一切从安全性、显式化立场出发,要求引用路径中的每一个节点,都是 一个有效的模块,比如上例,d 是一个有效的模块的话,那么,要求 c, b, a 分别都是有效的模块,可单独引用。 1.2.7 prelude0 码力 | 117 页 | 2.24 MB | 1 年前3
洛佳 组件化驱动、ROM运行环境与RustSBI将与UEFI、LinuxBoot擦出火花。在驱 动、环境和SBI接口的基础上,提供快速 实现具体引导流程的解决方案。 目录 组件化驱动 第 01 部分 什么是组件化驱动? 运 用 生 命 周 期 、可 变 性 等 最 新 的 编 程 语 言 理 论 成 果 ,构 造 适 应 开 发 需 求 的 驱 动 程 序 。可 结 合 过 程 宏 等 工 程 设 计 ,提 高 开 发 效 率 。 2 1 世 纪 的 适配embedded-hal等外设功能标准抽象 面 向 功 能 的 外 设 结 构 联合所有权、泛型等,暴露外设所有功能 外 设 及 其 寄 存 器 表 示 封装寄存器、位域表示和数据结构 分享性外设:以GPIO为例 • 从前级环境获取所有权,如从ROM 运行环境的#[entry]获得; • 配置GPIO状态后,只有对应外设类 型允许的操作函数能通过编译,否则 拒绝编译,避免不安全行为; 编译时生成镜像头,通 常包含处理器配置、时 钟和闪存配置等部分 #[entry] 过程宏 • 过程宏是卫生宏,完成语法树间的转 换,此处用于将main函数转换为固 件需要的入口函数。 • 包含ABI转换、检查参数等步骤。 • 使用过程宏时,同时使用对应包中的 start初始化代码。start代码无需由 用户编写,而是包含在宏生成的输出 代码中。 • 编译即可获得包含镜像头的固件包, 这是传统开发方法不具备的功能。0 码力 | 21 页 | 3.12 MB | 1 年前3
简谈 Rust 与国密 TLS - 王江桐al of Service) 攻击就是针对可获性进行的攻击,使计算机或网络无法提供正常的服务。 机密性(Confidentiality) 保证信息私密性和保密性 真实性(Authentication) 确保信息来自正确身份的对象 完整性(Integrity) 信息没有被篡改 接入控制(Access control) 避免资源滥用 可获性(Availability) 资源可以被使用 密码算法分类与应用 通信的第三套国际加密和完整性 的标准算法,为ISO/IEC 国际标 准 SM1 Introduction of SM1 Rust China Conf 2022 – 2023, Shanghai, China • SM1 是分组加密算法,实现对称加密,分组长度和密钥长度都为 128 位,对长消息进行加解密时, 若消息长度过长,需要进行分组,如果消息长度不足,则要进行填充。 • 保证数据机密性。 • 算法安全保密强度及相关软硬件实现性能与 用例,也常用于区块链或网络安全密码协议,如SSL/TLS、 VPN。 • 保证数据机密性、真实性和完整性。 • SM2 算法和 RSA 算法都是公钥加密算法,SM2 算法是一 种更先进安全的算法,其性能与安全性优于RSA,在我们国 家商用密码体系中被用来替换 RSA 算法。 • 椭圆曲线可使用更少的运算位数来达成与RSA相等的 安全性 • 椭圆曲线与RSA的安全性都依赖于离散对数问题的复 杂程度 • 离散对数问题:已知数A,B,且A0 码力 | 44 页 | 3.70 MB | 1 年前3
Rust语言核心竞争力-庄晓立现代C++尚在进化革新之中…… Rust V.S. 传统C/C++ • C/C++有很强的控制性、很弱的安全性 • Rust同时拥有很强的控制性和很强的安全性 • Rust和C/C++一样:运行效率很高,无GC无VM Java/Python/Ruby Rust Haskell 安全性 控制性 C/C++ Rust V.S. 现代C++ (1x) • 都是对传统C++语言的革新 • (路还很长) • 姗姗来迟的11, 小幅改进的14, 眼前的17, 未来的 2x… • 本文后面不再涉及现代C++,因为对其了解有限 系统编程小结 • 系统编程是软件行业的基石 • 很多基础性的、平台性的大中型项目…… • ……或隶属于系统编程,或依赖于系统编程 • 系统编程强调底层控制、运行性能和系统安全 • 当前主流的系统编程语言C/C++在内存安全方面有 重大欠缺 零运行时 Minimal &self.x } struct Foo<'a, T: 'a> { x: &'a T, } Borrow Checker Borrowck是编译器内部组件,负责在 “编译期” 追踪审查引 用的有效性,是保证内存安全的重要功臣。运行时零开销。 fn main() { let mut v = vec![0, 1, 2, 3, 4, 5, 6]; let deleted = v.drain(10 码力 | 51 页 | 1.09 MB | 1 年前3
基于静态分析的Rust内存安全缺陷检测研究Rust如何保障内存安全? ❑ 内存安全问题产生的主要原因之一是指针别名导致悬空指针 ▪ 手动释放内存或调用析构函数 ▪ 函数返回时发生的自动析构或内存释放 ❑ Rust设计的目标之一是编译时检查指针别名(共享可变引用) ▪ 但一般意义上的指针分析是NP-hard问题 ▪ 智能指针可行,但作为运行时方案,效率低 ▪ Rust在语法设计中引入所有权机制,简化指针分析问题 Rust所有权模型 alice恢复修改权 如果需要违背XOR Mutability怎么办? ❑ 以双向链表为例,中间节点被前后两个节点访用 ❑ Rust为了提升可用性所做的妥协 ▪ 智能指针(性能损失) ▪ 允许使用裸指针(unsafe模式) • 逃逸编译器的借用检查 => 指针别名 next prev next prev next prev struct List{ val: u64, next: Panic将导致访问未初始化内存 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 研究挑战和思路 ❑ 研究挑战:指针分析是NP-hard问题 ▪ 准确性:应采用路径敏感的指针分析算法,避免过多误报 ▪ 分析效率:应基于Rust MIR的特点对算法进行优化,使其可行 ❑ 整体思路:基于编译过程中的生成的MIR进行静态分析 ▪ 路径提取:控制流图=>生成树0 码力 | 28 页 | 1.55 MB | 1 年前3
共 40 条
- 1
- 2
- 3
- 4













