我读了微软的文档,但是这个方案太尴尬了,我想我应该仔细检查以确保我正确理解它......
我的理解是传递参数的通用方法是这样的:
--- 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)首先压入,因此它最接近堆栈底部。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)