2

共有ライブラリのプロファイルを作成しようとしていますが、環境変数LD_PROFILEを設定すると、「PLTRELがオブジェクトに見つかりません」というメッセージが表示されます。何が得られますか?欠落しているリンカーフラグのようなものはありますか?インターネット上にはこれに関する情報がないようです。sprofのマニュアルページの長さは約10語です。

4

2 に答える 2

2

Google グループ の未回答の質問によると、この問題を抱えているのはあなただけではないようです。

pltrel はplt- relative を意味すると思います。一部のELF デザイン ノートでは、

コード セグメントには .plt セクションが作成されます。これは、ライブラリ呼び出しのランタイム解決を処理するために使用される関数スタブの配列です。

そして、ここにもう少しあります:

次に言及したいセクションは、.plt セクションです。これには、共有ライブラリで関数を呼び出すときに使用されるジャンプ テーブルが含まれています。デフォルトでは、.plt エントリはすべてリンカによって初期化され、正しいターゲット関数を指すのではなく、ダイナミック ローダー自体を指すようになります。したがって、特定の関数を初めて呼び出すと、ダイナミックローダーは関数を検索し、.plt のターゲットを修正して、次にこの .plt スロットが使用されるときに正しい関数を呼び出すようにします。この変更を行った後、ダイナミック ローダーは関数自体を呼び出します。

共有ライブラリのコンパイルまたはアセンブル方法に問題があるように思えます。elf PLT セクションをさらに数回検索すると、正しい軌道に乗ることができます。

于 2009-08-06T17:58:39.617 に答える