int _tmain(int argc, _TCHAR* argv[]) { push ebp //栈底压栈 mov ebp,esp //栈底下移,更详细的请参考我关于ebp,esp的解释 sub esp,0CCh //局部变量预留空间 push ebx //保存ebx A push esi //保存esi B push edi //保存edi C lea edi,[ebp-0CCh] //下移edi到栈顶 mov ecx,33h //0CCh/4 = 33h mov eax,0CCCCCCCCh //eax赋值 C rep stos dword ptr es:[edi] //从edi开始做33h次赋值0CCCCCCCCh ,初始化栈内存 int nFunctionVal = InternalFunctionB(36, 64); E push 40h //参数64入栈, push 24h //参数36入栈 call InternalFunctionB (41101Eh) );//到41101Eh处函数调用 add esp,8 //函数调用后将参数弹出,清理栈 A mov dword ptr [nFunctionVal],eax cout<<"Hello SolidMango!"<<endl; D mov esi,esp F mov eax,dword ptr [__imp_std::endl (41A338h)] A4 push eax A5 push offset string "Hello SolidMango!" (417800h) AA mov ecx,dword ptr [__imp_std::cout (41A33Ch)] B0 push ecx B1 call std::operator<<<std::char_traits<char> > (411163h) B6 add esp,8 B9 mov ecx,eax BB call dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (41A320h)] C1 cmp esi,esp C3 call @ILT+430(__RTC_CheckEsp) (4111B3h) return 0; C8 xor eax,eax } CA pop edi //恢复edi CB pop esi //恢复esi CC pop ebx //恢复ebx CD add esp,0CCh //栈顶上移 D3 cmp ebp,esp //检查栈平衡 D5 call @ILT+430(__RTC_CheckEsp) (4111B3h) DA mov esp,ebp //恢复上一个栈帧的ebp,esp DC pop ebp DD ret//函数返回 |