利用可能なすべてのLinuxシステムコールを列挙する最良の方法は何ですか?
これを明確にするために、コンテナ化された環境で実行するときにseccompによってフィルタリングされたシステムコールを取得する方法を尋ねました。
ベストアンサー1
Linuxシステムコールを列挙する2つの可能な方法が見つかりました。そのうちの1つが含まれています一行を強打するただし、ディストリビューションに関連するすべてのマンページが含まれているかどうかによって異なります。もう一つ、ストレス、可能なすべてのシステムコールを検出して追跡するために使用できるツールです。
ストレス
strace
見つけることができるGitHubそしてGitLab。あなたの環境を保証することはできません。コンテナ内のシステムコールを調べたい場合、このソリューションは理想的ではありませんが、マンページがインストールされない可能性があるため、bash 1行のソリューションよりもうまく機能します。
システムコールタイプによるフィルタリング:
strace -e trace=%desc Trace all file descriptor related system calls. %file Trace all system calls which take a file name as an argument. %fstat Trace fstat and fstatat syscall variants. %fstatfs Trace fstatfs, fstatfs64, fstatvfs, osf_fstatfs, and osf_fstatfs64 system calls. %ipc Trace all IPC related system calls. %lstat Trace lstat syscall variants. %memory Trace all memory mapping related system calls. %network Trace all the network related system calls. %process Trace all system calls which involve process management. %pure Trace syscalls that always succeed and have no arguments. %signal Trace all signal related system calls. %stat Trace stat syscall variants. %statfs Trace statfs, statfs64, statvfs, osf_statfs, and osf_statfs64 system calls. %%stat Trace syscalls used for requesting file status. %%statfs Trace syscalls related to file system statistics.
ただし、特定のシステムコールの一覧がある場合は、次のコマンドを使用できます。
strace -e [syscall1],[syscall2],[syscall3],...,[syscalln]
私も含めましたこのブログstrace に関する追加情報。
一行をバッシュ
システムコールのマニュアルページを参照してください。リンク1 リンク2、またこのページ特定のLinuxシステムに対して利用可能なすべてのシステムコールを列挙するタスクを実行する方法についての提案を提供します。
Webからの個人的なアドバイスシステムコールの完全なリストは、マンページを参照できます。この例では、コメント付きのリストとして出力を提供します。
ls /usr/share/man/man2 | sed -e s/.2.gz//g | xargs man -s 2 -k | sort | grep -v 'unimplemented system calls'
結論として
もう一度申し上げますが、ディストリビューションがすべてのパッケージと関連するマンページの両方を提供できない場合、このbashシングルライナーは機能しません。注釈付きのリスト出力が不要で、このソリューションが目的の出力に適していない場合は、投稿を更新して目標をよりよく定義してください。
私もシステムコールを見つけるためのPythonツールリンク。これは、見つかったシステムコールと利用可能なシステムコールを比較するのに良い参考資料になる可能性があります。
この回答について質問や質問がある場合は、コメントを残してください。コマンドを試す前に、私が提供する各リンクを注意深く読んでください。誤解を解決し、投稿を改善するためにフィードバックを送信していただきありがとうございます。必要に応じて回答を更新できます。
頑張ってください!