2012-01-25 8 views
1

ファイル/ shared_objectが、現在のファイル/モジュールで使用されているextern変数にリンクされている場所から見つける方法はありますか?例えばextern変数のリンクパスを見つける方法

:Linuxでの大規模なアプリケーションのsofwareでは、私は私が私のモジュールにexternedている特定の変数の宣言を見つけたい...事前に

感謝。

答えて

2

私はあなたの質問を完全には理解できませんが、おそらくdladdrがあなたのニーズに適しているはずです。 dladdrはGnu/Glibc拡張です。そのマニュアルから: 関数dladdr()は、関数ポインタを取り、名前とファイルが存在する場所を解決しようとします。(これはおそらくグローバル変数へのポインタとともに使用することができます)。

しかし、私はあなたの質問のフレーズに困惑しています。実行可能なELFバイナリや共有オブジェクトの内部では、 "変数の宣言"は意味をなさない。なぜなら、宣言は基本的にソースコードの概念であり、オブジェクトコードの概念ではないからである。実際上、(グローバル変数の)ほとんどの宣言は、いくつかのヘッダファイル内にあります。

は、アプリケーションのソースコードを持っている場合は、あなたが(grepまたはetagsのような)テキストツールを使用したりしても、このような宣言を見つけるために、プラグインやMELT拡張子スルーGCCコンパイラを拡張することができC++ name mangling

に注意してください。

もちろん、dlsymを使用して、名前の付いたシンボルのアドレスを見つけることもできます。

関連する問題