: http://en.wikipedia.org/wiki/X86_calling_conventions왜 호출자는 cdecl 호출 규칙에서 스택을 지워야합니까? 에서
push c
push b
push a
call function_name
add esp, 12 ;Stack clearing
mov x, eax
왜 우리가 명시 적으로 호출 된 함수 따라서 스택 포인터를 복원 스택에서 매개 변수를 poped해야하기 때문에 스택을 취소 ESP에 12를 추가해야합니까 ...?
또 다른 질문 : 이론적으로
, (당신이 레지스터의 스택에 인수의 수를 전달하는 경우 예를 들어) 정리를 잘 돌보는 호출 수신자와 변수 매개 변수 기능을 구현 할 수 있을까요?
정확히. C 함수를 사용하면 호출자는 함수를 호출하기 전에 원하는만큼 스택에 많은 인수를 푸시 할 수 있습니다. 호출 된 함수는 얼마나 많은 객체를 정리해야하는지 알지 못합니다. –
피 호출자는 안전하게 호출 할 수 있도록 얼마나 많은 매개 변수가 호출되었는지 어떻게 알 수 있습니까? printf()의 경우 형식 문자열을 구문 분석 할 수 있지만 그렇지 않은 경우 어떻게 처리합니까? – anon
http://en.wikipedia.org/wiki/Stdarg.h –