Скрыть
C++: как проходит инициализация программы?
Посоветуйте документ, в котором можно прочитать как выполняется иницализация программы — всё, что происходит до входа в main(). С теоретической точки зрения интересует какие вызываются функции из системных библиотек и какие выделяются ресурсы, с практической хочется попробовать изменить имя функции main(). Это может пригодится при дебаге плохо структурированной программы, когда нужно написать тестовый модуль для функций, объявленных в том же файле, что и функция main(). Например, в C можно сделать так:
extern int test_function(int x);
int main2() {
exit(test_function(42)); /* с return получается сегфолт */
}
И скомпилировать так: gcc -Wl,-e,main2 test.c main.o. В C++ подобный подход приводит к сегфолту, насколько я понял из-за того, что не происходит инициализация в стандартной библиотеке. Вызов _init() в начале main2() немного помогает, но тогда получается сегфолт при обращении, например, к strlen. Как можно сделать такую штуку? Грязный хак только под g++, ELF и x86 подойдёт.
Re:C++: как проходит инициализация программы?
может будет проще собрать программу как либу (или как экзешку с экспортируемыми функциями) и прилинковать ее к main2.c?
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.8.1.13) Gecko/20080327 Firefox/2.0.0.13