Linux カーネルの制御フローで、制御が割り込みの場所を持つ IDT に移動することがわかりました (例: 0x80 システム コール)。そして、制御は適切なシステム コールに移動します。また、IDT は起動時にのみ初期化されることもお読みください。
その場所など、実際のカーネルからの IDT 情報について詳しく知りたいです。また、他の時点で変更されているかどうかを知りたいですか?
助けてください。
Linux カーネルの制御フローで、制御が割り込みの場所を持つ IDT に移動することがわかりました (例: 0x80 システム コール)。そして、制御は適切なシステム コールに移動します。また、IDT は起動時にのみ初期化されることもお読みください。
その場所など、実際のカーネルからの IDT 情報について詳しく知りたいです。また、他の時点で変更されているかどうかを知りたいですか?
助けてください。
rooktitを書いていますか?
とにかく、LIDT/SIDT x86 命令を使用して、IDT を直接見つけて操作できます。また、まさにこのテーマに関する優れたphrack 記事で、IDT フックに関する情報を見つけることもできます。
Linux では、IRQ 処理関数の宣言はinclude/linux/interrupt.hにあります。一般的な処理コードはkernel/irq/にあり、プラットフォーム固有のコードは arch/ ディレクトリにあります - たとえば、arch/x86/kernel/irq.cとそのディレクトリにある他の irq*.c ファイルを見てください。
Linux の IRQ に関するロック規則とメカニズムを理解するには、kernel/irc/*.c ファイルのコメントを読む必要があります。他の OS では、異なるロック規則を使用できることに注意してください。幸運を!