割り込みがリアルモードで発生すると、CPUはInterrupt Vector Tableで指定されている割り込みのハンドラに実行を転送します。
このコンテキストで割り込みをフックするとは、割り込みベクタテーブル内のエントリ19h
のアドレスを、選択した別のアドレスを指すように変更することを意味します。その後、割り込み19h
が起動されると、そのアドレスから始まる独自のルーチンが実行され、復帰する前に制御が元の19h
割り込みハンドラに戻される可能性があります。
割り込みハンドラがRAMに配置されていると仮定すると、割り込みのハンドラ内にインラインフックを配置する方法があります(19h
)。すなわち、割込みハンドラのアドレスだけを残すことができるが、ハンドラ内の命令の1つをjmp
(またはcall
)でそれらのルーチンに置き換えることができる。このような状況では、このタイプのフッキングを監視するかどうかは不明です。
編集:文書をスキミングした後、フックの最初のスタイルは、彼らが話していたものであることが表示されます。
... IPLデバイスは、システムBIOSに知られている場合は、 割り込み19hとはまだ、システムBIOSによって制御されていることを確認してください。 ない場合は、割り込み19Hを奪還し、ベクトルを保存...
を...オペレーティングシステムのロードに失敗し、前のISAオプションROM は、割り込み19hのベクトルの制御を持っていた場合は、割り込み19Hを復元ISAオプションROM、再度実行割り込み19hのブートストラップローダへのベクトル...
ので、基本的には、ブートプロセスの特定の部分で、彼らはオプションROMがためのハンドラを変更したかどうかを確認します割り込み19h
。変更されている場合は、新しいハンドラのアドレスを保存し(後で実行することもできます)、元のハンドラをIVTに戻します。