rust学习-不安全操作

这篇具有很好参考价值的文章主要介绍了rust学习-不安全操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在 Rust 中,不安全代码块用于避开编译器的保护策略

四种不安全操作

  • 解引用裸指针
  • 通过 FFI (Foreign Function Interface,外部语言函数接口)调用函数
  • 调用不安全的函数
  • 内联汇编(inline assembly)

解引用裸指针

原始指针(raw pointer,裸指针)* 和引用 &T 有类似的功能
引用总是安全的,因为借用检查器保证了它指向一个有效的数据
解引用不安全,一个裸指针只能通过不安全代码块执行

fn main() {
   
    let raw_p: *const u32 = &10;

    unsafe {
   
        assert!(*raw_p == 10);
    }
}

调用不安全函数

使用了 Rust 的 unsafe 特性
从原生指针中创建 slice 是不安全的,需要手动来确保指针和长度的正确性

use std::slice;

fn main() {
   
    // 定义一个包含四个元素的 Vector
    let some_vector = vec![1, 2, 3, 4];

    // 获取指向 Vector 对象的原始指针和长度
    let pointer = some_vector.as_ptr();
    let length = some_vector.len();

	// 不安全操作,使用unsafe块
    unsafe {
   
        // 通过原始指针和长度创建一个 u32 类型的不可变 slice
        let my_slice: &[u32] = slice::from_raw_parts(pointer, length);
        
        // 使用 assert_eq! 宏进行断言,比较 Vector 和转换后的 slice 是否相等
        assert_eq!(some_vector.as_slice(), my_slice);
    }
}

附录

切片

&[u32] 是一个不可变的切片类型,也称为引用切片(slice reference)
用于表示一个基于某个 u32 类型的数组或向量的引用部分
它由一个指向数据的指针和一个长度值组成
指针指向数组或向量中第一个元素的地址
长度则表示这个切片包含的元素数目
常用于接收函数的参数/返回函数的结果文章来源地址https://www.toymoban.com/news/detail-678098.html

// 将数组或者向量转为slice切片
fn fn_name(slice: &[u32]) -> u32 {
   
    let mut sum = 0;
    for i in 0..slice.len() {
   
        sum += slice[i];
    }
    sum
}

fn main() {
   
    let array = [1

到了这里,关于rust学习-不安全操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【Rust 基础篇】Rust 模式:高效、安全和灵活的匹配工具

    在编程中,经常需要对数据进行匹配和处理,例如从一个复杂的数据结构中提取特定的值,或者根据不同的情况执行不同的逻辑。Rust是一门现代的系统编程语言,它引入了一种称为\\\"模式\\\"(Pattern)的强大特性,使得数据的匹配和处理变得高效、安全和灵活。本篇博客将深入探

    2024年02月08日
    浏览(14)
  • Rust安全编码实践 Secure Coding Practices in Rust

    作者:禅与计算机程序设计艺术 Rust编程语言被称为可保证内存安全的系统编程语言,它在编译期间通过类型系统确保数据不出错。因此,Rust语言开发者需要掌握一些安全编码实践,如内存安全、访问控制、输入验证等。本文将对这些安全编码实践进行详细介绍,并结合Rus

    2024年02月04日
    浏览(10)
  • Rust-内存安全

    Rust-内存安全

    一个进程在执行的时候,它所占用的内存的虚拟地址空间一般被分割成好几个区域,我们称为“段”(Segment)。常见的几个段如下。 代码段。编译后的机器码存在的区域。一般这个段是只读的。 bss段。存放未初始化的全局变量和静态变量的区域。 数据段。存放有初始化的全局

    2024年01月20日
    浏览(4)
  • Rust安全之数值

    编译通过,运行失败 cargo run 1 编译不通过 输出

    2024年02月11日
    浏览(4)
  • 几个开源 RUST 安全算法库

    几个开源 RUST 安全算法库

    这段时间把 RUST 语法过了一遍,写一些简单的 Demo 程序没啥问题了,但离掌握这门语言还差的远,需要项目实战才行。我决定从之前研究过的国密算法入手,使用 RUST 实现国密算法。 从头编写算法不太现实,上网搜了一下,还好已经有一些 开源 RUST 安全算法库,基于现有的

    2024年02月04日
    浏览(11)
  • Flutter调用Rust代码操作指南

    Flutter调用Rust代码操作指南

    在之前的利用Rust与Flutter开发一款小工具文章中,我们使用Rust代码实现了一个简单的WebSocket发送功能。也在Rust库交叉编译以及在Android与iOS使用这篇中介绍了Rust库的打包以及双端的使用。 今天我们继续用之前WebSocket的代码举例,来介绍如何在Flutter项目中使用。 本篇的主角就

    2024年02月09日
    浏览(15)
  • 从零学习Linux操作系统 第二十二部分 企业域名解析服务的部署及安全优化

    从零学习Linux操作系统 第二十二部分 企业域名解析服务的部署及安全优化

    关于dns的名词解释:dns: domain name service(域名解析服务) 关于客户端: /etc/resolv.conf dns指向文件 A记录 ##ip地址叫做域名的Address 记录 SOA ##授权起始主机 关于服务端 bind 安装包 named 服务名称 /etc/named.conf 主配置文件 /var/named 数据目录 端口 53 关于报错信息: 1.no servers could be reach

    2024年02月22日
    浏览(10)
  • 深入浅出Rust内存安全:构建更安全、高效的系统应用

    深入浅出Rust内存安全:构建更安全、高效的系统应用

    在过去几年中,Rust编程语言以其独特的安全保障特性和高效的性能,成为了众多开发者和大型科技公司的新宠。尤其是其内存安全特性,成为了广泛讨论和赞扬的焦点。本文旨在深入探讨内存安全的概念、Rust在内存安全方面的独到之处,以及这些特性对系统开发的深远影响

    2024年02月19日
    浏览(15)
  • TrustMe用Rust实现安全可信计算

    作者:禅与计算机程序设计艺术 Trusted Computing(简称TC)是一个现代信息系统工程的重要分支,其目的是通过可信任的计算环境构建具有高度安全性的安全计算解决方案。其定义为“一种建立在可信任基础上的系统,其处理的数据、计算资源、应用程序等在被授权时能提供某

    2024年02月10日
    浏览(11)
  • 没有jodatime,rust怎么方便高效的操作时间呢?

    当使用Rust进行日期操作时,可以使用 chrono 库。下面给出了二十个常见的日期操作的例子: 这些例子展示了如何使用 chrono 库进行日期操作,包括获取当前日期和时间、创建日期和时间、格式化日期和时间、进行加减操作、计算差值、比较日期的先后顺序等。

    2024年02月14日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包