x64装配 - 阴影空间

时间:2016-03-13 05:38:39

标签: assembly stack 64-bit masm

当我从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

0 个答案:

没有答案