GNU/Linux >> Linux の 問題 >  >> Linux

Linux –新しいカーネルのシステムコール呼び出しメソッド?

新しいカーネルでは、システムコールはINTX80命令とsysenter命令を使用して呼び出されることを読みました。また、sysenter命令は、他の方法と比較してより高速な呼び出しを提供します。

そのメソッドによって呼び出されたすべてのシステムコールを確認するにはどうすればよいですか?

承認された回答:

2.6より前のカーネルを実行している場合を除き、int x80は使用しません。 ほとんどのシステムコールを呼び出すためのメソッド。 systenter/sysexitを優先して置き換えられました 重要なことについては、カーネル2.6(2.5シリーズから開始)以降の方法。

古いカーネルに対して構築された古いバイナリがある場合でも、それらはint x80を使用している可能性があることに注意してください。 メソッド–それについてできることは、それらを再構築すること(または更新されたバイナリを取得すること)だけです。
ldd your_exeを実行します。 あなたが心配しているプログラムについて。 linux-gate.so.1がリストされている場合 またはlinux-vdso.so.1 、新しいsyscallを使用しています。そうでない場合は、(ほとんどの場合)古い方法を使用しています。
静的バイナリの場合、見分けるのは困難です。 1つの方法は、objdump your_exe | less システムコールラッパーを探します(__gettimeofday 良い候補です)。割り込みを使用しているかどうかは、分解からわかります。

古いINT80呼び出しがどのように機能し、新しいsyscallインターフェイスがどのように作成され、セットアップされたかについての詳細は、ここで確認できます:システムコール(Andries Brouwerによる)。
もう1つの良い読み物:linux-gateとは何ですか。 so.1 ?.

これらの記事は両方とも、Linux 2.6のSysenterベースのシステムコールメカニズムにリンクされており、Daniel P. Bovet、MarcoCesatiによるUnderstandingtheLinuxKernelの本を指しています。これはより一般的な情報に役立ちます。

つまり、心配する必要はありません。最近十分なシステム(CPU、カーネル、ディストリビューション)を使用している場合は、「高速」システムコールを使用しています。


Linux
  1. Linuxでカーネルバージョンを確認する方法

  2. アセンブリの Linux システム コール テーブルまたはチートシート

  3. Linux 待ち行列システム

  1. Rsyncを使用してLinuxシステム全体をバックアップする方法

  2. Linuxカーネルパニックを処理する方法

  3. x86 と x86_64 の Linux システムコール番号が異なるのはなぜですか?

  1. 最速の Linux システム コール

  2. パラメータをLinuxシステムコールに渡す方法は?

  3. Linux でシステム コール テーブルを変更する必要があるのはなぜですか?