函数调用时的参数传递和栈帧结构问题

如下C++程序

int i=0x22222222; 
char szTest[]=”aaaa”;  //a的ascii码为0x61 
func(I, szTest);    //函数原型为void func(int a,char *sz); 

请问刚进入func函数时,参数在栈中的形式可能为 (左侧为地址,右侧为数据)

A. 
0x0013FCF0  0x61616161   
0x0013FCF4  0x22222222   
0x0013FCF8  0x00000000
B. 
0x0013FCF0  0x22222222 
0x0013FCF4  0x0013FCF8 
0x0013FCF8  0x61616161
C. 
0x0013FCF0  0x22222222   
0x0013FCF4  0x61616161   
0x0013FCF8  0x00000000
D. 
0x0013FCF0  0x0013FCF8 //函数地址
0x0013FCF4  0x22222222 //左边参数
0x0013FCF8  0x61616161 //右边参数

答案是D。

(1)对于x86系统,栈的增长方向是从高地址到低地址
(2)函数调用时,首先参数压栈,参数的入栈顺序是从右向左;最后压入函数地址
(3)函数调用入栈顺序依次是: 右边参数-->左边参数-->函数返回地址

栈的增长方向即栈中元素增加的方向,从高地址向着低地址元素不断增加,则栈底在高地址处,栈顶在低地址处!!!

 
原文地址:https://www.cnblogs.com/wft1990/p/6737551.html