問題タブ [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.
memory-management - セグメント化されたページングとページングされたセグメンテーションの違いまたは類似点?
私は結合されたページング/セグメンテーション システムを研究していましたが、私の本にはこれに対する 2 つのアプローチがありました。
両者の違いがわかりませんでした。ページ分割ではセグメントがページに分割され、分割ページングではページがセグメントに分割されていると思いますが、正しいか間違っているかはわかりません。一方、インターネット上では、ページングとセグメンテーションの組み合わせは、1 つのスキームのみを使用して記述されています。私のコースブックには、このための 2 つのスキームがある理由がわかりません。どんな助けでも大歓迎です。
x86 - 保護されたフラット モデルの CS と DS の値
保護されたフラット モデルの特定のプロセスの CS および DS セグメント レジスタは同じ値を保持しますか?
つまり、同じプログラム内で次のコード シーケンスを実行し
mov dword ptr [0x7fffffff], ebx
、
org 0x7fffffff
...some instruction ...
同じ場所を指しますか?(もしそうなら、保護されたフラット モデルで CS と DS を分離する目的は何ですか?) ありがとうございます。
operating-system - 各プログラムはメモリ内に個別のセグメント (コード、スタック、データ) を持っていますか?
同時に実行されている多くのプログラムがあるとします。
実行される各実行可能プログラムは、RAM 内に独自のコード、データ、およびスタック セグメントを持っていますか、それとも 4 つのセグメントに分割された完全な RAM であり、これらのセグメントのそれぞれが各プログラムのそれぞれのセグメントを保持していますか。
linux - Linux での 64 ビット コードからの __USER32_CS への far 呼び出し
最近、これを 64 ビット コードで実行できることに気付きました。
ここcode
で、アドレス空間の下位 4GiB の実行可能ページにある 32 ビット コードの一部を指し、Linux の x86 ヘッダーのセグメント セレクター0x23
の値です。__USER32_CS
ジャンプ対象に属性が必要かどうかはわかりませんが、念のため追加しました。もちろん、far return を可能にするには、この呼び出しコード自体を仮想アドレス空間の下位 4 GiB のどこかに配置する必要があります。に入れるだけmain
で十分であることがわかりました。
これはほとんど役に立たず (32 ビット ライブラリがロードされていない、呼び出し規約が異なるなど)、破損しやすい (の値は__USER32_CS
Linux のユーザー空間向け API の一部ではない) ことを理解しています。
私の質問:呼び出しのターゲットが実際に 32 ビット モードで実行されていることを示す簡単な方法はありますか? この種の呼び出しの実用的な用途 (それを利用するライブラリの既存のソフトウェア、または少なくともそれほど非現実的ではない可能性) はありますか?
c - 自己復号化バイナリ ファイルを作成する方法は?
私は、RSA 秘密鍵などのセキュリティ資格情報にアクセスするバイナリ ファイルを作成していましたが、これは誰にも見られるべきではありません。秘密鍵を安全に保管する方法がわかりません。現在、これらの情報をバイナリ内の.data
セクション内に保存しています。したがって、セキュリティのために、バイナリのデータセクションを暗号化することを考えていました。そのセクションは、バイナリ内の小さな手順によって実行時に復号化されます。私は、バイナリ ファイルを読み取り、データ セクションを暗号化する小さなプログラムを作成しました。今私が欲しいのは、実行時にデータセクションを復号化することです。しかし、実行時に、これらのセクションはすべてセグメントとしてメモリにロードされます。実行時にセグメント アドレスを取得する方法については、ほとんど知識がありません。
データセクションをメモリにロードし、実行時にセクションを復号化し、データセクション内に保存された値を使用するために使用できる方法を教えてください。
assembly - セグメント オフセット ペア bs セグメント記述子
32 ビット プロセッサのセグメント記述子と比較して、物理アドレス計算用の 8088 のセグメント オフセット ペアの違いを理解するのに少し混乱しています。
どんな説明でも大歓迎です。