__attribute __ ((конструктор)) как это изменить точку входа? - PullRequest
0 голосов
/ 06 сентября 2018

Я знаю, что с точки зрения языка программирования C main() является точкой входа в программу.

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

Итак, у нас есть некоторые атрибуты, которые мы можем использовать для наших функций, один из них Атрибут конструктора, который вызывается перед main (), кто отвечает за вызов этой функции?

__attribute__((construtor))
void foo(void)
{
        puts("Constructor called by ... ?\n");
}

и как бы это выглядело в пошаговом стеке вызовов? Спасибо!

1 Ответ

0 голосов
/ 06 сентября 2018

Функции, помеченные как «конструктор», помещаются в специальный раздел исполняемого файла.Затем функция «start» будет вызывать эти функции одну за другой, прежде чем она вызовет main.

То же самое с функциями «деструктора», они снова помещаются в специальный раздел и вызываются кодом, выполняемым послеexit вызывается или main возвращается.

...