32ビットシステムでは、各プロセスに実質的に2^32バイトのCONTIGUOUSアドレス空間があります。なぜリンカによって生成された最終的な実行可能コードが再配置可能である必要があるのですか?生成されるすべてのアドレスは、プロセス自身のアドレス空間内の仮想アドレスであり、他のプロセスは同じものを使用できないため、要件は何ですか? したがって、プロセスはどこにでも置くことができます。なぜ移転可能なの?仮想メモリとリロケータブルコード
答えて
プロセスを実行するためには、実行可能キュー内の実際のメインメモリに配置する必要があるため、再配置が必要です。ここで、メインメモリ内に置かれる場所は固定されていません(十分なスペースがある場合はどこにでも置かれます)ので、命令の実際のアドレスは仮想アドレスとは異なります。
そのための関数を呼び出すこと文、返品などは、一部のオペレーティング・システムがに(これは間違いなくすべてのオペレーティング・システムに普遍的ではありません)実行可能コードの再配置可能を作るこれらの関数の実際のアドレスに
しかし、それはMMU(メモリ管理ユニット)によって注意が払われます。移転はそれと何が関係しているのですか? – user1863877
を指し応じて更新する必要がありますaddress space layout randomizationを許可してください。これにより、特定の攻撃を緩和できます。
過去にスタックが実行可能になった時点で、オーバーフローしたスタックまたはヒープに直接実行可能コードを書き込むことで、バッファオーバーフローを悪用する可能性がありました。オペレーティングシステムがよりスマートになり、スタックとヒープの実行を防止し始めたので、攻撃はより洗練され、return oriented programmingを実行することでメモリ内の既知のコードシーケンスを使用し始めました。そのクラスの攻撃への軽減は、共有ライブラリのメモリレイアウトをランダム化することで(悪用しやすくなったため)、実行可能ファイルのメモリ位置をランダム化することで攻撃者がメインの実行ファイルを攻撃するように切り替えた。メイン実行可能ファイルを再配置可能にする必要があります。
実行可能コードには必ずしも相対アドレスが含まれているとは限りません。たとえば、Windowsでは、アドレス指定は絶対的な場合が多い(たとえば、グローバルデータの場合)。
2つの異なる動的ライブラリを検討してください。両方とも固定ベースアドレス0x00100000のためにコンパイルされました。あなたのプログラムはそれらの両方を読み込もうとします。 2番目のDLLを配置するローダはどこにありますか?その好ましいベースアドレスは既に他のDLLによって使用されています。
この場合、再配置可能コードは、2番目のDLLを別のアドレスに配置し、内部ポインターを新しい場所にパッチするのに役立ちます。固定ベースアドレスでは、2番目のDLLのロードは失敗します。
- 1. ポインタと仮想メモリ
- 2. Pytablesと仮想メモリ
- 3. 仮想メモリとsbrk
- 4. iOSのメモリスワッピングと仮想メモリ
- 5. 仮想メモリ、ページサイズ、最大仮想アドレス
- 6. ノンオペレーションプログラム用のJava仮想メモリ?
- 7. Excel仮想メモリの問題
- 8. Redisの仮想メモリは2.6
- 9. のjava - 仮想マシンのメモリ
- 10. 仮想メモリと各項目のサイズ
- 11. プロセスのアドレス空間と仮想メモリ
- 12. 物理メモリと仮想メモリのデータ割り当ての動作
- 13. 仮想メモリ内の2つのプロセス
- 14. スワップパーティションを持たない仮想メモリ
- 15. アクションスクリプト仮想マシン1 - メモリの検査
- 16. Node.js高い仮想メモリの使用
- 17. ソフト仮想メモリ制限(ulimit -v)
- 18. 純粋仮想と仮想の違い
- 19. iPhoneとiPadのアプリリアルと仮想メモリの使用
- 20. カーネル仮想メモリを物理メモリにマップする方法
- 21. メモリ消費を制限します。物理Vs仮想メモリ
- 22. 仮想メモリの処理 - スタックとヒープの間のスペース
- 23. 「ジョブプール」の用語は、仮想メモリ空間と同等ですか?
- 24. 仮想ボリュームとデータストア
- 25. ASP.NETと仮想ディレクトリ
- 26. アップロードファイルと仮想ファイルシステムデータベース
- 27. brctlと仮想インターフェイス
- 28. Linuxと仮想マシン
- 29. 仮想アドレスとページング
- 30. 仮想関数オーバーライド仮想関数
これをチェックしてください:http://stackoverflow.com/questions/7193888/load-time-relocation-and-virtual-memory – mohit