我正在尝试将一些自定义代码添加到与atexit处理相关的内部libc中。
在我们的libc中,我们定义了这个,因为我们链接到自定义CRT文件,并且不使用定义它的GCC。
void *__dso_handle __attribute__((__visibility__("hidden"),__weak__)) = &__dso_handle;
GCC还会在链接时将其添加到二进制文件中。
在libc中只是调用
的函数atexitint atexit(void (*func)(void))
{
return __cxa_atexit((void (*)(void*))func, NULL, __dso_handle);
}
我面临的问题是,当我想让它从运行时调用atexit()的模块中动态获取一个时,所使用的_dso_handle值是来自libc的本地值,以便正确注册dso使用atexit功能。
我检查了属性,但我发现没有什么可以帮助那里。
请注意,与glibc不同,atexit保留在libc的动态版本中,以保持与旧二进制文件的向后兼容性。
答案 0 :(得分:0)
我面临的问题是,当我想让它从运行时调用atexit()的模块中动态获取一个时,所使用的_dso_handle值是来自libc的本地值
您的模块可以拨打__cxa_atexit
,然后传入您想要的dso_handle
。