鉴于:
#include <iostream>
extern "C" int AddAsm(int a, int b, int c, int d, int e, int f);
int main()
{
std::cout << AddAsm(1, 2, 3, 4, 5, 6);
}
我想在 x64 masm 中实现 AddAsm 函数,如下所示:
.code
AddAsm proc
mov rax, 0
add rax, rcx
add rax, rdx
add rax, r8
add rax, r9
add rax, qword ptr [rsp + 32]
add rax, qword ptr [rsp + 40]
add rax, qword ptr [rsp + 48]
add rax, qword ptr [rsp + 56]
ret
AddAsm endp
end
现在前 4 个参数的一切都清楚了,但我无法理解/找到关于如何将其余参数放入堆栈的实际示例,
rbp
和 rsp
寄存器值实际上是什么表示从一个参数到另一个参数的偏移量是多少。
有人可以举个例子来说明一下吗?
.code
AddAsm proc
mov eax, 0
add eax, ecx ; a
add eax, edx ; b
add eax, r8d ; c
add eax, r9d ; d
add eax, dword ptr [rsp + 40] ; e
add eax, dword ptr [rsp + 48] ; f
ret
AddAsm endp
end