アプリケーションで使用されるシステムコールのリスト

アプリケーションで使用されるシステムコールのリスト

リストを取得する方法はありますか?みんなアプリケーションで可能なすべてのシナリオを実行せずにアプリケーションでシステムコールを使用しますか?

答え1

理論的には、アプリケーションが特定の制約に準拠している場合はそうです。一般的に言えばそうではありません。

システムコールを呼び出す最も一般的な方法は、標準ライブラリラッパーを使用することです。たとえば、アセンブリread(fd,buf,BUFLEN)にコンパイルされ、call readamd64オブジェクトコードでコンパイルされますe8 00 00 00 00(ここでシンボルテーブルエントリは0を上書きしますread)。標準ライブラリで使用されるすべてのシステムコールのテーブルを作成し、ターゲットコードを読み取って標準ライブラリへの呼び出しを見つけ、それを使用して可能なシステムコールを見つけます。

ただし、プログラムをsyscall直接使用することもできます。最初のパラメータはシステムコール番号です。ファイル、コマンドライン引数、標準入力、ネットワークソケットから数字を読み取るか、いくつかの長い計算を実行できます(小数因数分解試行、特定のSHA2ハッシュを生成する入力を順番に検索、ユニバーサルTuringマシンを実行する)。マシンが停止するまで)を生成します。

プログラムはdlopen/を使用dlsymして標準ライブラリ関数を呼び出すこともでき、ファイル、コマンドライン引数、標準入力、ネットワークソケット、またはいくつかの長い計算後に呼び出す名前を取得できます。実際に探している標準ライブラリ関数はそれsyscall自体でもあります。

したがって、一部のプログラムでは、答えは「何でも呼び出すことができます」です。

関連情報