リストを取得する方法はありますか?みんなアプリケーションで可能なすべてのシナリオを実行せずにアプリケーションでシステムコールを使用しますか?
答え1
理論的には、アプリケーションが特定の制約に準拠している場合はそうです。一般的に言えばそうではありません。
システムコールを呼び出す最も一般的な方法は、標準ライブラリラッパーを使用することです。たとえば、アセンブリread(fd,buf,BUFLEN)
にコンパイルされ、call read
amd64オブジェクトコードでコンパイルされますe8 00 00 00 00
(ここでシンボルテーブルエントリは0を上書きしますread
)。標準ライブラリで使用されるすべてのシステムコールのテーブルを作成し、ターゲットコードを読み取って標準ライブラリへの呼び出しを見つけ、それを使用して可能なシステムコールを見つけます。
ただし、プログラムをsyscall
直接使用することもできます。最初のパラメータはシステムコール番号です。ファイル、コマンドライン引数、標準入力、ネットワークソケットから数字を読み取るか、いくつかの長い計算を実行できます(小数因数分解試行、特定のSHA2ハッシュを生成する入力を順番に検索、ユニバーサルTuringマシンを実行する)。マシンが停止するまで)を生成します。
プログラムはdlopen
/を使用dlsym
して標準ライブラリ関数を呼び出すこともでき、ファイル、コマンドライン引数、標準入力、ネットワークソケット、またはいくつかの長い計算後に呼び出す名前を取得できます。実際に探している標準ライブラリ関数はそれsyscall
自体でもあります。
したがって、一部のプログラムでは、答えは「何でも呼び出すことができます」です。