9

私は arm64 アセンブリ コーディングを使用しており、svc instruction を使用してシステム コールを実装したいと考えています。動作中の arm64 システム コールの実装がオンラインで見つかりません。また、arm64 のシステム コール リストも見つかりません。実装についても説明します。

4

1 に答える 1

9

には 6 つの引数を渡すことができx0x5戻り値は に保存されx0ます。

アセンブラー スニペットを提供するために、これはAndroid Bionic の libc 実装writeからの syscallです。の 3 つの引数は、既に にあります。syscall 番号が渡されます。writex0-x2x8

/* 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が戻り値で、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
于 2014-08-21T17:11:43.860 に答える