基于静态分析的Rust内存安全缺陷检测研究基于静态分析的Rust内存安全缺陷检测研究 报告人:徐辉 报告日期:2022.11.25 复旦大学 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 Rust语言 ❑ 系统级安全编程语言 ▪ 内存安全 ▪ 并发安全 ▪ 效率 2006年 2011年 Panic将导致访问未初始化内存 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 研究挑战和思路 ❑ 研究挑战:指针分析是NP-hard问题 ▪ 准确性:应采用路径敏感的指针分析算法,避免过多误报 ▪ 分析效率:应基于Rust MIR的特点对算法进行优化,使其可行 ❑ 整体思路:基于编译过程中的生成的MIR进行静态分析 ▪ 路径提取:控制流图=>生成树 ▪ 别名分析:分析指针之间的关联关系 方法:基于tarjan算法进行SCC检测 => 生成树 ▪ 对SCC出口处的alias关系统一取上界 ❑ 特殊情况特殊处理 路径提取 别名分析 模式识别 控制流图 生成树 别名分析 ❑ 主要规则: 路径提取 别名分析 模式识别 过程间分析 近似处理multi-level pointers ❑ 示例: 域敏感和过程间分析 过程间分析 域敏感 更新 缺陷模式 路径提取 别名分析 模式识别 生成新的所有者0 码力 | 28 页 | 1.55 MB | 1 年前3
Comprehensive Rust(简体中文) 202412211 37.2.2 Rust Bridge Declarations . . . . . . . . . . . . . . . . . . . . . . . . . 211 37.2.3 生成的 C++ 代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 37.2.4 C++ 桥接声明 . . . . . 46.4 生成 gn 构建规则 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 46.5 解决问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 46.5.1 构建用于生成代码的脚本 build 只进行编译,而不运行。你 可以在 target/debug/ 中找到常规调试 build 的输出。使用 cargo build --release 在 target/release/ 中生成经过优化的 发布 build。 7. 可以通过修改 Cargo.toml 为项目添加依赖项。当运行 cargo 命令时,系统会自动下载和编译缺 失的依赖项。 尽量鼓励全班学员安装 Cargo 并0 码力 | 359 页 | 1.33 MB | 10 月前3
使用Rust与ClickHouse构建高效可靠的日志系统第三届中国Rust开发者大会 使用Rust与ClickHouse构建高 效可靠的日志系统 刘炜 腾讯云(专有云) • 自我介绍 • 系统介绍 • 整体架构 • 系统实现 • 遇到问题 大纲 自我介绍 • 大龄码农 • 做过嵌入式/CDN/数据库开发 • 从C/C++到Rust • 现在在腾讯云(专有云)从事日志系统的开发 自我介绍 PhoTto / image / chart0 码力 | 19 页 | 2.66 MB | 1 年前3
Comprehensive Rust(日语) 202412. . . 225 37.2.2 Rust のブリッジ宣言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 37.2.3 生成された C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 37.2.4 C++ のブリッジ宣言 . . . 253 45.4 gn ビルドルールを生成する . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 45.5 問題を解決する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 45.5.1 コードを生成するビルドスクリプト . . . . `target/debug/exercise` Edit me! 6. cargo check でプロジェクトのエラーチェックを行い、cargo build でコンパイルだけ(実 行はせず)を行います。通常のデバッグビルドでは、生成されたファイルは target/debug/に 20 格納されます。最適化されたリリースビルドには cargo build —release を使い、ファイル は target/release/に格納されます。0 码力 | 381 页 | 1.36 MB | 10 月前3
Rust 程序设计语言 简体中文版 1.85.0这段代码无法通过编译! 9/562Rust 程序设计语言 简体中文版 这段代码会 Panic! 这段代码的运行结果不符合预期。 在大部分情况,我们会指导你将无法通过编译的代码修改为正确版本。 源代码 生成本书的源码可以在 GitHub 上找到。 译者注:此译本也有 GitHub 仓库,欢迎提交 Issue 和 PR :) 10/562Rust 程序设计语言 简体中文版 入门指南 让我们开始 Rust 目录并列出文件。将会看到 Cargo 生成了两个文件和一个目录:一个 Cargo.toml 文件,一个 src 目录,以及位于 src 目录中的 main.rs 文件。 这也会在 hello_cargo 目录初始化了一个 git 仓库,以及一个 .gitignore 文件。如果在一个已经 存在的 git 仓库中运行 cargo new,则这些 git 相关文件则不会生成;可以通过运行 cargo new 文件名:src/main.rs fn main() { println!("Hello, world!"); } Cargo 为你生成了一个 “Hello, world!” 程序,正如我们之前编写的示例 1-1!目前为止,我们 的项目与 Cargo 生成项目的区别是 Cargo 将代码放在 src 目录,同时项目根目录包含一个 Cargo.toml 配置文件。 Cargo 期望源文件存放在0 码力 | 562 页 | 3.23 MB | 25 天前3
Rust 程序设计语言简体中文版这段代码无法通过编译! 9/600 Rust 程序设计语言 简体中文版 这段代码会 Panic! 这段代码的运行结果不符合预期。 在大部分情况,我们会指导你将无法通过编译的代码修改为正确版本。 源代码 生成本书的源码可以在 GitHub 上找到。 译者注:此译本也有 GitHub 仓库,欢迎提交 Issue 和 PR :) 10/600 Rust 程序设计语言 简体中文版 1 . 入 目录并列出文件。将会看到 Cargo 生成了两个文件和一个目录:一个 Cargo.toml 文件,一个 src 目录,以及位于 src 目录中的 main.rs 文件。 这也会在 hello_cargo 目录初始化了一个 git 仓库,以及一个 .gitignore 文件。如果在一个已经 存在的 git 仓库中运行 cargo new ,则这些 git 相关文件则不会生成;可以通过运行 cargo new definitions at https://doc.rust-lang.org/cargo/ reference/manifest.html [dependencies] 示例 1-2: cargo new 命令生成的 Cargo.toml 的内容 这个文件使用 TOML (Tom’s Obvious, Minimal Language) 格式,这是 Cargo 配置文件的格式。 第一行,[package]0 码力 | 600 页 | 12.99 MB | 1 年前3
Rust 语言学习笔记必须按照合理的方式构建 'cargo.toml'。 而 cargo.lock 文件则不直接面向开发者,也不需要直接去修改这个文件。lock 文件是 cargo 工具根据同一项目的 toml 文件生成的项目依赖详细清单文件。 Cargo 字段: 1.[package]段落描述了软件开发者对本项目的各种元数据描述信息。 2.[dependency] 3.单元测试主要通过在项目代码的 在 main.rs 中,写上: mod aaa; use self::aaa::print_aaa; fn main () { print_aaa(); } 编译后,生成一个可执行文件。 细心的朋友会发现,aaa.rs 中,没有使用 mod xxx {} 这样包裹起来,是 因为 mod xxx; 相当于把 xxx.rs 文件用 mod xxx {} 包裹起来了。 理性看待 rust 语言的升级。只是升级频度高一些,这样的升级在 java 和 go 中 也普遍存在。go 中的感知稍微小一些。 每次升级都要更新相应的工具链。保证最新的编译器和链接器可以将新生成的 程序生成出来。 Rust 的包管理系统非常明显地体现了它的与众不同。 1.3 版本管理工具 作为一门更新快速的语言,rust 开发了专用的版本管理工具 rustup。 对于 go 而言0 码力 | 117 页 | 2.24 MB | 1 年前3
简谈 Rust 与国密 TLS - 王江桐TLCP、区块链等场景,用于签名 验签等 Sm3 GM/T 0004-2012 ISO/IEC 10118-3:2018 计算密码杂凑 哈希 256 SHA256 是 TLCP、数字签名及验证、消息认 证码生成及验证、随机数生成、 密钥扩充 Sm4 GM/T 0002-2012 ISO/IEC WD1 18033- 3/AMD2 分组加解密 分组加 密 128 AES128,但 是更多次轮询 是 TLCP、消息加解密,用于替代 Introduction of SM2 Rust China Conf 2022 – 2023, Shanghai, China • SM2 为椭圆曲线(ECC)公钥加密算法,非对称加密,提 供加解密、数字签名、证书生成、密钥交换功能。由于以上 用例,也常用于区块链或网络安全密码协议,如SSL/TLS、 VPN。 • 保证数据机密性、真实性和完整性。 • SM2 算法和 RSA 算法都是公钥加密算法,SM2 算法是一 保证信息的完整性。 • 在商用密码体系中,SM3 主要用于数字签名及验证、消息认证码生成及验证、随机数生成、密钥 扩充等。据国家密码管理局表示,其安全性及效率要高于 MD5 算法和 SHA-1 算法,与 SHA- 256 相当。 • SM3 将对长度为l(l < 2^64) 比特的消息 m,经过填充和迭代压缩,生成杂凑值,杂凑值长度为 256比特。 SM3 Introduction of SM30 码力 | 44 页 | 3.70 MB | 1 年前3
Rust在物理引擎研发中的应用 崔汉青Motphys 驱动虚拟世界的全部运动 体验 应用 基础应用: 内容生成工具、 交易市场等 基础硬件: 5G/6G、 半导体、 VR/AR等 基础软件: 渲染引擎、 动作物理引擎等 静态表现力 动态表现力 渲染技术 动作物理技术 动作技术 Motion 物理技术 Physics 规则驱动 AI生成 数据驱动 AI加速 云原生架构和 AI 能力 架构特点 性能特点 功能特点 跨平台确定性 动作物理统一 算力动态调配 分布式计算 物理材质统一解算 算法优化 物理材质单独解算 工程优化 性能待优化 AI仿真加速 前沿动作功能 缺乏动作功能 AI动作生成 优秀的易用性和适配性 缺乏AI能力 保证每个目标平台的极致性能 跨端确定性 – 保证所有目标平台计算结 果完全一致 具备分布式能力 – 通过横向扩展突破单 机物理算力的上限 Motphys macro, or… Generic 表达力不足 不容易做精细性能优化 Procedure Macro 过于复杂 结果不可见 那么,用代码生成代码?Web 开发用的模板引擎, 也可以用于生成 Rust 代码 tera 模板生成分指令集优化的 Rust 代码 提供远超 Procedure Macro 的可读性和易用性 mathbench • 已有开源数学 crates 的 benchmark0 码力 | 22 页 | 1.18 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Rust 版hello‑algo.com 3 图 0‑1 本书主要内容 0.1.3 致谢 本书在开源社区众多贡献者的共同努力下不断完善。感谢每一位投入时间与精力的撰稿人,他们是(按照 GitHub 自动生成的顺序):krahets、coderonion、Gonglja、nuomi1、Reanon、justin‑tse、hpstory、 danielsss、curtishd、night‑cruise、 / 2) + linear_log_recur(n / 2); for _ in 0..n { count += 1; } return count; } 图 2‑13 展示了线性对数阶的生成方式。二叉树的每一层的操作总数都为 ? ,树共有 log2 ? + 1 层,因此时 间复杂度为 ?(? log ?) 。 第 2 章 复杂度分析 www.hello‑algo.com 39 图 记号表示: // === File: worst_best_time_complexity.rs === /* 生成一个数组,元素为 { 1, 2, ..., n },顺序被打乱 */ fn random_numbers(n: i32) -> Vec{ // 生成数组 nums = { 1, 2, 3, ..., n } let mut nums = (1..=n).collect:: >(); 0 码力 | 387 页 | 18.51 MB | 10 月前3
共 22 条
- 1
- 2
- 3













