Od: http://en.wikipedia.org/wiki/X86_calling_conventionsDlaczego wywołujący musi wyczyścić stos w konwencji wywoływania cdecl?
push c
push b
push a
call function_name
add esp, 12 ;Stack clearing
mov x, eax
Dlaczego musimy jawnie dodać 12 do ESP wyczyścić stos od wywoływana funkcja powinna poped parametry ze stosu dlatego przywracającej wskaźnik stosu ...?
Kolejne pytanie:
Teoretycznie byłoby to możliwe do realizacji różnych funkcji parametrów z odbierającym uważając prawa czyszczenia (na przykład jeśli przejdą szereg argumentów na stosie w rejestrze)?
Dokładnie. Dzięki funkcjom C, wywołujący może wypchnąć tyle argumentów na stosie, ile chce, przed wywołaniem funkcji. Wywoływana funkcja po prostu nie wie, ile powinno zostać oczyszczonych. –
w jaki sposób użytkownik będzie wiedział, z ilu parametrów został wywołany, aby mógł bezpiecznie uzyskać do nich dostęp? W przypadku printf() może on parsować ciąg formatu, ale poza tym jak to robi? – anon
http://en.wikipedia.org/wiki/Stdarg.h –