Tôi đang học x64 lắp ráp trên Windows cho 'vui'. MSDN documentation for the x64 calling convention on Windows nói:Trong Win64 ABI, không gian ngăn xếp đối số dành riêng có được sử dụng cho mục đích lưu trữ chung không?
Người gọi có trách nhiệm phân bổ đủ không gian cho thông số đăng ký, ngay cả khi callee không có nhiều tham số. Điều này hỗ trợ trong sự đơn giản của việc hỗ trợ các hàm không được định kiểu C và các hàm C/C++.
Như chức năng của tôi không phải là C chức năng unprototyped hoặc varargs C/C++ chức năng, không có nghĩa là tôi luôn có thể sử dụng [rsp+8]
-[rsp+32]
(giả định một giá trị chưa sửa đổi của rsp
ngay sau khi một cuộc gọi) để lưu trữ mục đích chung trong chức năng của tôi , giống như cho các biến cục bộ?
Cảm ơn câu trả lời rõ ràng. Tuy nhiên việc sửa đổi các tham số gửi vào sẽ là 'mov rcx, anyvalue' khi đối số được truyền qua' rcx', đó là lý do tại sao tôi không chắc chắn về '[rsp + 8]'. – Trillian
Nhưng bạn cũng được phép làm đổ các thông số gửi đến. Đó là lý do tại sao không gian dành riêng là có, sau khi tất cả. 'void somefunction (int arg1) {/ * tràn: mov [rsp + 8], rcx */arg1 = anyvalue;/* mov [rsp + 8], anyvalue * /} ' –