最新のカーネルでは、INT X80命令とsysenter命令を使用してシステムコールが呼び出されることを読みました。 sysenter ディレクティブは、他の方法よりも呼び出し速度が速くなります。
この方法で呼び出されるすべてのシステムコールをどのように確認できますか?
答え1
2.6以前のカーネルを実行しない限り、ほとんどのシステムコールを呼び出すためにこの方法を使用しません。カーネル 2.6 (2.5 シリーズから始まる) からint x80
重要なタスクを実行するためにこの方法に置き換えられました。systenter/sysexit
古いカーネル用にビルドされた古いバイナリがある場合は、このint x80
方法で引き続き機能します。できる唯一のことは、再構築すること(または最新のバイナリを取得すること)です。気になるプログラムを
実行してみてください。またはがldd your_exe
リストされている場合は、新しいシステムコールを使用しています。そうでない場合は、おそらく以前の方法を使用します。静的バイナリを使用すると、話すのは難しいです。 1つの方法は、システムコールラッパー(良い候補)を見つけることです。割り込みを使用するかどうかは、逆アセンブルで確認できます。linux-gate.so.1
linux-vdso.so.1
objdump your_exe | less
__gettimeofday
既存のINT 80呼び出しの仕組みと、新しいシステムコールインタフェースの設定と設定方法の詳細な概要については、こちらをご覧ください。システムコール(アンドリス・ブラウアー)。
読むためのもう一つの良い本:linux-gate.so.1とは何ですか?。
どちらの記事も別の記事にリンクされています。Linux 2.6のSysenterベースのシステムコールメカニズム、そして次を指します。Linuxカーネルについて学ぶDaniel P. BovetとMarco Cesatiが書いた本は、より一般的な情報を提供するのに優れています。
要するに:心配しないでください。十分に新しいシステム(CPU、カーネル、およびディストリビューション)がある場合は、「高速」システムコールを使用しています。