首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MASM64中将参数传递给程序?

如何在MASM64中将参数传递给程序?
EN

Stack Overflow用户
提问于 2017-09-09 10:04:23
回答 1查看 459关注 0票数 2

我正在学习x64装配与MASM64。我读到前4个参数是通过寄存器传递给过程的:RCXRDXR9R8。如果有更多的参数,我们通过堆栈传递它们。

但有些东西让人困惑。

此代码不工作的原因:

代码语言:javascript
复制
sub rsp, 40h
push 0
push FILE_ATTRIBUTE_NORMAL
push CREATE_ALWAYS
xor r8, r8
xor r9, r9
mov rdx, GENERIC_READ or GENERIC_WRITE
mov rcx, offset szSavePath
call CreateFileA
add rsp, 40h

但是这个代码是有效的:

代码语言:javascript
复制
sub rsp, 40h
mov qword ptr [rsp+30h], 0
mov qword ptr [rsp+28h], FILE_ATTRIBUTE_NORMAL
mov qword ptr [rsp+20h], CREATE_ALWAYS
xor r8, r8
xor r9, r9
mov rdx, GENERIC_READ or GENERIC_WRITE
mov rcx, offset szSavePath
call CreateFileA
add rsp, 40h

请帮我解释一下这个。

你好,大卫

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-09 10:15:23

副rsp,40h push 0 push FILE_ATTRIBUTE_NORMAL push CREATE_ALWAYS

在这里,您将在下面放置3段信息,是堆栈上保留的空间。

代码语言:javascript
复制
sub rsp, 40h
mov qword ptr [rsp+30h], 0
mov qword ptr [rsp+28h], FILE_ATTRIBUTE_NORMAL
mov qword ptr [rsp+20h], CREATE_ALWAYS

但是在这里,您要将这些数据放在中,即堆栈上的保留空间。

然后,您将在第一个代码段中得到一个不平衡堆栈,因为您只使用add rsp, 40h释放保留的数量。

相同的代码,但使用推送:

代码语言:javascript
复制
push 0
push FILE_ATTRIBUTE_NORMAL
push CREATE_ALWAYS
sub rsp, 20h
xor r8, r8
xor r9, r9
mov rdx, GENERIC_READ or GENERIC_WRITE
mov rcx, offset szSavePath
call CreateFileA
add rsp, 20h + 18h
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46129460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档