Desde: http://en.wikipedia.org/wiki/X86_calling_conventions¿Por qué la persona que llama debe borrar la pila en la convención de llamadas cdecl?
push c
push b
push a
call function_name
add esp, 12 ;Stack clearing
mov x, eax
¿Por qué tenemos que añadir explícitamente a 12 ESP para borrar la pila ya que la función llamada debería haber poped los parámetros de la pila, por lo tanto restaurar el puntero de pila ...?
Otra pregunta:
En teoría, sería posible implementar funciones de los parámetros variables con el destinatario de la llamada el cuidado de la derecha de limpieza (por ejemplo, si se pasa el número de argumentos en la pila en un registro)?
Exactamente. Con las funciones C, el que llama puede insertar tantos argumentos en la pila como quiera antes de llamar a una función. La función llamada simplemente no sabe cuántos deben limpiarse. –
¿cómo sabe el destinatario con cuántos parámetros se ha llamado para que pueda acceder de forma segura a ellos? En el caso de printf() puede analizar la cadena de formato pero, de lo contrario, ¿cómo lo hace? – anon
http://en.wikipedia.org/wiki/Stdarg.h –