Bonjour,
J'étudie actuellement le fonctionnement de la stack et des conventions d'appels. Mes tests sont effectués actuellement sous Windows, et le tout est compilé par MinGW. Afin de simplifier cette étude je me base sur un code simple :
1 2 3 4 5
|
int main()
{
return 0;
} |
Sous OllyDbg je retrouve le code suivant :
00401280 > $ 55 PUSH EBP
00401281 . 89E5 MOV EBP,ESP
00401283 . 83EC 08 SUB ESP,8
00401286 . C70424 0100000>MOV DWORD PTR SS:[ESP],1
0040128D . FF15 C8504000 CALL DWORD PTR DS:[<&msvcrt.__set_app_type>] ; msvcrt.__set_app_type
00401293 . E8 B8FEFFFF CALL stackfoo.00401150 ; Qui correspond à l'appel de ExitProcess()
Un point reste encore obscur pour moi concernant ce code. Je ne comprends pas l'utilité du :
Qui, il me semble équivaut à un
non ?
A noter aussi que plus loin je trouve là aussi encore un prologue :
004012A0 . 55 PUSH EBP
004012A1 . 89E5 MOV EBP,ESP
004012A3 . 83EC 08 SUB ESP,8
004012A6 . C70424 0200000>MOV DWORD PTR SS:[ESP],2 ; Ici 2 ?
004012AD . FF15 C8504000 CALL DWORD PTR DS:[<&msvcrt.__set_app_ty>; msvcrt.__set_app_type
004012B3 . E8 98FEFFFF CALL stackfoo.00401150
Cependant, en faisant du step by step, je ne tombe jamais sur cette portion de code, je suppose donc que ce code doit être généré par défaut par le compilo :/.
J'ai eu quelques doutes aussi sur le :
CALL DWORD PTR DS:[<&msvcrt.__set_app_type>]
Après quelques recherches (je suis tombé sur quelques boards/logs IRC rien de plus) j'ai vu que c'était pour définir le type d'application, c'est-à-dire ici pour indiquer un mode console ou autres. Si d'ailleurs vous avez plus de doc dessus je suis preneur.
Merci d'avance pour votre aide,
antivoid
edit : ajout d'infos.
Partager