Я анализировал код вызова конструктора/деструктора С++, и я узнал, что перед началом 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()
, из какой библиотеки эти функции поступают и статически связываются с нашим исполняемым файлом, я знаю, что они статически связаны, но хочу увидеть источник, чтобы понять их, о том, что происходит за кулисами.
Спасибо, Фахад