gpt4 book ai didi

arrays - 如何在 Rust 中创建并传递以空字符结尾的 C 字符串数组 (char**)?

转载 作者:行者123 更新时间:2023-11-29 07:44:50 27 4
gpt4 key购买 nike

我正在使用 #![no_std]extern crate rlibc 玩弄一个新的初始化系统,并使用 asm 进行系统调用,目前正在尝试不分配内存任何一个。所以我可能拥有的工具的范围是有限的。

我需要调用 execve 系统调用,它需要一个 char** argv 和一个 char **envp。我可以将 C 风格的字符串组合成带零的字节数组,但是我如何以 null 终止这样的静态声明列表(最后一个指针为 NULL)

最佳答案

在沉睡之后,我醒来时得到了答案,现在对我来说似乎很明显。使用整数切片并将最后一个整数设置为 0。

// Execute something as an example:
let filename: &[u8] = b"/usr/bin/sensors\x00"; // <-- Make c strings like this
let argv1: &[u8] = b"/usr/bin/sensors\x00";
let argv2: &[u8] = b"-h\x00";
let argv: &[int] = [ // <-- store them in this
::core::intrinsics::transmute(argv1.as_ptr()), // <-- transmuting
::core::intrinsics::transmute(argv2.as_ptr()),
0 // <-- and NULL terminate
];
let envp: &[int] = [0];

::linux64::execve(filename,argv,envp);

关于arrays - 如何在 Rust 中创建并传递以空字符结尾的 C 字符串数组 (char**)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24969090/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com