問題タブ [gdt]
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.
gdb - gs:0x14 の仮想アドレス
一部の C コードを gcc でコンパイルすると、次のアセンブリ結果が表示されることがよくあります。
これは単純な関数のプロローグです。+19 行から、スタック プロテクターの値が gs:0x14 から取得されていることがわかります。私の質問は、gdb で gs:0x14 の実際の仮想アドレスを知ることはできますか? gs セグメント セレクターの値は GDT からのオフセットを示しますが、gdb などのユーザー レベルのプロセスは GDT 情報にアクセスできません。gdb または他のデバッガーを使用して gs セグメントのベースアドレスを特定するにはどうすればよいですか? これは不可能ですか?
前もって感謝します。
assembly - A20ゲートを設定するためのブートローダーコードを理解する
さて、私は 1Mb を超えるメモリへのアクセスに役立つコードを理解しようとしました。以下に必要なスニペットを書いています。わかったことを書きますが、それが正しいかどうかの確認が必要です (私は独学で OS を勉強しています)。前もって感謝します
最初にseta20.1
、キーボード コントローラー (mkbc) からステータスを取得して、何かを書き込んでも問題ないかどうかを確認します。解放されたら0xd1
、最終的に出力ポートを write に設定するバッファに書き込みます。
ではseta20.1
、最初に mkbc がそれを読み取って出力ポートを設定したかどうかを確認しています。完了したら、0xdf
最終的に 1Mb を超えるメモリにアクセスできるようにする A20 ゲートを設定するデータを送信します。
私の理解は正しいですか?そうでない場合は、正しい場所で私を修正してください。
assembly - x86 割り込みサービス ルーチンが一般保護違反を引き起こす
共通の isr スタブを次のように定義しています。
このコードは、次のように各割り込みから呼び出されます。
このコードは外部処理メソッドを適切に呼び出しますが、外部処理メソッドから戻った後に gpf 割り込みを引き起こします。
また、gdt をマップして、4G アドレス空間全体を 0 特権レベルのデータとコード記述子 (およびヌル記述子) でカバーするようにしました。どんな助けでも大歓迎です。
assembly - メモリのアドレス指定に関して、GDT の粒度ビットは正確に何を変更しますか?
このビットがゼロの場合、メモリはバイトごとにアドレス指定されますか? 1 の場合、メモリは 4Kb x 4Kb でアドレス指定されますか?
たとえば、このビットが 0 に設定されていて、メモリ位置 a000h をアドレス指定した場合、その位置のバイトをアドレス指定することになりますか? そして、次の場所 a001h をアドレス指定した場合、それはメモリ内の次のバイトになりますよね?
しかし、このビットが 1 の場合、4Kb チャンクをアドレス指定することになりますか?
では、a000h をアドレス指定すると 4Kb のチャンクが得られ、a001 はメモリ内の次の 4Kb になりますか?
assembly - gdb で gdtr および gdt 記述子を出力できますか?
目に見えない部分(x86)なので、gdbで「p/x $gdtr」と入力します....などですが、結果は「$6 =値を整数に変換できません」であり、gdbで「p/x $cs」と入力します唯一の結果はCSであり、目に見える部分だけです
ご回答有難うございます