上一篇 博文提到了 X64 下 MSVC 如何传递参数,但是没有涉及到当参数个数大于 4 的时候如何分配内存空间的问题,接下来我们来探究这个问题。
RSP 和 RBP
按照上面提到的博文,我们进行如下实验:
- 所有参数都是
struct Arg
, 并且sizeof(Arg) == 16
。 - 实验中,参数的个数
k = 6, 7, 8
,先观察汇编后rsp
和rbp
寄存器的变化。
实验:
1. k = 6
; 28 : void Call() {
$LN3:
00000 40 55 push rbp
00002 56 push rsi
00003 57 push rdi
00004 48 81 ec f0 03
00 00