 Rust 程序设计语言 简体中文版 1.85.0语言中,尝试读取数据结构之后的值是未定义行为(undefined behavior)。你会得到任何 对应数据结构中这个元素的内存位置的值,甚至是这些内存并不属于这个数据结构的情况。这 被称为 缓存区过读(buffer overread),并可能会导致安全漏洞,比如攻击者可以像这样操作 索引来读取储存在数据结构之后未经授权的数据。 为了保护程序不受此类漏洞的影响,如果尝试读取一个索引不存在的元素,Rust 环境变量来得到一个 backtrace。backtrace 是一个 执行到目前位置所有被调用的函数的列表。Rust 的 backtrace 跟其他语言中的一样:阅读 backtrace 的关键是从头开始读直到发现你编写的文件。这就是问题的发源地。这一行往上是 你的代码所调用的代码;往下则是调用你的代码的代码。这些行可能包含核心 Rust 代码,标 准库代码或用到的 crate 代码。让我们将 RUST_BACKTRACE 然而,使用过多的 trait bound 也有缺点。每个泛型有其自己的 trait bound,所以有多个泛 型参数的函数在名称和参数列表之间会有很长的 trait bound 信息,这使得函数签名难以阅 读。为此,Rust 有另一个在函数签名之后的 where 从句中指定 trait bound 的语法。所以除了 这么写: fn some_function0 码力 | 562 页 | 3.23 MB | 25 天前3 Rust 程序设计语言 简体中文版 1.85.0语言中,尝试读取数据结构之后的值是未定义行为(undefined behavior)。你会得到任何 对应数据结构中这个元素的内存位置的值,甚至是这些内存并不属于这个数据结构的情况。这 被称为 缓存区过读(buffer overread),并可能会导致安全漏洞,比如攻击者可以像这样操作 索引来读取储存在数据结构之后未经授权的数据。 为了保护程序不受此类漏洞的影响,如果尝试读取一个索引不存在的元素,Rust 环境变量来得到一个 backtrace。backtrace 是一个 执行到目前位置所有被调用的函数的列表。Rust 的 backtrace 跟其他语言中的一样:阅读 backtrace 的关键是从头开始读直到发现你编写的文件。这就是问题的发源地。这一行往上是 你的代码所调用的代码;往下则是调用你的代码的代码。这些行可能包含核心 Rust 代码,标 准库代码或用到的 crate 代码。让我们将 RUST_BACKTRACE 然而,使用过多的 trait bound 也有缺点。每个泛型有其自己的 trait bound,所以有多个泛 型参数的函数在名称和参数列表之间会有很长的 trait bound 信息,这使得函数签名难以阅 读。为此,Rust 有另一个在函数签名之后的 where 从句中指定 trait bound 的语法。所以除了 这么写: fn some_function0 码力 | 562 页 | 3.23 MB | 25 天前3
共 1 条
- 1













