Tôi có một chức năng với chữ ký:Lấy đối số của một thủ tục lắp ráp x64 MASM
extern "C" int foo(int a, int b, int c, int d, int e);
mà là trong thực tế viết bằng lắp ráp.
Với ml (32 bit), sử dụng quy ước gọi tiêu chuẩn mà bạn có thể khá nhiều viết
.code
foo PROC a: DWORD, b: DWORD ,c: DWORD, d: DWORD, e: DWORD
mov eax, d
mov ebx, e
và bắt đầu sử dụng những nhãn để truy cập vào lập luận của bạn
Với ml64 (64 bit) thì fastcall là chỉ có quy ước. Tôi không có rắc rối truy cập vào các đối số đầu tiên được lưu giữ trong sổ đăng ký, nhưng các vấn đề tiếp cận những người trong ngăn xếp (e
trong ví dụ này): Tôi cố gắng
.code
foo PROC a: DWORD, b: DWORD ,c: DWORD, d: DWORD, e: DWORD
và
.code
foo PROC e: DWORD
nhưng giá trị trong e
là rác.
Tôi thấy rằng nếu tôi sử dụng địa chỉ ngăn xếp trực tiếp, tôi tìm thấy giá trị.
.code
foo PROC e: DWORD
mov eax, r9 ; d
mov ebx, DWORD PTR[rbp + 48] ; e
Có một cách khác?