当我从main调用过程时,下面的代码工作正常。但是如果我从几个程序深度调用该过程,则堆栈会累积返回地址,从而丢弃堆栈参数的位置。如何调用我的过程以在调用之前正确分配正确的阴影空间,无论我的代码在哪里被调用?
另一种说法是我在我的代码中将CreateFile过程调用了几个不同的位置,并且由于堆栈的状态不同,每次调用都需要从rsp中减去不同的字节数以使其工作。这是不可接受的。我希望有一个程序无论在何处调用都能正常工作。
mov rcx, pFileName
mov rdx, GENERIC_READ or GENERIC_WRITE
mov r8, FILE_SHARE_WRITE or FILE_SHARE_READ
xor r9, r9
sub rsp, 110o
mov rax, OPEN_EXISTING
mov qword ptr [rsp + 40o], rax
mov rax, FILE_FLAG_SEQUENTIAL_SCAN
mov qword ptr [rsp + 50o], rax
xor rax, rax
mov qword ptr [rsp + 60o], rax
call CreateFileA
add rsp, 110o