2017-01-16 4 views
2

VC++およびGCCでは、mainはプログラムの実際のエントリポイントではありません。コンパイラの引数-ENTRY-Wl,-eentryによってプログラムの実際のエントリポイントをリセットすることができます。グローバル変数のctorの前に関数が確実に実行されるようにする方法はありますか?

たとえば、実際のエントリpiontはVC++ではmainCRTStartupです。つまり、mainCRTStartupmainの前に呼び出されます。

私の質問は:私のプログラムにいくつかのグローバルC++変数がある場合、mainCRTStartupが終了するまで初期化しないことを保証していますか?

問題の背景:

私はそのグローバル変数 ctorsのバグを持っているクローズドソースのフレームワークを、持っています。固定コードが グローバル変数ctorsの前に実行できる場合は、バグを修正できます。

+4

グローバル変数は* mainecTStartupで初期化されます。それは 'main'を呼び出す前に実行するタスクの1つです。 'mainCRTStartup'は決して実際には終了しません。' main'が返ってきたら 'exit()'を呼び出します。 –

答えて

1

どのようにですか? mainCRTStartup()をフックする予定ですか?その場合、コードを実行して、フックからmainCRTStartup()を呼び出すことができます。 (申し訳ありません、まだコメントできません)

関連する問題