私は自分のプロテクトモードのオペレーティングシステムを作成しており、特定のもの(印刷文字列など)がコマンドプロンプトアプリケーションまたは他のアプリケーションにリダイレクトされるように割り込みテーブルを変更する方法を知る必要があります。テーブルを変更するにはどうすればよいですか?x86割り込みテーブルの変更
答えて
まず、システムコールに割り込みを使用することは、実際にはそれを実際に実装する「良い」方法ではありません。 x64をターゲットにしているなら、間違いなくSYSCALL
とSYSRET
を調べる必要があります。これにより、ユーザーの視点からは、カーネルコードの呼び出しが非常に便利になります。二。それがオプションでない場合は、カーネルコードの一部をプロセスの仮想メモリ空間にマッピングすることを検討してください。 Googleのlinux-gate.so.1
は、その実装例を読むことができます。
しかし、割り込みを使用してsyscallを実装したい場合は、読み込みます。もちろん、ハードウェアと実際にやりとりするためには、割り込みテーブルをどちらかの方法で修正する必要があります。
x86の保護モードでは、割り込みがIDTに配置されます。これは、割り込みディスクリプタテーブルの略です。そのテーブルは、タスクゲート記述子、割り込みゲート記述子、またはトラップゲート記述子のいずれかを含むことができる。テーブルは、リアルモード割り込みベクタテーブルと同様にインデックスされる。テーブルのn
番目のエントリには、割り込みを処理するために使用されるディスクリプタn
が含まれています。割り込みゲートとトラップゲートは実際には余分なデータを含む割り込みルーチンコードへのポインタに過ぎず、タスクゲートにはその割り込みを処理するはずのタスクのセレクタであるタスクステートセグメントセレクタが含まれています。 64ビットモードでは、ハードウェアタスク処理の非推奨のため、割り込み/トラップゲートのみがサポートされています。
私はこれらの問題を非常にはっきりと説明しているインテルのマニュアルを単純に言い換えれば、実際には言及していませんので、ちょうどhave a readをお勧めします。割り込みハンドリングは、そのドキュメントの第6章で説明されています。
- 1. 割り込みテーブルの変更
- 2. x86:割り込みハンドラループ
- 3. x86アセンブリのタイマ割り込み
- 4. 割り込み記述子テーブル(IDT)の変更
- 5. x86 CPUの割り込みレイテンシの見積もり
- 6. 保護モードでの割り込みの設定(x86)
- 7. c/asmでの割り込みの再プログラミングx86
- 8. x86ハードウェア割り込みがqemuで動作しません
- 9. 組み込みのDOSでx86リアルモードのキーボード割り込みサービスルーチンを設定してリセットする
- 10. Cortex-M3:割り込み復帰アドレスの変更
- 11. 割り込みによるconst参照の変更
- 12. x86アーキテクチャ用のLinuxカーネルでの割り込み処理コードの位置
- 13. TRAP、ソフトウェア割り込みとハードウェア割り込みの違いは?
- 14. 割り込みフラグと割り込み保留中のビットstm32
- 15. 割り込みsuper.onCreate()
- 16. x86での書き込みは、読み込みより高速ですか?
- 17. Arduinoでの割り込み
- 18. Linuxの割り込みレイテンシー
- 19. オペレーティングシステムの割り込みハンドラ
- 20. C++の割り込みサービスルーチン
- 21. オペレーティングシステムの割り込み
- 22. クラス内の割り込み
- 23. 割り込みハンドラのコンテキストスイッチ
- 24. x86アセンブリヒープメモリ割り当て
- 25. 他の割り込みベクタ内の割り込みベクタを呼び出す
- 26. 変更データの取り込みエラー
- 27. getTimeで動作する割り込み/割り込み関数の実行
- 28. ESP8266外部割り込み
- 29. Ardino USART1割り込み
- 30. カーネルモジュールプログラミング(割り込みハンドラ)
http://wiki.osdev.org/IDT – ughoavgfhw
OSアーキテクチャとシステムコールに関する議論はまあまあですが、それは単なる大規模な問題です。 「コマンドプロンプトが検索できる指定された場所に文字列やものを配置することを意味する」 - 遠隔操作が容易であれば、私は驚くだろう。通常、このような「別のアプリケーションへのリダイレクト」は、「文字列とstuff」がOSに割り当てられた構造体/オブジェクトに入り、他のプロセスのスレッドに通知されることを意味します。非常に複雑で、使用されるメカニズムはアーキテクチャに依存するため、ブログでは設計できません。 –