Winapi 如何在MASM64中将参数传递给过程?
我正在学习用MASM64组装x64。我已经读到,前4个参数通过寄存器传递给过程:Winapi 如何在MASM64中将参数传递给过程?,winapi,assembly,64-bit,parameter-passing,masm,Winapi,Assembly,64 Bit,Parameter Passing,Masm,我正在学习用MASM64组装x64。我已经读到,前4个参数通过寄存器传递给过程:RCX、RDX、R9和R8。如果有更多的参数,我们通过堆栈传递它们 但有些事情令人困惑 此代码不起作用的原因: 子rsp,40小时 推0 推送文件\u属性\u正常 总是按“创建”按钮 异或r8,r8 异或r9,r9 mov rdx,通用读或通用写 mov rcx,偏移量szSavePath 调用CreateFileA 加上rsp,40小时 但这个代码是有效的: 子rsp,40小时 mov qword ptr[rsp
RCX
、RDX
、R9
和R8
。如果有更多的参数,我们通过堆栈传递它们
但有些事情令人困惑
此代码不起作用的原因:
子rsp,40小时
推0
推送文件\u属性\u正常
总是按“创建”按钮
异或r8,r8
异或r9,r9
mov rdx,通用读或通用写
mov rcx,偏移量szSavePath
调用CreateFileA
加上rsp,40小时
但这个代码是有效的:
子rsp,40小时
mov qword ptr[rsp+30h],0
mov qword ptr[rsp+28h],文件属性正常
mov qword ptr[rsp+20h],始终创建
异或r8,r8
异或r9,r9
mov rdx,通用读或通用写
mov rcx,偏移量szSavePath
调用CreateFileA
加上rsp,40小时
请帮我解释一下。你好,大卫
子rsp,40小时
推0
推送文件\u属性\u正常
总是按“创建”按钮
在这里,您将在堆栈的保留空间下方放置3条信息
子rsp,40小时
mov qword ptr[rsp+30h],0
mov qword ptr[rsp+28h],文件属性正常
mov qword ptr[rsp+20h],始终创建
但是这里您将把这些数据放在堆栈上的保留空间中
然后发生的情况是,在第一个代码段中,由于您仅使用add rsp,40h
释放保留的数量,因此您最终得到了一个不平衡的堆栈
相同的代码,但使用推送:
push 0
推送文件\u属性\u正常
总是按“创建”按钮
副rsp,20小时
异或r8,r8
异或r9,r9
mov rdx,通用读或通用写
mov rcx,偏移量szSavePath
调用CreateFileA
加上rsp,20小时+18小时
第5个参数必须在[rsp+20h]内,第6个参数必须在[rsp+28h]内,依此类推。此外,在呼叫之前,rsp必须是多个10hThanks!但是有没有正确的方法来使用push
?如何使用push
修复代码?