2016-05-25 5 views
3

学期の締め切りのアプローチとして、私は大学でオペレーティングシステムコースのプロジェクトに取り掛かることにしました。 プロジェクト割り当ての問題は、単純なカーネル(基本プロセスとスレッド管理)として実行するユーザーアプリケーション(exe)を開発する必要があることです。ユーザアプリケーションからリング0モードにアクセスする(そして、なぜボーランドがこれを許可するのか)

私の頭に浮かぶ最初のことは、私はユーザーアプリケーションで特権コードをどのように実行することになっていますか?

(時間通りにプロジェクトを行った)他の学生と相談した結果、Borland 3.1コンパイラを使用しても問題なく、特権コードを実行できることがわかりました。しかし、彼らの誰もそれが奇妙で、なぜそれが働いたのか分かっていませんでした。なぜボーランドはこれを行うのですか(ここではより良い質問)ですか? OSセキュリティの基本原則に違反していませんか?

注:プロジェクトはC++アプリケーションとして作成され、ほとんどの特権コードがインラインアセンブリとして実行されるため、C++タグを追加しました。

更新私の質問は、もともと多少言い表せませんでした。もちろん、どのコンパイラでも特権命令を使ってコードをコンパイルすることができました。コードを実行することが問題でした。

+0

あなたが望むものは何でもできます(もちろんtpmモジュールを持っていなければ)。なぜそれは驚くべきことでしょうか? os全体は、多かれ少なかれ特権を持つアプリケーションで構成されています。 – Solarflare

+0

@Solarflare申し訳ありませんが、これはWindowsプロジェクトです。 – tellerath

+0

@Solarflare:管理者としての実行と特権命令の実行には違いがあります。後者はあなたに**道**より多くの特権を与えます(例えば、サービスアプリケーションのプロセスメモリの読み込み)。 – IInspectable

答えて

6

2つのこと:

  1. 戻る8086リアルモードの日には特権レベルがありませんでした。 Borland 3.1は16ビットコンパイラでした。最新版のWindowsで作成されたコードを実行している場合、NTVDMを使用して仮想8086モードで実行されます。これには特権レベルもありません。

  2. 現代のコンパイラ/アセンブラを使用している場合でも、プロテクトモードとロングモードでも、一般に特権命令については不平を言っていません。このソースコードは、MSVC 2015年に私のためにうまくコンパイルが、それはあるレジスタにアクセスしようとするので、私はそれを実行するたびにクラッシュ立ち入り禁止ユーザーモードアプリケーションへ:rootパスワードを入力した場合

 
int main() 
{ 
    __asm 
    { 
     mov eax, cr0 
     or eax, 1 
     mov cr0, eax 
    } 
    return 0; 
} 
+1

ポイント1の説明をありがとうございます。MSVC 2015では問題なくコードをコンパイルできましたが、実行するとエラーが発生します。もともと私はこのプロジェクトをVisual Studioに書きたいと思っていましたが、私はそれがBorlandコンパイラをVSに統合するのに苦労すると思います。 – tellerath

+1

@Govind:32ビットウィンドウのみがNTVDMをサポートすることに注意することが重要です。 [仮想8086モードはロングモードでは動作しません](https://en.wikipedia.org/wiki/Virtual_8086_mode)、レガシーモードのカーネルのみで64ビットのウィンドウを開くことはできません。 64ビットシステムでネイティブに16ビットコードを実行することは、VT-x(ハードウェア仮想化)でのみ可能です。 –

+0

@PeterCordesはい、しかしOPは、質問に彼のコメントの1つで、彼がWindows 7のx86バージョンを使用していると具体的に述べました。 –

5

コンパイラの仕事は厳密に入力をコンパイルされた出力に変換するためです。これは、システムセキュリティルールを強制するものではありません。コンパイルされたコードを実行するOSやエミュレータなど、実行環境の仕事です。

+0

もう一度、私の質問は多少言い表せませんでした。私はコードをコンパイルすることはできましたが、実行することはできませんでした。 – tellerath

+0

それであなたの質問は何でしたか? –

+0

Borland製の16ビット実行可能ファイルが特権命令を実行できる理由は、実際の質問には間違いありません。マイケル・ペッチが16ビットの実行可能ファイル用の仮想マシンを提供するNTVDMに関するコメントに答えたという質問。 –

関連する問題