コンパイルの研究ノート(17) - 権利の譲渡及び権限段階の操作

基本的な概念の権限レベル

現在のコードではCPL = CS特権レジスタRPL

RPLセレクタ特権レベルが必要

DLPでは、目標特権レベルは、段落によって要求されます

例えば、私は、root権限で良いrootユーザだった、私は読み取り権限でファイルを開き、ファイルのパーミッションは777です 

CPL = ROOT権限

RPL =読み取りアクセス

DLP = 777 

 ローディング・データ・セグメント 

SSレジスタ

    1. 読み書きできるデータセグメント
    2. CPL = DL = RPL

 

その他のデータ・セグメント・レジスタ

    1. 読み書き可能なデータセグメント、可読コードセグメント
    2. CPL <= DPL、RPL <= DPL

 

操作する権限を変更(CSロード)

 ポインティングスニペット

JMP

コール

請求

不均一符号、CPL = DPL、RPL <= DPL

コードと一致して、CPL> = DLP

結果

INDEXとTIのCSは一定の変化であるCPL

RIGHT

請求

RPL = CPL

CALLは、CPLが一定の無事故ので、その後、RPL = CPLは常に真である後に、あるときCALLとJMPと同等であるため、事前CSセレクタを使用してRETリターン

抽出:

    1. 特権は変更されることはありません
    2. 不均一なコードは、請求項CPL = DPLに転送されるため、それが課す不均一なコードが同じレベルに転送することができ
    3. コードに一致する請求CPLため> = DLPは、同一または類似の符号が内側、外側の層から転送することができるが、いずれの場合も同じ特権レベルで
    4. RETがスタックCS内の圧力の前に使用されているので、RPL = CPLの前に、それはCPL = CPLの合計の前に設立されましたので、CPLは、変わらなかったので、常に最初の条件RETを満たします
    5. 不均一なコードのためには、CPL = DPLと一貫性のあるコードがCPLを必要とする必要が> = DPLのは、見て聞くと、CPL変わらないので、合法的なコールチェーンのCPL> = DLPが永遠に確立されています
    6. 図4 CPL RPLは、プッシュであり、CPL変わらず、公知のRPL = CPLは、それが結論されるコールスタックRPL = CPL> = DLPその
    7. リターンが可能コード一致RPLからのコードと一致するようにRPL一致コードは、必要とされない> DLP状況は無視され、不均一なコードは、CPL = DPLあるため、それほど不均一にかかわらず、戻りコードの場合CPLありさ= DPL = RPL(6ミートRPL = CPL> = DLP場合)、正常に戻すことができます

 

概要

1. JMPとCALL大会ケースのさまざまなニーズを使用して、ここで、転送先コード

特定の非コードと一致して:CPL = DPL、RPL <= DPL

CPL> = DLP:目標は、コードと一致しています

2. CPLは変更されることはありません

3. CALLの実行条件がある限り、対応するRETは、条件を満たしたことがないだろうと満足しています

 

 

ポインティングコールゲート

コール・ゲートのみを選択し、サブ効果の最初のポイント、オフセットアドレスは無視されますされ

私は、次のシーンを満たすために、コールゲートニーズを使用したいので、第二コール・ゲートは、独自のDPLがあります

CPL <ゲートDPL、RPL <ゲートDPL

条件は、選択されたサブブランチ命令とオフセットアドレスで置換する、コールゲートと選択されたサブオフセットから削除され満足した後に交換が0に設定される前に、新たなサブRLPを選択する、すなわちゲート常に無意味である息子のRPLを選択するには0に置き換えること。 

そしてその後、CALL命令は特別な不均一なコードに転送される状況限り、概ねセグメントに直接ジャンプ

不均一なコードセグメントときポインティングドア指さCALLコマンドの呼び出しを使用する場合

CPLが表示された場合> DPLの場合の状況は直接間違っていることを指すが、CPL = DPLに設定されますドアを指している場合には、状況は他の単語の権利に言及するように見えます。

RPL> CPL見出される対応するとともに、CPL = RPLが設けられているRET命令は、右下の装置しました。

注:それはスタックを切り替えることになるとするとき、関連するコンテンツを切り替える当局は、このタスクは、ドアに説明します。

 

概要

      1.ポイントのドアが唯一の有効なセレクタ、オフセット無意味です

      2.コールがCPL <ドアDPL、RPL <DLPドアの確認となります

      3.ドアによって与えられたコールの実際のアドレスは、実際のコールRPLは常に0であります

      直接唯一の違いと一致するルールに4.その他の通話がCPL> DPLコールしない障害が発生したが、CPL = DPLが設定されている場合、コードは、実際のCALL不均一な時点のアドレスであり、対応するRPLは、RETを見つけます> CPL時間はCPL = RPLに設定され、ここでのRPLは、実際には、特権または回復であるCPL CALL命令プッシュCSレジスタ、です。

 

TSSのデータポイント

許可を要求、CPL <= DPL RPL <= DPL

オフセットアドレス呼び出し命令はTSSスイッチを直接タスク(スレッド)に直接、CPUのデータを無視しています。

 

タスクのドアへのポイント

そして、直接TSSにデータがあること、検出するために、より多くの権限となって、区別を欠い

最初は、CPL <ゲートDPL、RPL <= DPLゲートを検出しました

次いで、DPLのCPL <TSS、ドアRPL <= TSS DPLの検出

そして、TSSデータ、命令、およびオフセット意味無しのドアを使用してタスクを切り替えます。

CALLの使用を注意しJMPは、差のビットであります

ネストされたタスクの原因CALL、そのCALLのドアの呼び出しを使用して、タスクは、RETを使用して、その元のタスクに戻ることができます

     

 権限レベルスイッチスタックの切り替え

      権限レベルの切り替えスイッチのスタックがあるだろうと、各権限レベルには独自のスタックを持って、これらのアドレスは、TSSに保存されているが発生し、012 3つの特権レベルのスタック、どこへ行くたびにバイト数がコピーされたとして、彼らは、メモリコピーを発生すること、パラメータの特権レベルの変更を渡すために、最後のエントリの時間の痕跡を保持しないリセット、タスクゲートタスク二重扉があるだろうバイトのフィールドは、割り込みトラップドアに決定し、ドアの割り込みまたは例外タイプが自動的に決定されます。

 

おすすめ

転載: www.cnblogs.com/alwaysking/p/12345946.html