V6反汇编代码如下:
fun1: 202: int nIndex =3; 0040231D C7 45 F8 03 00 00 00 mov dword ptr [ebp-8],3 203: int nParam = 5; 00402324 C7 45 F4 05 00 00 00 mov dword ptr [ebp-0Ch],5 204: int nRet = 0; 0040232B C7 45 F0 00 00 00 00 mov dword ptr [ebp-10h],0 205: nRet = Test(nIndex,nParam); 00402332 8B 45 F4 mov eax,dword ptr [ebp-0Ch] 00402335 50 push eax ;低地址对应的右参数nParam 入栈 00402336 8B 4D F8 mov ecx,dword ptr [ebp-8] 00402339 51 push ecx ; 高地址对应的左参数nIndex 入栈 0040233A 8B 4D FC mov ecx,dword ptr [ebp-4] 0040233D E8 59 ED FF FF call @ILT+150(CTestASMDlg::Test) (0040109b) 00402342 89 45 F0 mov dword ptr [ebp-10h],eax ; 赋返回值 ... 218: int CTestASMDlg::Test(int nIndex,int nParam) 219: { 004019B0 55 push ebp ; 保存fun1的ebp 004019B1 8B EC mov ebp,esp 004019B3 83 EC 44 sub esp,44h 004019B6 53 push ebx |
至于为什么先低址(右参)入栈原因很多,如编译器、函数调用约定,甚或语言类别。