我正在使用arm64汇编编码,我想使用svc指令实现系统调用。我在网上找不到任何有效的arm64系统调用实现。另外,我找不到arm64的系统调用列表。还解释了实施。
答案 0 :(得分:7)
您可以将x0
中的六个参数传递给x5
,返回值保存在x0
。
要提供汇编代码段,这是来自Android Bionic's libc implementation的write
系统调用。 write
的三个参数已经在x0-x2
中。系统调用号码在x8
中传递。
/* Generated by gensyscalls.py. Do not edit. */
#include <private/bionic_asm.h>
.hidden __set_errno
ENTRY(write)
mov x8, __NR_write
svc #0
cmn x0, #(MAX_ERRNO + 1)
cneg x0, x0, hi
b.hi __set_errno
ret
END(write)
给AArch64 ABI看一下。
新一代架构都使用include/uapi/asm-generic/unistd.h中的数字。
您还可以检查arch/arm64/include/asm/syscall.h参数和返回值处理。
如果您手头有as
和ld
,则可以使用退出值创建一个简单的可执行文件。
此处42
是我们的返回值,93
是exit
system call。
$cat answer.s
.global _start
_start:
mov x0, #42
mov x8, #93
svc #0
$as answer.s -o answer.o
$ld answer.o -o answer
$./answer
$echo $?
42