2012-05-01 13 views
2

私は自分のプロテクトモードのオペレーティングシステムを作成しており、特定のもの(印刷文字列など)がコマンドプロンプトアプリケーションまたは他のアプリケーションにリダイレクトされるように割り込みテーブルを変更する方法を知る必要があります。テーブルを変更するにはどうすればよいですか?x86割り込みテーブルの変更

+2

http://wiki.osdev.org/IDT – ughoavgfhw

+1

OSアーキテクチャとシステムコールに関する議論はまあまあですが、それは単なる大規模な問題です。 「コマンドプロンプトが検索できる指定された場所に文字列やものを配置することを意味する」 - 遠隔操作が容易であれば、私は驚くだろう。通常、このような「別のアプリケーションへのリダイレクト」は、「文字列とstuff」がOSに割り当てられた構造体/オブジェクトに入り、他のプロセスのスレッドに通知されることを意味します。非常に複雑で、使用されるメカニズムはアーキテクチャに依存するため、ブログでは設計できません。 –

答えて

2

まず、システムコールに割り込みを使用することは、実際にはそれを実際に実装する「良い」方法ではありません。 x64をターゲットにしているなら、間違いなくSYSCALLSYSRETを調べる必要があります。これにより、ユーザーの視点からは、カーネルコードの呼び出しが非常に便利になります。二。それがオプションでない場合は、カーネルコードの一部をプロセスの仮想メモリ空​​間にマッピングすることを検討してください。 Googleのlinux-gate.so.1は、その実装例を読むことができます。

しかし、割り込みを使用してsyscallを実装したい場合は、読み込みます。もちろん、ハードウェアと実際にやりとりするためには、割り込みテーブルをどちらかの方法で修正する必要があります。

x86の保護モードでは、割り込みがIDTに配置されます。これは、割り込みディスクリプタテーブルの略です。そのテーブルは、タスクゲート記述子、割り込みゲート記述子、またはトラップゲート記述子のいずれかを含むことができる。テーブルは、リアルモード割り込みベクタテーブルと同様にインデックスされる。テーブルのn番目のエントリには、割り込みを処理するために使用されるディスクリプタnが含まれています。割り込みゲートとトラップゲートは実際には余分なデータを含む割り込みルーチンコードへのポインタに過ぎず、タスクゲートにはその割り込みを処理するはずのタスクのセレクタであるタスクステートセグメントセレクタが含まれています。 64ビットモードでは、ハードウェアタスク処理の非推奨のため、割り込み/トラップゲートのみがサポートされています。

私はこれらの問題を非常にはっきりと説明しているインテルのマニュアルを単純に言い換えれば、実際には言及していませんので、ちょうどhave a readをお勧めします。割り込みハンドリングは、そのドキュメントの第6章で説明されています。

関連する問題