新しいカーネルでは、システムコールは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、カーネル、ディストリビューション)を使用している場合は、「高速」システムコールを使用しています。