Je pense avoir compris la différence entre STDCALL et CDECL mais je me demande si je peux trouver des éclaircissements dans ce code.
Je comprends que dans STDCALL, le CALLEE est responsable du nettoyage de la pile, et je comprends que dans CDECL, le CALLER est responsable du nettoyage de la pile.
Je comprends également que le "nettoyage de la pile" signifie essentiellement la réinitialisation du pointeur de la pile, mais je suppose que mon confusion intervient à cette ligne de code où la valeur de esp est déplacée dans ebp, le pointeur de base. Si cette fonction se produit, est-ce que c'est la même chose que de "nettoyer la pile" ? Ou est-ce qu'il faut que quelque chose se déplace spécifiquement dans ESP ?
Voici le code que j'ai sous les yeux
main PROC
push 4
push 5
call sub_12
push 5
call sub_48
add esp, 4
INVOKE ExitProcess, 0
main endp
sub_12 PROC
push ebp
mov ebp, esp
mov eax, 10
mul DWORD PTR [ebp+12]
pop ebp
ret 8
sub_12 endp
sub_48 PROC
push ebp
mov ebp, esp
mov eax, [ebp+8]
mul DWORD PTR [ebp+8]
pop ebp
ret
sub_48 endp
Ma réponse initiale est que sub_12 et sub_48 sont toutes deux CDECL car l'appelant est responsable du nettoyage de la pile. Mais maintenant je continue à regarder les instructions [mov ebp, esp] et je me demande si ce n'est pas en fait un exemple de STDCALL.
Quelqu'un a-t-il des conseils à me donner ou une information supplémentaire qui pourrait me faire défaut ?