是否需要为函数保留少于四个参数?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

函数中的前四个参数在Windows中传递给RCX、RDX、R8和R9寄存器(浮点数为xmm0-xmm3)

add:
   mov r10, rcx
   add r10, rdx
   add r10, r8
   add r10, r9
   mov rax, r10
   ret

提问于
用户回答回答于

如果不从汇编代码中调用其他函数,则不必担心这一点

这篇文章阐明了"red zone" 和 "shadow space".

用户回答回答于

只是在不知情的情况下遇到了这件事,似乎就是这样。例如,GetAsyncKeyState中的前两个指令覆盖了在0x20字节区域的返回值上方的堆栈

user32.GetAsyncKeyState  - mov [rsp+08],rbx
user32.GetAsyncKeyState+5- mov [rsp+10],rsi
user32.GetAsyncKeyState+A- push rdi
user32.GetAsyncKeyState+B- sub rsp,20

扫码关注云+社区