問題タブ [memory-segmentation]
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.
windows - IDA Pro で .text セグメントの統計を取得するには?
.text セグメント内の IDA Pro が命令として扱うバイト数とデータとして扱うバイト数を表示する方法はありますか? 他の統計も利用できますか (関数サイズなど)?
cpu-registers - intel x86 セグメント レジスタと GDT(LDT) レジスタのサイズ
私はシステム アーキテクチャの初心者レベルの学生で、正確には intel x86 です。現在、インテルのマニュアル (1,3a,3b,3c) を読んでいて、セグメンテーションの部分で行き詰まっています。
私の知る限り、保護モードでは、システムは論理メモリを線形メモリ(または物理メモリ)に変換しており、「ファーポインタ」は2つの異なる部分、セグメントを持つ実際の線形(または物理)メモリアドレスを指していますセレクターとオフセット。
大学で学んだように、各セグメント レジスタにはデータの 16 ビット部分があります。Intel のマニュアルによると、16 ビットはセグメント レジスタの目に見える部分だけですが、ユーザーがプログラムしたりアクセスしたりできないセグメント レジスタの隠れた部分がもっとあります。セグメントレジスタの実際のサイズを知ることができる可能性はありますか?
2番目の質問は、保護モードの LDT 、 GDT 、 IDT レジスタについてです。それらのレジスタ (LDTr、GDTr、IDTr) は CPU チップセットの実際のレジスタですか? そうである場合、ブート シーケンス (prevelige ring 3、ユーザー モード) の後にそれらのテーブルにアクセスする機会はありますか?
私の質問を読んでくれてありがとう。
PS。グーグルで検索してみましたが、答えが見つかりませんでした。だからこそ、私はこの質問を書くのに時間を費やしています。
memory-management - 64 ビット モード (ロング モード) がセグメント レジスタを使用しないのはなぜですか?
私は初心者レベルの学生です :) インテル アーキテクチャについて勉強していて、セグメンテーションやページングなどのメモリ管理について勉強しています。Intel のマニュアルを読んでいますが、Intel のアーキテクチャを理解するのはとても良いことです。
しかし、私はまだ何か基本的なことに興味があります。64 ビット long モードで、すべてのセグメント レジスタがビット 0 になるのはなぜですか? システムがセグメント レジスタを使用しなくなったのはなぜですか?
システムの 64 ビット サイズ (GP レジスタなど) は、これらの論理アドレスを一度に含めるのに十分だからですか? 64 ビット モードで保護は正しく機能していますか?
64 ビット アドレッシングを検索しようとしましたが、Google で見つかりませんでした。おそらく、私はひどい検索スキルを持っているか、Google で検索するための特定の予備知識が必要なのかもしれません。
したがって、16 ビットのセグメント レジスタが 64 ビット モードで使用されない理由と、64 ビット モードで保護が適切に機能する方法を知りたいと思います。
ありがとうございました!
c - これの出力はどうなりますか?それも説明してください
このコードを試しましたが、出力を理解できません
これでセグメント化されたメモリアドレスとは何ですか?オフセットはどの部分ですか?
memory-management - どの仮想メモリ変換手法 (x86 を考慮) が一般的に使用されていますか?
仮想アドレス変換 (x86) には、セグメンテーション、ページング、セグメンテーションとページングの組み合わせ (ページ化されたセグメンテーション、セグメント化されたページング) など、MMU を使用したさまざまな種類があることが知られています。それぞれに長所と短所があります。
私の質問: 1) Linux/Windows などの一般的なオペレーティング システムは、特定の手法 (ページングなど) を 1 つしか使用していませんか? 2) 特定の OS で 2 つ以上の手法が利用できる場合、それぞれの手法はいつ、どこで使用されますか? ニーズに合わせてカスタマイズできますか? 3) 「ページング」のみが使用される場合、x86 のセグメント レジスタはどのように使用されますか?
gdb - gs:0x14 の仮想アドレス
一部の C コードを gcc でコンパイルすると、次のアセンブリ結果が表示されることがよくあります。
これは単純な関数のプロローグです。+19 行から、スタック プロテクターの値が gs:0x14 から取得されていることがわかります。私の質問は、gdb で gs:0x14 の実際の仮想アドレスを知ることはできますか? gs セグメント セレクターの値は GDT からのオフセットを示しますが、gdb などのユーザー レベルのプロセスは GDT 情報にアクセスできません。gdb または他のデバッガーを使用して gs セグメントのベースアドレスを特定するにはどうすればよいですか? これは不可能ですか?
前もって感謝します。
x86 - GDB を使用して MSR を読み取る
GDB を使用してプログラムをデバッグしているときに、x86-64 モデル固有のレジスタ、具体的には IA32_FS_BASE および IA32_GS_BASE を読み取る方法はありますか?
Intel の Pintool のような動的インストルメンテーション パッケージを使用するソリューションはあまり好ましくありませんが、それでも同様に高く評価されます。
c - C: セグメンテーション エラー
私は c で vigenère アルゴリズムを実装しています。
残念ながら、プログラムをテストしているときに、セグメンテーション エラーが発生しました。Macでclangでコンパイルしています。
どうすればそのエラーを回避できますか?
ソースコード:
デバッグ出力:
よろしく