基于静态分析的Rust内存安全缺陷检测研究基于静态分析的Rust内存安全缺陷检测研究 报告人:徐辉 报告日期:2022.11.25 复旦大学 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 Rust语言 ❑ 系统级安全编程语言 ▪ 内存安全 ▪ 并发安全 ▪ 效率 2006年 2011年 Reclaim问题:示例2 创建未初始化的变量foo Panic将导致访问未初始化内存 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 研究挑战和思路 ❑ 研究挑战:指针分析是NP-hard问题 ▪ 准确性:应采用路径敏感的指针分析算法,避免过多误报 ▪ 分析效率:应基于Rust MIR的特点对算法进行优化,使其可行 ❑ 整体思路:基于编译过程中的生成的MIR进行静态分析 四、论文发表心得 实验效果 ❑ 基于已知CVE评 估检测能力 ❑ 基于GitHub上其 它开源Rust项目 的实验 高召回率 低误报率 double free和悬空指 针问题比较多 案例分析 Panic将导致双重释放 提前 性能:SafeDrop vs 原始Rust编译器 总结和思考 ❑ 问题根源是Rust的自动析构机制 ▪ XOR Mutability保证自动析构的安全性0 码力 | 28 页 | 1.55 MB | 1 年前3
2.Go语言实现中的几个研究课题_毛康力Go语⾔言实现中的⼏几个研究课题 ⽑毛康⼒力 @舜⻜飞科技 关于我 • Go发布1.0时开始关注 • 最早接触是在2012年 • 喜欢研究底层实现 • http://www.zenlife.tk/ 有同事称我⼤大神或⼤大师(湿?) 其实,我只是⼀一个研究僧 ⼤大纲 • 并发 • 接⼝口 • 垃圾回收 • 调度 • 死锁检测 并发 • goroutine提供轻量的并发机制 select其实是⼀一个整体 • c1 c2并不能独⽴立对待 • 要么全部成功,要么失败,否则可能死锁 • 单纯对select结构加锁⾏行不通!!! • 共享⼀一个全局锁? select • 研究课题:能否实现lock-free channels? • 使⽤用前获取select中的所有channel的锁 • 按channel结构体的地址顺序加锁 ⼤大纲 • 并发 • 接⼝口 bool) 泛型 • C说:我不管。(使⽤用者累) • C++把同⼀一个函数(的不同类型)实现了很多遍。(编译器累) • Java把所有东⻄西都打包了,只有⼀一个函数。(运⾏行时累) • 研究课题:怎么样实现才合理? ⼤大纲 • 并发 • 接⼝口 • 垃圾回收 • 调度 • 死锁检测 垃圾回收 • ⺩王尼玛:内存管理太重要!交给机器我不放⼼心 • 曹尼玛:内存管理太重要!给⺩王尼玛管我不放⼼心0 码力 | 37 页 | 566.26 KB | 1 年前3
MoonBit月兔编程语言 现代编程思想 第十二课 案例:自动微分现代编程思想 案例:⾃动微分 Hongbo Zhang 1 微分 微分被应⽤于机器学习领域 利⽤梯度下降求局部极值 ⽜顿迭代法求函数解: 我们今天研究简单的函数组合 例: 2 ⽜顿迭代法 3 ⽜顿迭代法 4 ⽜顿迭代法 5 ⽜顿迭代法 6 ⽜顿迭代法 7 ⽜顿迭代法 8 ⽜顿迭代法 9 ⽜顿迭代法 10 ⽜顿迭代法 11 微分 微分被应⽤于机器学习领域 微分被应⽤于机器学习领域 利⽤梯度下降求局部极值 ⽜顿迭代法求函数解: 我们今天研究简单的函数组合 例: 12 微分 函数微分的⼏种⽅式 ⼿动微分:纯天然计算器 缺点:对于复杂表达式容易出错 数值微分: 缺点:计算机⽆法精准表达⼩数,且绝对值越⼤,越不精准 符号微分: Mul(Const(2), Var(1)) -> Const(2) 缺点:计算结果可能复杂;可能重复计算;难以直接利⽤语⾔原⽣控制流 Forward::var(100.0, true) |> debug 23 案例:⽜顿迭代法求零点 1. fn example_newton[N : Number](x : N) -> N { 2. x * x * x + N::constant(-10.0) * x * x + x + N::constant(1.0) 3. } 24 案例:⽜顿迭代法求零点 通过循环进⾏迭代 1. fn init0 码力 | 30 页 | 3.24 MB | 1 年前3
MoonBit月兔编程语言 现代编程思想 第十三课 案例:神经网络现代编程思想 案例:基于梯度下降的神经⽹络 Hongbo Zhang 1 案例:鸢尾花 鸢尾花数据集是机器学习中的"Hello World" 1936年发布 包含对3种鸢尾花的测量,各有50个样本 每个样本包含4项特征:花萼与花瓣的⻓度和宽度 ⽬标 通过特征,判断属于哪⼀类鸢尾花 构建并训练神经⽹络,正确率95%以上 2 神经⽹络 神经⽹络是机器学习的⼀种 模拟⼈的⼤脑神经结构0 码力 | 17 页 | 521.66 KB | 1 年前3
MoonBit月兔编程语言 现代编程思想 第十四课 案例:堆栈虚拟机现代编程思想 案例:栈式虚拟机 Hongbo Zhang 1 编译与解释 编译 源程序 x 编译器 -> ⽬标程序 ⽬标程序 x 输⼊数据 -> 输出数据 解释 源程序 x 输⼊数据 x 解释器 -> 输出数据 CPU可以被视为⼴义上的解释器 拓展阅读:⼆村映射/部分计算 部分计算:程序优化,根据已知信息,运算进⾏特化 已知源程序与解释器,进⾏部分运算,获得⽬标程序 ⽬标程序0 码力 | 31 页 | 594.38 KB | 1 年前3
MoonBit月兔编程语言 现代编程思想 第十一课 案例:语法解析器与Tagless Final现代编程思想 案例:语法解析器 Hongbo Zhang 1 语法解析器 案例⽬标 解析基于⾃然数的数学表达式: "(1+ 5) * 7 / 2" 转化为单词列表 LParen Value(1) Plus Value(5) Multiply Value(7) Divide Value(2) 转化为抽象语法树 Division(Multiply(Add(Value(1), Value(5))0 码力 | 25 页 | 400.29 KB | 1 年前3
2022年美团技术年货 合辑YOLO 检测框架,其中以 YOLOv5[1]、YOLOX[2] 和 PP-YOLOE[3] 最具代表性,但在实际使用中,我们发现上述框架在速度和精度方面 仍有很大的提升的空间。基于此,我们通过研究并借鉴了业界已有的先进技术,开发 了一套新的目标检测框架——YOLOv6。该框架支持模型训练、推理及多平台部署 等全链条的工业应用需求,并在网络结构、训练策略等算法层面进行了多项改进和优 化,在 8 > 2022年美团技术年货 图 6 Efficient Decoupled Head 结构图 2.3 更有效的训练策略 为了进一步提升检测精度,我们吸收借鉴了学术界和业界其他检测框架的先进研究进 展:Anchor-free 无锚范式 、SimOTA 标签分配策略以及 SIoU 边界框回归损失。 Anchor-free 无锚范式 YOLOv6 采用了更简洁的 Anchor-free 检测方法。由于 19 在着挑战。近期,一篇重参数化优化器的工作 RepOpt [3] 较好地解决了重参数化结构 的量化问题。 2.1.1 RepOpt RepOpt [3] 对重参数化结构量化困难的问题进行了研究,发现重参数结构的分支融合 操作,显著放大了权重参数分布的标准差。异常的权重分布产生了过大的网络激活层 数值分布,进一步导致该层量化损失过大,因此模型精度损失严重。 鉴于此,我们统计了基于 RepVGG0 码力 | 1356 页 | 45.90 MB | 1 年前3
Python与高中技术课程教学 以声音制造为例 罗丹 luodan@i.pkuschool.edu.cn 目录 CONTENTS 案例教学设计思路 Python 的角色 中学STEAM课程设计 思考 案例设计背景 北大附中技术课程设置模式: 1. 不设置独立的信息技术和 通用技术课程 2. 课程设计以项目制为主 3. 教师享有较大的课程设计 自主权 案例设计背景 案例教学设计思路 1. 结合教师个人经历,学校课程设计规 划,教育部颁布的课程标准制定教学 划,教育部颁布的课程标准制定教学 内容和方式 2. 融合中学主干学科知识,明确研究对 象,训练学生研究性学习的能力 3. 打通中学学科知识和大学专业知识之 间的屏障,帮助学生拓展视野,制定 未来职业规划 声音制造教学设计 该项目以研究声音信号为核心任务,学生通过 1. 了解声音 2. 分析声音 3. 制造声音 4. 处理声音 5. 传播声音 五大研究模块来全面和深入地了解与声音信号相 关的工程物理知识和数学模型并进行相关的实践0 码力 | 12 页 | 731.76 KB | 1 年前3
C++高性能并行编程与优化 - 课件 - 07 深入浅出访存优化周转的余地时间比较少,不利于延迟隐藏。 而如果把这三条赛道合并成一条( mc ),这样同样的经费(缓存容量)能铺出的赛道(预 取)就更长,从而 CPU 有更长的周转时间来隐藏他内部计算的延迟。所以本案例中 AOS 比 SOA 好。 AOS 、 SOA 、 AOSOA 哪家强:结论 • 如果几个属性几乎总是同时一起用的,比如位置矢量 pos 的 xyz 分量,可 能都是同时读取同时修改的,这时用 做的事情相当于:读 + 写,从而 每个元素只需要访问两遍内存。对这种完全 mem-bound 的程 序而言就是加速了 2 倍。 测试结果 可见,能否很好的利用缓存,和程序访问内存的时间局域性有关。 案例:一维 jacobi 迭代 • 一些物理仿真中,常用到这种形式的迭代法: • for (i=0...n) b[i] = a[i + 1] + a[i - 1]; // 假装是 jacobi • 防止 写回操作污染缓存。 • 最终加速比: 24 倍。这里可以看到 i - 2 和 i + 2 跨步的访存似乎不是很理想,可能还能 进亿步优化,出于时间原因就没继续深入, 同学们可以课后研究一下。 第 5 章:内存分配与分页 vector :写入两次,时间都是一样的(理所当然) malloc :写入两次,第一次明显比第二次慢? new int[n] :和 malloc 一样,写入两次,第一次明显比第二次慢?0 码力 | 147 页 | 18.88 MB | 1 年前3
FISCO BCOS 2.9.0 中文文档问题排查 • 整体架构 • 共识算法 • 交易并行 • 分布式存储 • 预编译合约 • 更多设计文档 • Github主页 • 深度解析系列文章 • 贡献代码 • 反馈问题 • 应用案例集 • 微信群 、公众号 • FISCO BCOS企业级金融联盟链底层平台: [GitHub] [Gitee] [文档] • WeBASE 区块链中间件平台:[GitHub] [Gitee] [文档] getSealerList:查看群组中共识节点列表 • getObserverList:查看群组中观察节点列表 • getNodeIDList:查看节点已连接的所有其他节点的NodeID 下面结合具体操作案例详细阐述群组如何扩容一个新节点。扩容操作分两个阶段, 分别为为节点生成证 书并启动、将节点加入群组。 本节假设用户已经参照搭建第一个区块链网络搭建了一条4节点的联盟链,接下来的操作将生成一个新 的节点,然后将节点加入群组1。 e83554962dc2922aa0ef50 ] [group:1]> getSealerList [] [group:1]> getObserverList [] 7.2.2 操作案例 下面结合具体操作案例详细阐述群组扩容操作及节点退网操作。扩容操作分两个阶段, 分别为将节点加 入网络、将节点加入群组。退网操作也分为两个阶段,为将节点退出群组、将节点退出网络。 操作方式 • 修改节点配0 码力 | 1489 页 | 107.09 MB | 1 年前3
共 268 条
- 1
- 2
- 3
- 4
- 5
- 6
- 27













