v7a - ¿Cómo implementar la llamada al sistema en ARM64?
procesador arm en celulares (1)
Estoy trabajando con la codificación de ensamblaje Arm64 y deseo implementar llamadas al sistema utilizando la instrucción svc. No puedo encontrar ninguna implementación de llamada al sistema arm64 en línea. Además, no puedo encontrar la lista de llamadas del sistema para arm64. También explica la implementación.
Puede pasar seis argumentos en x0
a x5
, el valor de retorno se guarda en x0
.
Para dar un fragmento de ensamblador, se trata de write
syscall desde la implementación de libc de Android Bionic . los tres argumentos de write
ya estarían en x0-x2
. El número de Syscall se pasa en 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)
Dale una mirada a AArch64 ABI .
La generación más nueva de arquitecturas usa números de include / uapi / asm-generic / unistd.h .
También puede verificar arch / arm64 / include / asm / syscall.h para el argumento y el manejo del valor devuelto.
Otro ejemplo:
Si tiene as
y ld
en la mano, puede crear un ejecutable simple que acaba de salir con un valor de salida.
Aquí 42
es nuestro valor de retorno y 93
es la llamada al sistema de 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