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