ファイブ.Windowsカーネル保護メカニズム - コールゲート

。どのようにゲート記述子を識別するために:

どのようなゲートディスクリプタカーネルに2G、2G空間からユーザ空間、一つの部屋から別のものに入ると、私たちはドアを通って行く必要がありますか?あり、我々はまた、ドアを通って行く必要があります。

Sビットは1100ビット= 1種類である場合には  

この記述子は、ゲート記述子です:

 

 

 。他の記述子と区別特徴は何2つのディスクリプタ:

  1.一般的なコード、格納されたアドレスEIPのために実行されるCPUのコードアドレス、及びドアに、コード・アドレスは、ベース(新しいアドレスのセグメント・セレクタ)+ offset31によって実行される:オフセット16 + 15:ゼロ。

CALL CS:EIP(EIPどんな卵を使用していなかったこの時点では、ハッシュ番号...)

_asm

{

  CALLのfwordのPRT [0x48:12345678]

}

コードが実行されると、CPUはGDTに、この位置が空になっているので、ルックアップテーブルGDTは、私たちが書き換え助けるために、この場所を選んだ方段落CSに従ってサブ0x0048を選択します。

0000(OFFSET1)ec00`0008 0000(OFFSET2)

       

2個のオフセットアドレスからなる、または実際のEIPにジャンプしてドアを中断

位置P 1まで、3までDPLは、(コードができR3層で実行されているため)、このよう構成されるE 1110

TYPE 1100は、コールゲートサインですので、Cの構図

これは、0000が続いています

パラメータを渡す最終ParamCountは、0へのより多くの時間がありません

この組み合わせはEC00完了します

セグメント・セレクタを使用すると、リフトの重みにしたい場合は、その後、あなたがセットRPLに必要な、新しいセグメント・セレクタ、必要に応じて中塗りです0

ジャストは0008を書きました

(Windowsシステム自体は0書かれているので、だから、モデルを書きオフセットとインデックス...書き込みテストコードに気にしない、私は本当に使用を好まないそれ自体、コールゲートを使用しないため)

0000ec00`00080000そのように。

 

おすすめ

転載: www.cnblogs.com/jszyx/p/12416161.html