2017-08-18 73 views
0

我想添加一些自定义代码到我们的内部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的动态版本中,以保持与旧版二进制文件的向后兼容性。

回答

0

我现在面临的问题是,所用的_dso_handle值是,当我想使其动态撷取从在运行时调用atexit()模块的一个从libc中的本地一个

您的模块可以调用__cxa_atexit来代替,并传入任何您想要的dso_handle