利用可能なすべてのLinuxシステムコールを列挙するための最良の方法は何ですか?
明確にするために、コンテナ化された環境で実行しているときに、seccompによってフィルタリングされているシステムコールを見つける方法を尋ねています。
Linuxシステムコールを列挙するための2つの可能な方法を見つけました。 1つは bash one-liner を含みますが、関連するすべてのマンページを出荷するディストリビューションに依存します。もう1つは、 strace で、考えられるすべてのシステムコールを検出して追跡するために使用できるツールです。
strace
は GitHub および GitLab にあります。私はあなたの環境を保証することはできません。コンテナ内のシステムコールをチェックしたい場合、このソリューションは理想的ではありませんが、マンページがインストールされていない可能性があるため、bashワンライナーよりもうまく機能します。
システムコールの種類でフィルタリング:
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 、および このWebページ を参照して、すべてを列挙するタスクを完了する方法についてアドバイスします。特定のLinuxシステムで利用可能なシステムコール。
Webページの担当者は、syscallの完全なリストについては、マンページを参照できることを示唆しています。この例では、注釈付きリストに出力を示します。
ls /usr/share/man/man2 | sed -e s/.2.gz//g | xargs man -s 2 -k | sort | grep -v 'unimplemented system calls'
繰り返しになりますが、ディストリビューションがすべてのパッケージを関連するすべてのマンページとともに出荷できない場合、bashワンライナーは不十分になることに注意してください。注釈付きリストの出力が不要で、このソリューションが目的の出力に適合しない場合は、投稿を更新して、目標をより適切に定義してください。
syscallの検索に使用されるpythonツール へのリンクも含めます。これは、検出したsyscallと利用可能なsyscallを比較するための良いリファレンスになる可能性があります。
この回答に関して質問や問題がある場合はコメントしてください。コマンドを試す前に、私が提供した各リンクをよく読んでおくことを強くお勧めします。誤解を正し、投稿を改善するためのフィードバックに感謝します。必要に応じて回答を更新できます。
幸運を祈ります!