Linuxユーザー空間メモリマッピングの標準はありますか?

Linuxユーザー空間メモリマッピングの標準はありますか?

複数のプロセス間で共有されるメモリマップファイルを使用するプロジェクトを考えています。すべてのプロセスでマップされたゾーンのポインター値を使用できるようにするには、*マップされていることを確認する必要があります。 to Each 各プロセスのベースアドレスは同じです。もちろん、MAP_FIXEDtoタグを使用してこれを行うのはそれ自体は簡単ですが、mmap()どのアドレスを選択するかが問題です。

コードの実行が開始されると、実行可能ファイルとそのコードで使用されている共有ライブラリがすでにメモリ位置にマップされている状況が発生します。このアドレスのおおよその範囲を事前に知ることはできますか?多くのカーネルでデフォルトでASLRがオンになっているため、この問題は今日特に重要です。私は経験的にメインの実行可能ファイルのためのいくつかの緩やかなアドレス範囲と共有ライブラリのために見える他の範囲があるように見えましたが、実際には明確に定義されていますか?もちろん、標準文書があればいいのですが、問題のプロジェクトは実際には単独でしか実行できないので、ゆるいデザイン哲学も良いでしょう。

既存のマッピングがどこで終わるかを事前に知ることができる方法が実際にない場合、有用なアドレス範囲に対する私の推測が間違っていることが判明した場合に備えて、少なくともエレガントに失敗する方法はありますか?通常、mmap以前の既存のマッピングは、新しく要求されたマッピングで自動的に上書きされます。私はそれが含まれている場合は失敗するO_EXCL同様のフラグが欲しいと思いますmmapが、この効果や類似のものを見つけることができません。私は/proc/self/maps意図したマッピングと重なっているものがあるかどうかを分析して確認できると思いましたが、うーん。

*ええ、私も知っていますできるマップされた領域で相対ポインタを使用しますが、さまざまな理由でそれをしたくありません。

ベストアンサー1

おすすめ記事