2

J'écris mon propre petit débogueur en mode utilisateur pour m'amuser. Je sais que le point d'entrée spécifié dans l'en-tête PE n'est pas les programmes définis main() (pour autant que microsoft C++ runtime est concerné)Point d'entrée C++ -> main()

Où puis-je trouver de la documentation sur les appels qui ont lieu entre ce point d'entrée , jusqu'à la fonction main() réelle, et pourquoi ils sont appelés, et ce qu'ils font?

+0

Fortement spécifique à l'implémentation. Quelle plateforme? Compilateur? –

+0

Visual Studio 2010, Windows Pe32 + format 7 x64 – Lynn

+0

Il est interne à l'exécution de sorte que vous avez les options suivantes: déboguer/désassembler ou rechercher sur les ressources de pirates (en bon sens). – Andrey

Répondre

2

Vous ne pouvez pas. En fait, le principal peut ne pas exister. Exemple: vous pouvez remplacer le point d'entrée CRT par défaut utilisé par l'éditeur de liens, le principal peut être incorporé dans la fonction de démarrage CRT, etc ...

+0

Je suppose que sa question est vraiment ce qui se passe entre le point d'entrée et la fonction de démarrage, il ne s'agit pas vraiment de 'main'. – Andrey

0

AFAIK les appels etc., l'action du code, n'est pas documentée sauf par le code source lui-même.

Placez le curseur d'abord dans main et utilisez le débogueur "Exécuter ici". Ou définissez un point d'arrêt là. Ensuite, il suffit d'inspecter les appels dans la pile d'appels.

Vive & HTH.,

1

Le code source pour le CRT est livré avec Visual Studio. Par exemple, pour Visual Studio 2010 emplacement d'installation par défaut, il est à:

C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src 

La main() réelle est en crt0.c.

Les différents types de CRT (statique, DLL, MT, x86, x64, etc.) sont contrôlés par certains définit comme CRTDLL, _M_IA64 et plus. Vous verrez quand vous creusez.

Questions connexes