转反汇编

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//函数返回





posted @ 2014-05-14 17:27  ~萤火虫~  阅读(194)  评论(0编辑  收藏  举报