【发布时间】:2017-08-18 14:10:18
【问题描述】:
我正在尝试向我们的内部 libc 添加一些与 atexit 处理相关的自定义代码。
在我们的 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 的动态版本中,以保持与旧二进制文件的向后兼容性。
【问题讨论】:
标签: gcc linker libc crt atexit