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の動的バージョンに保存されています。