1 个不稳定版本
0.0.2 | 2021 年 3 月 2 日 |
---|---|
0.0.1 |
|
#893 in Unix API
505 下载/月
10KB
131 行
syscall-linux-raw
定义用于执行原始 Linux 系统调用的 syscallN 方法。
是什么
定义了一组方法,用于抽象具有不同数量参数的原始系统调用,仅在 target_os = "linux"
上可用。就是这样。但它可以在稳定版本上工作,并且可能对其他系统调用二进制接口有所启发。
如何
通过纯粹的魔法。开玩笑的,它定义了一个完全汇编的二进制函数,具有正确的 C-abi,并将它们作为可调用的函数使用 #[no_mangle]
标记,然后定义了一组使用 Rust abi 的包装器,这些包装器在某些时候应该是独立于后端选择的 ISA 可用的。
什么意思
的确。不要在生产环境中使用。
演示?
请参阅示例:cargo run --example simple
.
仅在 x86_64-unknown-linux-*
上运行,并在其他架构和操作系统上编译失败。
许可证
基本软件: 无版权许可证
lib.rs
:
可能支持的平台表
系统调用和 ret 指令及寄存器
Arch/ABI Instruction System# Ret1 Ret2
arm/OABI swi NR - r0 -
arm/EABI swi 0x0 r7 r0 r1
arm64 svc #0 w8 x0 x1
i386 int $0x80 eax eax edx
riscv ecall a7 a0 a1
x86-64 syscall rax rax rdx
x32 syscall rax rax rdx
参数寄存器
Arch/ABI arg1 arg2 arg3 arg4 arg5 arg6 arg7 Notes
arm/OABI r0 r1 r2 r3 r4 r5 r6
arm/EABI r0 r1 r2 r3 r4 r5 r6
arm64 x0 x1 x2 x3 x4 x5 -
i386 ebx ecx edx esi edi ebp -
riscv a0 a1 a2 a3 a4 a5 -
x86-64 rdi rsi rdx r10 r8 r9 -
x32 rdi rsi rdx r10 r8 r9 -
C-abi 寄存器
Arch/ABI a0 a1 a2 a3 a4 a5 ret1 ret2 caller
x86-64 rdi rsi rdx rcx r8 r9 rax rdx rbx,rsp,rbp
依赖项
~2MB
~44K SLoC