「共有オブジェクトからセグメントをマッピングできません」というエラーはどういう意味ですか?

「共有オブジェクトからセグメントをマッピングできません」というエラーはどういう意味ですか?

他の質問に対する回答の多くは、「共有オブジェクトからセグメントをマッピングできません」という形式のエラーに役立ちますが、他の質問には適用しにくい非常に具体的な答えがあることがよくあります。一方、このエラーに関する一般的な情報は見つかりません。

誰もがこのエラーの基本的な説明と(理想的に)いくつかの一般的な原因を提供できますか?

たとえば、エラーを引き起こすエンティティ(カーネル、プロセス、プログラム?)と一般的な理由(たとえば、ほとんどすべてのライブラリが読み取り可能とマークされているため、ここでマッピングできないのはなぜですか)を知ることをお勧めします。

私は現在Ubuntuを実行していますが、これは多くのディストリビューションで動作すると思います。

ベストアンサー1

ld.so(8)このメッセージは、動的リンカー()または動的ロードツール()によって生成されますdlopen(3)

あなたの質問に直接答えるには:ㅏ)それいいえカーネルから雨)ユーザーモードプロセスに由来します。氏)これは通常、プログラムのメインコードではなく、それをロードする動的リンカーまたは使用中の動的ライブラリ(libdl.so)とディ)ファイルからセグメントを読み取ることができるという事実は、正しいmmap保護(実行可能ファイルなど)を使用して編集できるわけではなく、目的のアドレスmmapで編集できるという意味ではありません(MAP_FIXED代わりに間違ったアドレスを使用する場合)。そのアドレス)は既知のマッピングで置き換える必要があります。

詳細については、glibcソースコードに次elf/dl-load.hのように定義されていることを確認してください。DL_MAP_SEGMENTS_ERROR_MAP_SEGMENT、次のように返すことができます。_dl_map_segments()_dl_map_object()=>を介して独自に呼び出され、_dl_map_object_from_fd()動的_dl_map_object()リンカーから直接呼び出されるか、.dl_open最終的に呼び出されるコールバックを介して呼び出される静的関数dlopen(3)

おすすめ記事