Я работаю с ассемблером arm64 и хочу реализовать системные вызовы с помощью инструкции svc. Я не могу найти ни одной работающей реализации системных вызовов arm64 в Интернете. Кроме того, я не могу найти список системных вызовов для arm64. Также поясните реализацию.
Как реализовать системный вызов в ARM64?
comment
Это зависит от используемой вами ОС. Для кого вы пишете код?
- person jtlim   schedule 21.08.2014
comment
Я использую amd64 linux и пишу для aarch64 linux.
- person in3o   schedule 21.08.2014
comment
В этом блоге объясняется полный поток системных вызовов в ARM64. Может быть вам полезен. http://eastrivervillage.com/Anatomy-of-Linux-system-call-in-ARM64/
- person theB   schedule 12.06.2018
comment
Здесь находится таблица номеров системных вызовов: .com/questions/16917/
- person Ciro Santilli 新疆再教育营六四事件ۍ   schedule 28.08.2018
Ответы (1)
Вы можете передать шесть аргументов из x0
в x5
, возвращаемое значение сохраняется в x0
.
Чтобы дать фрагмент ассемблера, это write
системный вызов из Реализация libc для Android Bionic. Три аргумента 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)
Во всех архитектурах нового поколения используются номера из 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
person
auselen
schedule
21.08.2014
Можете ли вы также дать список системных вызовов с номерами системных вызовов?
- person in3o; 21.08.2014
@in3o добавил кое-что еще.
- person auselen; 21.08.2014
не могли бы вы уточнить, о каком типе архитектур нового поколения вы говорите? x86_64 имеет другой список системных вызовов.
- person in3o; 21.08.2014
arc, arm64, c6x, hexagon, metatag, openrisc, score, tile, unicore32 ссылка: lkml .org/lkml/2014/2/3/248
- person auselen; 21.08.2014