私は arm64 アセンブリ コーディングを使用しており、svc instruction を使用してシステム コールを実装したいと考えています。動作中の arm64 システム コールの実装がオンラインで見つかりません。また、arm64 のシステム コール リストも見つかりません。実装についても説明します。
10012 次
1 に答える
9
には 6 つの引数を渡すことができx0
、x5
戻り値は に保存されx0
ます。
アセンブラー スニペットを提供するために、これはAndroid Bionic の libc 実装write
からの syscallです。の 3 つの引数は、既に にあります。syscall 番号が渡されます。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
于 2014-08-21T17:11:43.860 に答える