手工给 x64 Windows 系统调用布局用户栈

一直按照给普通函数调用布局栈的方法,以为前四个通过寄存器传递的参数是依次 spill 到 rsp+0 - rsp+0x18 的位置,然后在 rsp+0x20 处继续布局后续参数;结果布局了一天全跑不动

原来虽然 syscall 指令并不会将返回地址 push 到栈上,但这个栈上返回地址还是得留出来;于是应该将前四个寄存器参数依次 spill 到 rsp+8 - rsp+0x20 的位置,然后在 rsp+0x28 处继续布局后续参数

对着虚空日了一天
 
 
Back to Top