加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – x64调用约定(堆栈)和varargs

发布时间:2020-12-14 01:55:55 所属栏目:Windows 来源:网络整理
导读:我已经阅读了 Microsoft’s documentation,但这个计划太尴尬了,我想我会仔细检查以确保我正确理解它… 我的理解是通过参数传递的通用方法是这样的: --- bottom of stack ---(return address)[shadow space for arg 1][shadow space for arg 2][shadow space
我已经阅读了 Microsoft’s documentation,但这个计划太尴尬了,我想我会仔细检查以确保我正确理解它…

我的理解是通过参数传递的通用方法是这样的:

--- bottom of stack ---
(return address)
[shadow space for arg 1]
[shadow space for arg 2]
[shadow space for arg 3]
[shadow space for arg 4]
arg N
arg N - 1
arg N - 2
...
arg 6
arg 5
---- top of stack -----

实现va_arg时似乎很尴尬……这实际上是否正确?

解决方法

正确的图表是

--- Bottom of stack ---    RSP + size     (higher addresses)
arg N
arg N - 1
arg N - 2
...
arg 6
arg 5
[shadow space for arg 4]
[shadow space for arg 3]
[shadow space for arg 2]
[shadow space for arg 1]
(return address)
---- Top of stack -----    RSP            (lower addresses)
[grows downward]

返回地址位于堆栈的顶部(最近推送),后面是前四个参数的阴影空间,后跟参数5和之后.

参数从右向左推:最后一个参数(N)被推动,因此它最接近堆栈的底部.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读