Linux全アーキ向けsyscallリファレンスサイトが更新
原題: Show HN: I've updated my Linux System Call website and API
なぜ重要か
低レイヤ開発・セキュリティ研究・カーネル移植において、27アーキテクチャのsyscall情報をAPI経由で一元取得できる公開リファレンスの整備は、開発効率を直接底上げする。
個人開発者が運営するLinux syscall情報サイト「syscall.sh」がリニューアルされた。x64やarm64、RISC-Vなど27アーキテクチャ・Linux 3.3〜7.3のシステムコール番号・引数・レジスタ情報を網羅。REST APIも提供しており、`curl https://api.syscall.sh/v2/syscalls/x64/read`のように任意のカーネルリリースのデータを取得できる。
syscall.shは、Linuxカーネルのシステムコールテーブルを27アーキテクチャ分まとめて参照できる無償Webサービスで、今回の更新でコンテンツとAPIが刷新された。
対応アーキテクチャはx64(369 syscalls)、x86(441)、arm64(326)、arm(426)、riscv64(327)、LoongArch64(323)、PowerPC 64/32、IBM Z(s390x)、MIPS各ABI、Alpha、ARC、C-SKY、Hexagon、m68k、MicroBlaze、Nios II、OpenRISC、HP PA-RISC、SuperH、SPARC 32/64、Xtensaなど多岐にわたる。収録バージョンはLinux 3.3から7.3まで。
データはカーネルソースコードを直接解析して生成されており、各アーキテクチャのsyscallテーブルとSYSCALL_DEFINEマクロを全mainlineリリース分ウォークスルーすることで、実際にカーネルがディスパッチする番号を記録している。エントリが追加・削除されたカーネルバージョンも`since`・`removed_in`フィールドで追跡可能で、削除済みのsyscallも「all, with removed」表示で確認できる。
呼び出し規約(calling convention)も表形式で整理されており、syscall番号を渡すレジスタ(NR)から引数レジスタ(ARG0〜ARG5)、戻り値レジスタ(RETURN)、カーネル遷移命令まで一覧できる。x64なら`syscall`命令・`rax`にsyscall番号、という形で直観的に確認できる。
各アーキテクチャのデータは`/<arch>/syscalls.json`からJSON形式でも取得可能。REST APIは`https://api.syscall.sh/v2/`以下でカーネルリリース間の差分取得などにも対応しており、ツール組み込みやスクリプト用途を想定した設計になっている。