Показать сообщение отдельно
Старый 05.09.2009, 13:33     # 12
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Хм, ну в общем поковырялся немного с дебаггером.
Нету никакого mainCRTStartup()! Упоминания его есть только в mingw компиляторе, то есть в кросс-компилере под винду. Теперь что касается реального положения вещей, раз уж все оказалось не так, как описал L0rd, выше, если вдруг кому интересно (я пишу частный случай про изначально указанный GCC-4.4.1, glibc-2.10.1-4.i586, Linux Kernel - 2.6.31 на своей системе, не будучи специалистом в этой теме совершенно не претендую на истину этого на любой другой ОС или компонентах): Соответственно main вызывается из функции __libc_start_main.

Аргументы argc и argv инициализируются вот как-то так: https://www.codeblog.org/viewsrc/gli...bp-start.h#l28 проходя через "магические" вызовы __preinit_array_start(), __preinit_array_end(), __init_array_start(), __init_array_end(), __fini_array_start(), __fini_array_end(), которые в свою очередь формируются линкером, согласно комментам. Вызываются они из __libc_csu_init, ссылка на который передается __libc_start_main как параметр init.

Возвращаясь к начальной проблеме, получается что argv выделяется при помощи alloca, а не стандартных malloc, calloc и видимо, действительно не может быть ими перераспределен.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума