2017-08-18 13 views
0

atexitの処理に関連する私たちの内部libcにカスタムコードを追加しようとしています。gccシンボル解決シャドウイング

libcではカスタムCRTファイルにリンクし、これを定義するGCCを使用していないので、これを定義します。

void *__dso_handle __attribute__((__visibility__("hidden"),__weak__)) = &__dso_handle; 

GCCは、これらをリンクするときにバイナリに追加します。 libcの

はちょうど私が直面してる問題は、使用_dso_handle値が、私はそれを動的にフェッチしたいのですがlibcのからローカル1であるということである

int atexit(void (*func)(void)) 
{ 
    return __cxa_atexit((void (*)(void*))func, NULL, __dso_handle); 
} 

を呼び出す関数のatexitであります実行時にatexit()を呼び出して適切なdsoがatexit関数に登録されるようにします。

属性を確認したところ、そこに役立つものは何も見つかりませんでした。

glibcとは異なり、atexitは古いバージョンのバイナリとの下位互換性を維持するためにlibcの動的バージョンに保存されています。

答えて

0

私が直面してる問題は、私はそれが実行時に動的にのatexit()を呼び出すモジュールからの1を取得したいのですがときに使用_dso_handle値はlibcのからローカル1であるということである

あなたのモジュールは代わりに__cxa_atexitに電話をかけ、あなたが望むものなら何でもdso_handleを渡すことができます。

関連する問題