gpt4 book ai didi

rust - 使用参数调用 libc::c_void-Pointer 作为 Rust 中的函数

转载 作者:行者123 更新时间:2023-11-29 08:17:42 60 4
gpt4 key购买 nike

<分区>

互联网的 friend 们好,

我正在努力调用存储在 libc::c_void 指针中的函数。我无法告诉 Rust 指针是可调用的,而且我不知道该怎么做。

我想翻译这段C++代码

void * malloc(size_t size) {
static void *(*real_malloc)(size_t) = nullptr;
if (real_malloc == nullptr) {
real_malloc = reinterpret_cast<void *(*)(size_t)> (dlsym(RTLD_NEXT, "malloc"));
}
// do some logging stuff
void * ptr = real_malloc(size);
return ptr;
}

使用rust 。

#[no_mangle]
pub extern fn malloc(bytes: usize) {
let c_string = "malloc\0".as_mut_ptr() as *mut i8; // char array for libc
let real_malloc: *mut libc::c_void = libc::dlsym(libc::RTLD_NEXT, c_string);
return real_malloc(bytes);
}

这是我在互联网上搜索和尝试 1 小时后到目前为止的进展。我是 Rust 的新手,还不熟悉 Rust/FFI/Rust with libc。我尝试了很多不安全的{},使用 as 进行转换,但我总是遇到以下问题:

return real_malloc(bytes);
^^^^^^^^^^^^^^^^^^ expected (), found *-ptr

Q1:如何调用存储在real_malloc中的void-Pointer背后的函数?

Q2:我的 Rust-String 到 C-String 的转换是否可行?

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