問題タブ [protected-mode]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1065 参照

assembly - dosbox でプロテクト モードに切り替えるアセンブリ プログラムを実行できますか?

私たちは、386 プロセッサをリアル モードからプロテクト モードに切り替えてからリアル モードに戻すアセンブリ プログラムを研究しています。プログラムは TASM を使用してコンパイルされます。

このプログラムはいくつかの特権操作を実行する必要があり、リアル モードで起動する必要があるため、DOS から実行する必要があります。このために、フロッピー ディスクを持参して、大学のコンピュータで DOS を起動できるようにするように言われました。

代わりに Dosbox を使用できないかと考えています。しかし、プロテクト モードとリアル モードでI386 を忠実にエミュレートする必要があり、それができるかどうかはわかりません。

0 投票する
1 に答える
264 参照

assembly - 保護モードでの間接 jmp に関する質問

アドレス xxxx:yyyyyyyy はプロテクト モードで 32 ビットであるため、48 ビットのアドレスをメモリに入れ、 indirect を指定したいと思いますjmp

しかし、ナズムはそれが間違っていることを示しています。私はこのjmp fword [address]ような提案をいくつか読みましたが 、どちらも役に立たなかったので、どうすればよいですか?

0 投票する
3 に答える
1726 参照

assembly - アセンブリで保護モードに切り替えた後、カーネルにジャンプ

ここで私の最初の質問

私は 32 ビット モードの単純なオペレーティング システムで作業していますが (楽しみのため)、(32 ビット) 保護モードに切り替えた後、カーネルにジャンプできないという問題に遭遇しました。

ここに私の bootloader.asm があります

それ以外の

私は使用しました

しかし、これらの作品のどれも

しかし、保護モードに切り替えずにカーネルをロードしただけの場合は機能します

ところで、ここに bootloader.asm に含まれる私の disk.asm があります

編集: switch_to_pm.asm に含まれるものすべて

gdt.asm

タイトルを編集して、含まれているもののほとんどを追加し、Babystepsを試しました。デバッガーを使用し、カーネルがロードされているので、問題はどこにありますか

0 投票する
0 に答える
286 参照

assembly - コマンド mov は保護モードで割り込みを行いました

私は IA-32 タスク スイッチを学習しています。これが私のコードです。

記述子を初期化し、画面に文字を出力するコードがいくつかありますが、貼り付けていません。ここに問題があります: プロセスは正常に task0 に入り、次に task1 にジャンプします。これは成功したと思います (tr、ldtr ss、esp を確認しました)、奇妙なことが起こりました: eip がコマンドに移動するとmov cl,'b'、bochs が教えてくれました割り込みが発生し、割り込みゲートが無効になっていること (印刷機能に使用される番号 0x50 割り込み以外の idt 番号を設定しなかったためmov) ?バグはどこにありますか?

0 投票する
0 に答える
345 参照

windows - CreateDesktop() で保護モードを有効にして Flash を使用する

CreateDesktop() Windows 関数を使用して新しいデスクトップで Firefox を起動しようとしていますが、Flash の保護モードが有効になっていると Flash で問題が発生します。

デフォルトのデスクトップで Firefox を起動すると、Flash は問題なく動作しますが、Flash が起動しないため、新しいデスクトップでは Firefox がハングします。

Flash の保護モードを無効にするとこの問題は解決しますが、Flash の保護モードを無効にせずにこれを実行できるようにしたいと考えています。

この問題に似ている可能性があります: CreateDesktop() with vista and UAC on (C, windows)

デフォルトのデスクトップからセキュリティ情報を読み取って新しいデスクトップに設定しようとすると、「許可が拒否されました」というメッセージが表示されます。ただし、これが正しいアプローチであるかどうかはまだわかりません。

CreateDesktop() Windows関数で作成されたデスクトップでプロセスを開始して、保護モードを有効にしてFlashを実行できるようにする方法を知っている人はいますか?

古いデスクトップから情報を取得せずに、新しいデスクトップのセキュリティ情報を設定する方法はありますか?

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682124%28v=vs.85%29.aspx

これは、新しいデスクトップで Firefox を起動するために使用するコードです。

0 投票する
2 に答える
295 参照

security - x86 - 保護モードでのセグメンテーションはどのような目的に役立ちますか?

x86 メモリ セグメンテーションについて読みましたが、何かが足りないと思います。リニア (仮想) アドレスは、GDT エントリ (ベース アドレス) から 32 ビットを取得し、オフセット アドレスから 32 ビットを取得して構築されます。それらを合計して 32 ビットの仮想アドレスを取得します。

今私が見ているように、32 オフセット ビットはすべての VA 空間にまたがることができるので、32 ビット ベース アドレスを使用する必要は実際にはありません。したがって、ベースアドレスは変換プロセスで実際には役割を果たさなかったと結論付けます.リング0特権でセグメントのVAを取得できるため、セグメンテーションを使用したメモリ保護(x86保護モード)は役に立たないという結論に達しましたオフセットアドレス自体と。(例: jump 0x08000001 - セグメントにリング 3 特権がある場合、カーネル VA へ)

では、すべてのメモリ保護はページングに基づいているのでしょうか?

0 投票する
1 に答える
312 参照

assembly - プロテクト フラット モードでのデータおよび命令の開始アドレス

私は現在、Jeff Duntemann による「Assembly Language step by step」を読んでいます。保護されたフラット モデルのメモリ構成を説明する図には、多少不満があります。4GB サイズのメモリを示しています。そこでは、命令領域が一番下 (下位アドレス) に近く、次にデータ領域が上にあり、一番上にスタックがあります。同時に、私の理解が正しければ、フラット モードの DS および CS レジスタは、命令またはデータの開始アドレス (4GB 内) には影響しません。

私の質問は:

では、誰がコードとデータ領域 (下のコード、上のデータ) を 4GB に配布しているのでしょうか? 命令の開始アドレスとデータの開始アドレスは誰が決めるのですか? 本にはいくつかのアセンブリプログラムがありますが、プログラマーが命令とデータのメモリ位置を選択していないようです (「自分の」4GB 内)。彼はどこかでデータ セクションを宣言し、命令に入力するだけです。一方、*.lst ファイルには、命令とデータ チャンクのアドレスが既に含まれています。では、アドレスを決定するのはアセンブラーですか?

0 投票する
1 に答える
329 参照

x86 - x86 非ページ保護モード用にビルドされたコードの実行

現在、x86 unpaged protected mode用にビルドされているように見えるプログラム (〜 30KB、ほとんどがコード) をリバース エンジニアリングしようとしています。これには、物理​​メモリ (より正確にはメモリ マップド デバイス レジスタ) に直接アクセスする命令が含まれています。

上記のプログラムをQEMUで実行し、理想的には gdb などのデバッガーでステップ実行できるようにしたいと考えています。

ここでの問題は、コードでエンコードされた絶対メモリ アドレスにより、ページングが有効になっているオペレーティング システムでセグメンテーション違反が発生することです。

私はこれを回避する方法を考えてきました:

  • /dev/mem で mmap を使用して物理メモリをユーザー空間にマップし、ユーザー空間でプログラムを実行します。これにより物理メモリへのアクセスが可能になりますが、マップされたアドレスが物理アドレスと同じではないため、分析されたプログラムのハードコードされたメモリ アドレスにパッチを適用する必要があります。これは、エンコードされた絶対アドレスが大量にあるため、ほとんど実行できないようです。
  • アドレスを書き換えることで不正なメモリ アクセスを修正しようとするセグメンテーション フォールト ハンドラをインストールします。次に、ユーザー空間でプログラムを実行します。
  • プログラム コードをディスクからメモリにロードし、保護モード (GDT のセットアップを含む) に入り、そこにジャンプするブートローダーを作成します。同等のコードを書いたことがないので、これが機能するかどうかさえわかりません。

これまで見逃していたこのプログラムを実行するための他のオプションはありますか? または、上記のアイデアに関する提案、追加、または経験はありますか?