硬核观察 #1137 微软支持开发者用 Rust 开发 Windows 驱动

硬核老王 的头像

·

·

·

2,337 次阅读

微软支持开发者用 Rust 开发 Windows 驱动

微软在 Github 上发布了代码,使开发人员能够用 Rust 编写 Windows 驱动程序,这是为操作系统实现内存安全编程的关键一步。此前,微软披露正在用 Rust 语言 重写 核心 Windows 库。由于各种技术和历史原因,Windows 的用户模式代码大部分都是用 C++ 编写的,而内核代码大部分是用 C 语言编写的。软件项目的大部分漏洞都属于内存安全错误。自 2006 年以来微软在 Windows 中修复的漏洞大约七成是内存安全漏洞。

消息来源:Dev Class

老王点评:没想到 Windows 在拥抱 Rust 方面走在了 Linux 前面。

所有主要 GPU 都可能遭受新的像素窃取攻击

研究人员发现,六家主要供应商的 GPU 都容易受到一种新发现的攻击,这种攻击允许恶意网站跨源读取其他网站显示的像素。然后,攻击者就可以对像素进行重构,从而查看后一个网站显示的用户名、密码和其他敏感信息。通常情况下,同一来源策略会阻止这种泄漏,但 GPU 为提高性能而使用的数据压缩技术就像一个侧通道,会自动尝试压缩这些视觉数据,而不需要任何应用程序的参与。它们可以利用这个侧通道绕过限制,逐个窃取像素。芯片制造商们认为该问题的根本原因不在 GPU 中,而是浏览器厂商实现的问题。而谷歌表示,“这是对硬件工作原理的重要研究”,网站使用合理的标头可以显著减少个性化数据被泄露的风险。

消息来源:Ars Technica

老王点评:很多安全漏洞都是优化带来的,比如预加载、并行预测。

苹果在法庭上为谷歌搜索交易辩护

在对谷歌搜索业务的反垄断审判中,谷歌与苹果之间的交易是美国司法部起诉谷歌的核心,该交易使谷歌成为所有苹果设备的默认搜索引擎,并每年向苹果支付数十亿美元。曾代表苹果签署和谷歌的《信息服务协议》的 Eddy Cue 被问及,如果双方不能就收入分成数字达成一致,他是否会放弃这笔交易。Cue 认为,达成交易符合谷歌和苹果的最大利益,这笔交易不仅仅是经济问题,苹果从未认真考虑过转而使用其他供应商的产品,因为“还没有一个可以替代谷歌的有效选择”。

消息来源:The Verge

老王点评:就是因为其无可取代才会形成垄断。

16 条回复

  1. 来自江苏无锡的 Firefox 117.0|Ubuntu 用户 的头像
    来自江苏无锡的 Firefox 117.0|Ubuntu 用户

    强数据类型的语言,内存安全性都比较好。例如Pascal/delphi/lazarus。至少不会稀里糊涂的找不到对象。也不会弄不清++++j++++到底是几。

    来自无锡
  2. 来自广西来宾的 Chrome 117.0|Windows 10 用户 的头像
    来自广西来宾的 Chrome 117.0|Windows 10 用户

    Github是什么,我根本就不知道啊!

    来自来宾
  3. 来自河北承德的 Firefox 117.0|Android 13 用户 的头像
    来自河北承德的 Firefox 117.0|Android 13 用户

    根本不是一回事。

    来自承德
  4. 来自江苏无锡的 Firefox 117.0|Ubuntu 用户 的头像
    来自江苏无锡的 Firefox 117.0|Ubuntu 用户

    在pascal里:
    1. String是包含长度信息的,而不是单纯靠"",越界不容易。
    2. 数组是包含长度信息的,越界会报错。
    3. 数组下标允许从非零开始,for允许降序,能减少大量边界问题。
    4. 类型是类型,常量是常量,不允许混用,也没有#define地狱问题。
    5. 有Assigned函数。能够判断是否使用了未分配内存。
    6. 指针是带数据类型的。
    7. 变量统一使用前定义,不会半路冒出来个变量。
    8. 没有++ –。
    9. 没有宏函数。
    10. 编译特别快,耗时C++的十分之一左右,调试很方便。

    P.S. 其实如果不玩花活/炫技,即使是C/C++也没那么多问题的。
    我比

    来自无锡
  5. 来自江苏无锡的 Firefox 117.0|Ubuntu 用户 的头像
    来自江苏无锡的 Firefox 117.0|Ubuntu 用户

    在pascal里:
    1. String是包含长度信息的,而不是单纯靠"",越界不容易。
    2. 数组是包含长度信息的,越界会报错。
    3. 数组下标允许从非零开始,for允许降序,能减少大量边界问题。
    4. 类型是类型,常量是常量,不允许混用,也没有#define地狱问题。
    5. 有Assigned函数。能够判断是否使用了未分配内存。
    6. 指针是带数据类型的。
    7. 变量统一使用前定义,不会半路冒出来个变量。
    8. 没有++ –。
    9. 没有宏函数。
    10. 编译特别快,耗时C++的十分之一左右,调试很方便。

    P.S. 其实如果不玩花活/炫技,即使是C/C++也没那么多问题的。
    我比

    来自无锡
  6. 来自江苏无锡的 Firefox 117.0|Ubuntu 用户 的头像
    来自江苏无锡的 Firefox 117.0|Ubuntu 用户

    在pascal里:
    1. String是包含长度信息的,而不是单纯靠"",越界不容易。
    2. 数组是包含长度信息的,越界会报错。
    3. 数组下标允许从非零开始,for允许降序,能减少大量边界问题。
    4. 类型是类型,常量是常量,不允许混用,也没有#define地狱问题。
    5. 有Assigned函数。能够判断是否使用了未分配内存。
    6. 指针是带数据类型的。
    7. 变量统一使用前定义,不会半路冒出来个变量。
    8. 没有++ –。
    9. 没有宏函数。
    10. 编译特别快,耗时C++的十分之一左右,调试很方便。

    P.S. 其实如果不玩花活/炫技,即使是C/C++也没那么多问题的。
    我比

    来自无锡
  7. 来自江苏无锡的 Firefox 117.0|Ubuntu 用户 的头像
    来自江苏无锡的 Firefox 117.0|Ubuntu 用户

    在pascal里:
    1. String是包含长度信息的,而不是单纯靠"",越界不容易。
    2. 数组是包含长度信息的,越界会报错。
    3. 数组下标允许从非零开始,for允许降序,能减少大量边界问题。
    4. 类型是类型,常量是常量,不允许混用,也没有#define地狱问题。
    5. 有Assigned函数。能够判断是否使用了未分配内存。
    6. 指针是带数据类型的。
    7. 变量统一使用前定义,不会半路冒出来个变量。
    8. 没有++ –。
    9. 没有宏函数。
    10. 编译特别快,耗时C++的十分之一左右,调试很方便。

    P.S. 其实如果不玩花活/炫技,即使是C/C++也没那么多问题的。
    我比

    来自无锡
  8. 来自江苏无锡的 Firefox 117.0|Ubuntu 用户 的头像
    来自江苏无锡的 Firefox 117.0|Ubuntu 用户

    在pascal里:
    1. String是包含长度信息的,而不是单纯靠"",越界不容易。
    2. 数组是包含长度信息的,越界会报错。
    3. 数组下标允许从非零开始,for允许降序,能减少大量边界问题。
    4. 类型是类型,常量是常量,不允许混用,也没有#define地狱问题。
    5. 有Assigned函数。能够判断是否使用了未分配内存。
    6. 指针是带数据类型的。
    7. 变量统一使用前定义,不会半路冒出来个变量。
    8. 没有++ –。
    9. 没有宏函数。
    10. 编译特别快,耗时C++的十分之一左右,调试很方便。

    P.S. 其实如果不玩花活/炫技,即使是C/C++也没那么多问题的。
    我比

    来自无锡
  9. 来自江苏无锡的 Firefox 117.0|Ubuntu 用户 的头像
    来自江苏无锡的 Firefox 117.0|Ubuntu 用户

    在pascal里:
    1. String是包含长度信息的,而不是单纯靠"",越界不容易。
    2. 数组是包含长度信息的,越界会报错。
    3. 数组下标允许从非零开始,for允许降序,能减少大量边界问题。
    4. 类型是类型,常量是常量,不允许混用,也没有#define地狱问题。
    5. 有Assigned函数。能够判断是否使用了未分配内存。
    6. 指针是带数据类型的。
    7. 变量统一使用前定义,不会半路冒出来个变量。
    8. 没有++ –。
    9. 没有宏函数。
    10. 编译特别快,耗时C++的十分之一左右,调试很方便。

    P.S. 其实如果不玩花活/炫技,即使是C/C++也没那么多问题的。
    我比

    来自无锡
  10. 来自江苏无锡的 Firefox 117.0|Ubuntu 用户 的头像
    来自江苏无锡的 Firefox 117.0|Ubuntu 用户

    在pascal里:
    1. String是包含长度信息的,而不是单纯靠"",越界不容易。
    2. 数组是包含长度信息的,越界会报错。
    3. 数组下标允许从非零开始,for允许降序,能减少大量边界问题。
    4. 类型是类型,常量是常量,不允许混用,也没有#define地狱问题。
    5. 有Assigned函数。能够判断是否使用了未分配内存。
    6. 指针是带数据类型的。
    7. 变量统一使用前定义,不会半路冒出来个变量。
    8. 没有++ –。
    9. 没有宏函数。
    10. 编译特别快,耗时C++的十分之一左右,调试很方便。

    P.S. 其实如果不玩花活/炫技,即使是C/C++也没那么多问题的。
    我比

    来自无锡
  11. 来自江苏无锡的 Firefox 117.0|Ubuntu 用户 的头像
    来自江苏无锡的 Firefox 117.0|Ubuntu 用户

    在pascal里:
    1. String是包含长度信息的,而不是单纯靠"",越界不容易。
    2. 数组是包含长度信息的,越界会报错。
    3. 数组下标允许从非零开始,for允许降序,能减少大量边界问题。
    4. 类型是类型,常量是常量,不允许混用,也没有#define地狱问题。
    5. 有Assigned函数。能够判断是否使用了未分配内存。
    6. 指针是带数据类型的。
    7. 变量统一使用前定义,不会半路冒出来个变量。
    8. 没有++ –。
    9. 没有宏函数。
    10. 编译特别快,耗时C++的十分之一左右,调试很方便。

    P.S. 其实如果不玩花活/炫技,即使是C/C++也没那么多问题的。
    我比

    来自无锡
  12. 来自江苏无锡的 Firefox 117.0|Ubuntu 用户 的头像
    来自江苏无锡的 Firefox 117.0|Ubuntu 用户

    在pascal里:
    1. String是包含长度信息的,而不是单纯靠"",越界不容易。
    2. 数组是包含长度信息的,越界会报错。
    3. 数组下标允许从非零开始,for允许降序,能减少大量边界问题。
    4. 类型是类型,常量是常量,不允许混用,也没有#define地狱问题。
    5. 有Assigned函数。能够判断是否使用了未分配内存。
    6. 指针是带数据类型的。
    7. 变量统一使用前定义,不会半路冒出来个变量。
    8. 没有++ –。
    9. 没有宏函数。
    10. 编译特别快,耗时C++的十分之一左右,调试很方便。

    P.S. 其实如果不玩花活/炫技,即使是C/C++也没那么多问题的。
    我比

    来自无锡
  13. 来自江苏无锡的 Firefox 117.0|Ubuntu 用户 的头像
    来自江苏无锡的 Firefox 117.0|Ubuntu 用户

    在pascal里:
    1. String是包含长度信息的,而不是单纯靠"",越界不容易。
    2. 数组是包含长度信息的,越界会报错。
    3. 数组下标允许从非零开始,for允许降序,能减少大量边界问题。
    4. 类型是类型,常量是常量,不允许混用,也没有#define地狱问题。
    5. 有Assigned函数。能够判断是否使用了未分配内存。
    6. 指针是带数据类型的。
    7. 变量统一使用前定义,不会半路冒出来个变量。
    8. 没有++ –。
    9. 没有宏函数。
    10. 编译特别快,耗时C++的十分之一左右,调试很方便。

    P.S. 其实如果不玩花活/炫技,即使是C/C++也没那么多问题的。
    我比

    来自无锡
  14. 来自江苏无锡的 Firefox 117.0|Ubuntu 用户 的头像
    来自江苏无锡的 Firefox 117.0|Ubuntu 用户

    在pascal里:
    1. String是包含长度信息的,而不是单纯靠"",越界不容易。
    2. 数组是包含长度信息的,越界会报错。
    3. 数组下标允许从非零开始,for允许降序,能减少大量边界问题。
    4. 类型是类型,常量是常量,不允许混用,也没有#define地狱问题。
    5. 有Assigned函数。能够判断是否使用了未分配内存。
    6. 指针是带数据类型的。
    7. 变量统一使用前定义,不会半路冒出来个变量。
    8. 没有++ –。
    9. 没有宏函数。
    10. 编译特别快,耗时C++的十分之一左右,调试很方便。

    P.S. 其实如果不玩花活/炫技,即使是C/C++也没那么多问题的。
    我比

    来自无锡
  15. 来自江苏无锡的 Firefox 117.0|Ubuntu 用户 的头像
    来自江苏无锡的 Firefox 117.0|Ubuntu 用户

    在pascal里:
    1. String是包含长度信息的,而不是单纯靠"",越界不容易。
    2. 数组是包含长度信息的,越界会报错。
    3. 数组下标允许从非零开始,for允许降序,能减少大量边界问题。
    4. 类型是类型,常量是常量,不允许混用,也没有#define地狱问题。
    5. 有Assigned函数。能够判断是否使用了未分配内存。
    6. 指针是带数据类型的。
    7. 变量统一使用前定义,不会半路冒出来个变量。
    8. 没有++ –。
    9. 没有宏函数。
    10. 编译特别快,耗时C++的十分之一左右,调试很方便。

    P.S. 其实如果不玩花活/炫技,即使是C/C++也没那么多问题的。
    我比

    来自无锡
  16. 来自江西上饶的 Chrome 117.0|Mac 10.15 用户 的头像
    来自江西上饶的 Chrome 117.0|Mac 10.15 用户

    和强不强类型没关系,核心问题是内存管理方式。

    来自上饶

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注