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