Мне кажется, я понимаю разницу между STDCALL и CDECL, но мне интересно, смогу ли я найти какое-то пояснение в этом коде.
Я понимаю, что в STDCALL CALLEE отвечает за очистку стека, иЯ понимаю, что в CDECL CALLER отвечает за очистку стека.
Я также понимаю, что "очистка стека" в основном означает переустановку указателя стека, но я предполагаю, что моя путаница появляется в этой строке кода, где значение esp перемещается в базовый указатель ebp. Если эта функция происходит, это то же самое, что «очистка стека»? Или это должно быть что-то особенное в ESP?
Вот код, на который я смотрю
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
Мой первоначальный ответ заключается в том, что sub_12 и sub_48 оба являются CDECL, потому что вызывающий абонентотвечает за очистку стека. Но теперь я продолжаю смотреть на инструкции [mov ebp, esp], и мне интересно, действительно ли это пример STDCALL.
У кого-нибудь есть намеки на меня или какая-то дополнительная информация, которой мне может показаться не хватать?