Как реализовать системный вызов в ARM64?

Я работаю с ассемблером arm64 и хочу реализовать системные вызовы с помощью инструкции svc. Я не могу найти ни одной работающей реализации системных вызовов arm64 в Интернете. Кроме того, я не могу найти список системных вызовов для arm64. Также поясните реализацию.


person in3o    schedule 21.08.2014    source источник
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)

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
person auselen    schedule 21.08.2014
comment
Можете ли вы также дать список системных вызовов с номерами системных вызовов? - person in3o; 21.08.2014
comment
@in3o добавил кое-что еще. - person auselen; 21.08.2014
comment
не могли бы вы уточнить, о каком типе архитектур нового поколения вы говорите? x86_64 имеет другой список системных вызовов. - person in3o; 21.08.2014
comment
arc, arm64, c6x, hexagon, metatag, openrisc, score, tile, unicore32 ссылка: lkml .org/lkml/2014/2/3/248 - person auselen; 21.08.2014