Код Windows VC ++ 2010 перед выполнением моей функции main () - PullRequest
1 голос
/ 07 октября 2010

Я компилировал простые приложения Hello World в Visual Studio 2010 с помощью компилятора C ++ (цель - Win32), чтобы посмотреть, как продукт выглядит под микроскопом, когда я запускаю его с помощью отладчика Immunity.Однако я заметил, что существует некоторый код (на самом деле, немного кода), который запускается до того, как будет достигнута моя основная функция.Многие из этих вещей выглядят как связанные с безопасностью или, может быть, готовят систему к управлению процессами или что-то еще, но там есть только ТОННА этого.Более того, часть EntryPoint заголовка PE-файла, кажется, указывает на внутреннюю часть моего сегмента .text, в то время как кажется, что моя функция main () находится в самом начале сегмента .text.У меня такой вопрос: есть ли хорошая документация относительно этой прелюдии, которая вставляется в начало моего кода И / ИЛИ Функция main () обычно размещается компилятором VC ++ в самом начале сегмента .text?Спасибо за ваше понимание!

Ответы [ 2 ]

1 голос
/ 07 октября 2010

Компилятор размещает ваш код пользователя в начале сегмента .text, потому что именно там вы ожидаете найти ваш код.Весь другой непользовательский код помещается в конце после вашего, который необходим для того, чтобы программы работали так, как вы ожидаете, но вам не о чем беспокоиться.При написании программы на C вы ожидаете, что будут доступны определенные вещи, такие как аргументы командной строки в локальном массиве, инициализация глобальных переменных , обеспечение доступности стандартного ввода-вывода и важные другие вещи, необходимые для Cвещи во время выполнения, которые нужно инициализировать.

Если вы посмотрите на исходный код для подпрограмм, комментарии объясняют, почему это необходимо.

Эти подпрограммы выполняют инициализацию во время выполнения C,вызовите соответствующую функцию входа пользователя и обработайте очистку завершения.Для управляемого приложения они затем возвращают код завершения обратно в вызывающую подпрограмму, которая является кодом управляемого запуска.Для неуправляемых приложений они вызывают exit и никогда не возвращаются.

1 голос
/ 07 октября 2010

Не уверен насчет 2010 года, но старый VC6 раньше поставлялся с исходным кодом для CRT, включая файл, который содержал этот код инициализации (он назывался crtexe.c).

Точка входа по умолчанию в приложении командной строки называется mainCRTStartup.

...