Где следующая функция происходит из `_GLOBAL__sub_I_a()` и `__static_initialization_and_destruction_O()`

Я анализировал код вызова конструктора/деструктора С++, и я узнал, что перед началом main() код libc (или glibc) вызывает конструкторы и регистрирует деструкторы, я вижу следующую трассировку стека

A::A() at clA.cc:3 0x5555555549a6   
__static_initialization_and_destruction_0() at main.cc:4 0x55555555493b 
_GLOBAL__sub_I_a() at main.cc:10 0x555555554997 
__libc_csu_init() at 0x555555554c1d 
__libc_start_main() at libc-start.c:266 0x7ffff7464b28  
_start() at 0x5555555547ba  

Теперь я понимаю, что __libc_start_main исходит из libc, которая вызывает статически связанный __libc_csu_init (почему я не вижу его источника), но я нашел его в glibc/glibc-2.27/csu/elf-init.c, но я не могу найти источник _GLOBAL__sub_I_a() и __static_initialization_and_destruction_O(), из какой библиотеки эти функции поступают и статически связываются с нашим исполняемым файлом, я знаю, что они статически связаны, но хочу увидеть источник, чтобы понять их, о том, что происходит за кулисами.

Спасибо, Фахад


person Fahad Mubeen    schedule 06.05.2020    source источник
comment
Рассматривали ли вы возможность их генерации компилятором? Обратите внимание, что ваша трассировка стека показывает, что они исходят из «main.cc».   -  person Marshall Clow    schedule 06.05.2020
comment
Да, трассировка стека показывает, что исходит из main.cc, похоже, что компилятор встроил эти функции сборки в файл main.cc.   -  person Fahad Mubeen    schedule 07.05.2020


Ответы (1)


В документации clang есть раздел Создание и уничтожение глобальных объектов. которые могут показаться вам интересными.

И вам обязательно следует прочитать Что означает '_GLOBAL__sub_I_' в выводе nm ?

person Marshall Clow    schedule 06.05.2020
comment
Спасибо @Marshall Clow за ссылку :), статья была полезной, похоже, что эти функции генерируются каким-то скриптом gcc, и в файлах .c gcc нет закодированной версии. Так что единственный способ посмотреть на их код, я думаю, это сборка. - person Fahad Mubeen; 07.05.2020