3

Linux:コンパイルされた共有ライブラリを編集する方法はありますか?

DT_SYMBOLIC flag具体的には、コンパイル済みのバイナリ共有ライブラリにを追加する方法を探していますか?

これが私がこれを求めている理由です

私たちのアプリケーションはで構成されています

  • 独自のライブラリ(静的libXXX.a)
  • 一部のサードパーティライブラリ(バイナリのみの共有ライブラリlibYYY.so)

これまでのところ、アプリケーションはすべて問題ありません。

これで、独自の静的* libXXX.aライブラリを共有ライブラリバージョン(libXXX.so)に置き換えました。

すべてが正常にコンパイルおよびリンクされます。

しかし、今アプリケーションを実行すると、アプリケーションが起動し、予想される多くの処理を実行します。その後、途中でクラッシュします。gdbバックトレースは、クラッシュが一部のサードパーティ共有ライブラリで発生することを示しています。

私はSOFを検索して、ここで興味深い記事を見つけました。

私が言及しているヒントは

... add the DT_SYMBOLIC flag to the dynamic section ...

それが本当に役立つとは思えませんが、試してみる価値があると思います。

DT_SYMBOLIC flagすでにコンパイル/リンクされている共有ライブラリにを追加する方法はありますか?

環境:g++v4.2.4およびbinutilsv20を使用したdebianlenny64ビット。

編集:solarisには。と呼ばれるプログラムがありelfeditます。Linuxに似たものはありますか?

4

2 に答える 2

2

その間、私はと呼ばれるツールを見つけましたelfsh。これは、ELFオブジェクト、バイナリ、および共有ライブラリを調べて編集するためのインタラクティブなシェルです。

プロジェクトページについては、こちらをご覧ください:http ://www.eresi-project.org

残念ながら、あまり安定していないようです。elfsh私はそれ自体の中で多くのクラッシュを経験しました。

于 2010-02-18T10:11:19.360 に答える
0

それが単なるフラグである場合、苦痛なアプローチは、16進エディターでelfヘッダーを微調整することです。

しかし、サードパーティのライブラリがクラッシュしている場合、私は個人的にもう一方の端を調べます。共有に移行したためにライブラリの読み込み順序が変わったことです。

ldd

LD_DEBUG=libsをエクスポートします

ここにあなたの友達がいます。

ランタイムローダーがサードパーティのライブラリをロードした後に共有ライブラリをdlopen()するだけで十分な場合があります。

于 2010-02-01T18:18:06.333 に答える