ファイル/ shared_objectが、現在のファイル/モジュールで使用されているextern変数にリンクされている場所から見つける方法はありますか?例えばextern変数のリンクパスを見つける方法
:Linuxでの大規模なアプリケーションのsofwareでは、私は私が私のモジュールにexternedている特定の変数の宣言を見つけたい...事前に
感謝。
ファイル/ shared_objectが、現在のファイル/モジュールで使用されているextern変数にリンクされている場所から見つける方法はありますか?例えばextern変数のリンクパスを見つける方法
:Linuxでの大規模なアプリケーションのsofwareでは、私は私が私のモジュールにexternedている特定の変数の宣言を見つけたい...事前に
感謝。
私はあなたの質問を完全には理解できませんが、おそらくdladdrがあなたのニーズに適しているはずです。 dladdr
はGnu/Glibc拡張です。そのマニュアルから: 関数dladdr()
は、関数ポインタを取り、名前とファイルが存在する場所を解決しようとします。(これはおそらくグローバル変数へのポインタとともに使用することができます)。
しかし、私はあなたの質問のフレーズに困惑しています。実行可能なELFバイナリや共有オブジェクトの内部では、 "変数の宣言"は意味をなさない。なぜなら、宣言は基本的にソースコードの概念であり、オブジェクトコードの概念ではないからである。実際上、(グローバル変数の)ほとんどの宣言は、いくつかのヘッダファイル内にあります。
は、アプリケーションのソースコードを持っている場合は、あなたが(grep
またはetags
のような)テキストツールを使用したりしても、このような宣言を見つけるために、プラグインやMELT拡張子スルーGCCコンパイラを拡張することができC++ name mangling
に注意してください。
もちろん、dlsym
を使用して、名前の付いたシンボルのアドレスを見つけることもできます。