2012-01-19 2 views
1

Для функций, зарегистрированных с помощью atexit(): Можно ли получить ссылки на них, чтобы вызвать их напрямую?Получить ссылки на функции, зарегистрированные через atexit()

Этот вопрос относится только к общему вопросу. Рады приветствовать решения относительно использования gcc/glibc.

ответ

3

Не в любом переносном режиме, нет. Список зарегистрированных функций принадлежит библиотеке времени выполнения, и для доступа к ней нет интерфейса.

Для спецификаций glibc в соответствии с вашим комментарием обработчики выходных данных реализуются exit.c и exit.h. Я не изучал их достаточно интенсивно, чтобы понять, что можно просверлить скрытие абстракции/данных. Вам может потребоваться, например, включают в себя glibc-специфичные заголовки, которые, вероятно, обычно недоступны.

+0

А, это звучит интересно. Поэтому я добавил тег 'glibc' и прошу вас, предоставляет ли эта библиотека возможность доступа к рассматриваемым функциям. – alk

2

Нет. Однако, если у вас есть контроль над всем кодом в приложении, вы можете сохранить список самостоятельно и зарегистрировать одну функцию для реального atexit(), который будет проходить через список, когда система будет завершена.

Смежные вопросы