in3*_*n3o 8 arm system-calls arm64
我正在使用arm64汇编编码,我想使用svc指令实现系统调用.我在网上找不到任何有效的arm64系统调用实现.另外,我找不到arm64的系统调用列表.还解释了实施.
您可以通过六个参数在x0给x5,返回值被保存在x0.
为了给出汇编代码片段,这是write来自Android Bionic的libc实现的系统调用.write三个论点已经存在了x0-x2.传入Syscall号码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)
Run Code Online (Sandbox Code Playgroud)
给AArch64 ABI看一看.
新一代架构都使用include/uapi/asm-generic/unistd.h中的数字.
您还可以检查arch/arm64/include/asm/syscall.h以获取参数和返回值处理.
如果您拥有as并且ld手头,您可以使用退出值创建一个简单的可执行文件.
这42是我们的返回值,93是exit 系统调用.
$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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5470 次 |
| 最近记录: |