如何从程序集中调用 Rust 函数?

0 assembly function rust

我正在寻找类似 C 的通过函数调用 [function] 的调用。我通过 ld 将 asm 和 Rust 连接到一个二进制文件中。

She*_*ter 5

如果您知道如何从汇编中调用 C 函数(我不知道),那么这将帮助您获得一个可以像 C 函数一样调用的 Rust 函数:

// foo.rs
#[no_mangle]
pub extern fn increment(a: i32) -> i32 {
    a + 1
}
Run Code Online (Sandbox Code Playgroud)

将其编译为动态或静态库:

$ rustc --crate-type dylib foo.rs
$ nm libfoo.dylib  | grep increment
0000000000000c70 t __ZN9increment10__rust_abiE
0000000000000c30 T _increment
Run Code Online (Sandbox Code Playgroud)

现在您有了一个可以像 C 库一样调用的库。您应该阅读整个FFI 指南,以更好地了解从 Rust 外部调用 Rust 的权衡和陷阱。