5

クラッシュしたプログラムの事後分析を行っています。私は Linux (Ubuntu 12.04、x86) を使用しており、コードは C++ で記述されています。プログラムは、貴重な情報を含む可能性のあるいくつかのシングルトンを使用しています。次のように作成された場合、シングルトンのインスタンスへのポインターを見つけることは可能ですか?

SingletonType& SingletonType::getInstance(){
    static SingletonType* instance = new SingletonType();
    return *instance;
}

可能であれば、GDB でどのように行われますか?

4

3 に答える 3

3

show modules1はおそらくベースアドレスを示しinstance、 は静的に割り当てられているため、何らかのobjdump/nmレポートで表示されるはずです。ええ、毛むくじゃらの数学。

別の方法は、逆アセンブルSingletonType::getInstance()して、初期化/リターン パスに読み込まれる有効なアドレスを確認することです。


1うーん、覚えていた正確な一致が見つかりません。info sharedlibraryほとんどの情報が得られます。

于 2013-07-16T14:52:29.300 に答える