2017-01-16 12 views
2

В VC++ и GCC main не является настоящей точкой входа в программу; но мы можем сбросить реальную точку входа программы с помощью аргументов компилятора -ENTRY и -Wl,-eentry.Как обеспечить выполнение функции перед любым глобальным переменным?

Например: реальная запись piont по умолчанию - mainCRTStartup в VC++; то есть mainCRTStartup будет вызываться до main.

Мой вопрос: Если у меня есть несколько глобальных переменных на C++ в моей программе, они гарантированно НЕ будут инициализированы до тех пор, пока не закончится mainCRTStartup?

Проблема фон:

У меня есть рамки закрытого источника, который содержит ошибку в своем глобальном переменном ctors. Я могу исправить ошибку, если мой код исправления может выполнить перед глобальными переменными ctors .

+4

Глобальные переменные инициализируются * по * 'mainCRTStartup'. Это одна из задач, которые она выполняет, перед вызовом 'main'. 'mainCRTStartup' никогда не« заканчивается »- он вызывает' exit() 'когда возвращается' main'. –

ответ

1

Как? Вы планируете подключать mainCRTStartup()? В этом случае вы можете запустить свой код и вызвать mainCRTStartup() с помощью hook. (извините, комментарий еще не существует)