Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Вопрос Вопрос по поводу инициализации CRT

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
14 Сен 2025
Сообщения
12
Реакции
4
короче, возник такой вопрос

когда мы пишем на C/C++, до входа в main всегда происходит инициализация CRT - настраивается окружение, стек, глобальные объекты и т.д.
а теперь ситуация: если мы пишем на ассемблере и используем функции вроде printf из msvcrt, при их вызове внутри библиотеки тоже происходит определённая инициализация
собственно вопрос:
можно ли считать это фактической зависимостью от CRT, или это всё же не то же самое, что полноценная CRT-инициализация в C/C++ до main?

то есть:
если в asm-программе нет явной точки входа CRT (типа _start - CRT - main), но мы дергаем printf, - мы уже зависим от CRT или нет?
 
@Pozdnyakov , Да ты зависишь от CRT, потому что printf часть стандартной библиотеки C. Но это не та полноценная инициализация, что бывает перед main в C, стартовый код CRT не вызывается, поэтому глобальные объекты не сконструируются, argc argv не подготовятся. Однако сама msvcrt.dll инициализирует своё внутреннее состояние при загрузке, поэтому printf будет работать. НО можно использовать WriteConsoleW, он работает без CRT, а через kernel32.dll
 
Последнее редактирование:
@Pozdnyakov , Да ты зависишь от CRT, потому что printf часть стандартной библиотеки C. Но это не та полноценная инициализация, что бывает перед main в C, стартовый код CRT не вызывается, поэтому глобальные объекты не сконструируются, argc argv не подготовятся. Однако сама msvcrt.dll инициализирует своё внутреннее состояние при загрузке, поэтому printf будет работать. НО можно использовать WriteConsoleW, он работает без CRT, а через kernel32.dll
ну вот, я сейчас пишу свою библиотеку, где будут собственные реализации printf / scanf, и при этом разделяю понятие зависимости
полноценной зависимостью я считаю ситуацию, когда до моего main выполняется код инициализации CRT (CRTMainStartup) как это происходит в C/C++
а косвенной зависимостью я называю случай, когда код пишется на ассемблере и используется лишь функциональность отдельных библиотек (условно тот же printf), без полноценного этапа инициализации CRT перед входом в программу

то есть в таком случае это уже не зависимость от CRT как среды выполнения, а лишь использование отдельных её компонентов
имхо
 
ну вот, я сейчас пишу свою библиотеку, где будут собственные реализации printf / scanf, и при этом разделяю понятие зависимости
полноценной зависимостью я считаю ситуацию, когда до моего main выполняется код инициализации CRT (CRTMainStartup) как это происходит в C/C++
а косвенной зависимостью я называю случай, когда код пишется на ассемблере и используется лишь функциональность отдельных библиотек (условно тот же printf), без полноценного этапа инициализации CRT перед входом в программу

то есть в таком случае это уже не зависимость от CRT как среды выполнения, а лишь использование отдельных её компонентов
имхо
привет. Пишешь на чём?
 
Назад
Сверху Снизу