gpt4 book ai didi

arm - ARM64中如何实现系统调用?

转载 作者:行者123 更新时间:2023-12-02 11:34:11 24 4
gpt4 key购买 nike

我正在使用arm64汇编编码,我想使用svc指令实现系统调用。我在网上找不到任何可用的arm64系统调用实现。此外,我也找不到arm64的系统调用列表。还解释一下实现。

最佳答案

您可以将x0中的六个参数传递给x5,返回值保存在x0中。

为了给出汇编程序片段,这是来自 Android Bionic's libc implementationwrite 系统调用。 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用于参数和返回值处理。

另一个例子:

如果您手头有 asld,您可以创建一个简单的可执行文件,只需使用退出值退出即可。

这里42是我们的返回值,93exitsystem 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

关于arm - ARM64中如何实现系统调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25431095/

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