Từ: http://en.wikipedia.org/wiki/X86_calling_conventionsTại sao người gọi phải xóa ngăn xếp trong quy ước gọi điện thoại cdecl?
push c
push b
push a
call function_name
add esp, 12 ;Stack clearing
mov x, eax
Tại sao chúng ta cần phải rõ ràng thêm từ 12 đến ESP để xóa chồng kể từ khi được gọi là chức năng nên đã poped các thông số ra khỏi stack do đó khôi phục lại con trỏ ngăn xếp ...?
Một câu hỏi:
Về mặt lý thuyết, nó sẽ có thể để thực hiện chức năng tham số biến với callee chăm sóc dọn dẹp ngay (ví dụ nếu bạn vượt qua số lượng các đối số trên stack trong một thanh ghi)?
Chính xác. Với chức năng C, người gọi có thể đẩy nhiều đối số trên ngăn xếp như trước khi gọi một hàm. Hàm được gọi đơn giản là không biết bao nhiêu nên được làm sạch. –
callee biết bao nhiêu tham số được gọi để nó có thể truy cập chúng một cách an toàn? Trong trường hợp printf() nó có thể phân tích chuỗi định dạng nhưng nếu không thì nó sẽ làm như thế nào? – anon
http://en.wikipedia.org/wiki/Stdarg.h –