cpp反汇编之多继承

源码

#include<stdio.h>class CSoft{public:CSoft(){m_nColor = 2;}virtual ~CSoft(){printf("virtual ~CSoft()\n");}virtual int GetColor(){return m_nColor;}virtual int SitDown(){return printf("Sit down and rest your legs!\n");}protected:int m_nColor;};class CBed{public:CBed(){m_nLength = 4;m_nWidth = 5;}virtual ~CBed(){printf("virtual ~CBed()\n");}virtual int GetArea(){return m_nLength * m_nWidth;}virtual int Sleep(){return printf("go to sleep!\n");}protected:int m_nLength;int m_nWidth;};class CSoftBed : public CSoft , public CBed{public:CSoftBed(){m_nHeight = 6;}virtual ~CSoftBed(){printf("virtual ~CSoftBed()\n");}virtual SitDown(){return printf("sit down on the soft bed\n");}virtual int Sleep(){return printf("go to sleep on the sofa bed\n");}virtual int GetHeight(){return m_nHeight;}protected:int m_nHeight;};int main5(){CSoftBed softBed;CSoft *pSoft = &softBed;CBed *pBed = &softBed;pSoft->SitDown();pBed->Sleep();printf("Color = %d\n" , pSoft->GetColor());printf("area = %d\n" , pBed->GetArea());return 0;} 反汇编分析

1: #include<stdio.h>2:3: class CSoft4: {5: public:6:CSoft()00402020 pushebp00402021 movebp,esp00402023 subesp,44h00402026 pushebx00402027 pushesi00402028 pushedi00402029 pushecx0040202A leaedi,[ebp-44h]0040202D movecx,11h00402032 moveax,0CCCCCCCCh00402037 rep stos dword ptr [edi]00402039 popecx0040203A movdword ptr [ebp-4],ecx0040203D moveax,dword ptr [ebp-4]00402040 movdword ptr [eax],offset CSoft::`vftable' (0042610c)7:{8:m_nColor = 2;00402046 movecx,dword ptr [ebp-4]00402049 movdword ptr [ecx+4],29:}00402050 moveax,dword ptr [ebp-4]00402053 popedi00402054 popesi00402055 popebx00402056 movesp,ebp00402058 popebp00402059 ret10:virtual ~CSoft()11:{00402070 pushebp00402071 movebp,esp00402073 subesp,44h00402076 pushebx00402077 pushesi00402078 pushedi00402079 pushecx0040207A leaedi,[ebp-44h]0040207D movecx,11h00402082 moveax,0CCCCCCCCh00402087 rep stos dword ptr [edi]00402089 popecx0040208A movdword ptr [ebp-4],ecx0040208D moveax,dword ptr [ebp-4]00402090 movdword ptr [eax],offset CSoft::`vftable' (0042610c)12:printf("virtual ~CSoft()\n");00402096 pushoffset string "virtual ~CSoft()\n" (00426118)0040209B callprintf (00402ad0)004020A0 addesp,413:}004020A3 popedi004020A4 popesi004020A5 popebx004020A6 addesp,44h004020A9 cmpebp,esp004020AB call__chkesp (004029a0)004020B0 movesp,ebp004020B2 popebp004020B3 ret14:virtual int GetColor()15:{004020D0 pushebp004020D1 movebp,esp004020D3 subesp,44h004020D6 pushebx004020D7 pushesi004020D8 pushedi004020D9 pushecx004020DA leaedi,[ebp-44h]004020DD movecx,11h004020E2 moveax,0CCCCCCCCh004020E7 rep stos dword ptr [edi]004020E9 popecx004020EA movdword ptr [ebp-4],ecx16:return m_nColor;004020ED moveax,dword ptr [ebp-4]004020F0 moveax,dword ptr [eax+4]17:}004020F3 popedi004020F4 popesi004020F5 popebx004020F6 movesp,ebp004020F8 popebp004020F9 ret18:virtual int SitDown()19:{00402110 pushebp00402111 movebp,esp00402113 subesp,44h00402116 pushebx00402117 pushesi00402118 pushedi00402119 pushecx0040211A leaedi,[ebp-44h]0040211D movecx,11h00402122 moveax,0CCCCCCCCh00402127 rep stos dword ptr [edi]00402129 popecx0040212A movdword ptr [ebp-4],ecx20:return printf("Sit down and rest your legs!\n");0040212D pushoffset string "Sit down and rest your legs!\n" (0042612c)00402132 callprintf (00402ad0)00402137 addesp,421:}0040213A popedi0040213B popesi0040213C popebx0040213D addesp,44h00402140 cmpebp,esp00402142 call__chkesp (004029a0)00402147 movesp,ebp00402149 popebp0040214A ret22: protected:23:int m_nColor;24: };25: class CBed26: {27: public:28:CBed()004021D0 pushebp004021D1 movebp,esp004021D3 subesp,44h004021D6 pushebx004021D7 pushesi004021D8 pushedi004021D9 pushecx004021DA leaedi,[ebp-44h]004021DD movecx,11h004021E2 moveax,0CCCCCCCCh004021E7 rep stos dword ptr [edi]004021E9 popecx004021EA movdword ptr [ebp-4],ecx004021ED moveax,dword ptr [ebp-4]004021F0 movdword ptr [eax],offset CBed::`vftable' (00426150)29:{30:m_nLength = 4;004021F6 movecx,dword ptr [ebp-4]004021F9 movdword ptr [ecx+4],431:m_nWidth = 5;00402200 movedx,dword ptr [ebp-4]00402203 movdword ptr [edx+8],532:}0040220A moveax,dword ptr [ebp-4]0040220D popedi0040220E popesi0040220F popebx00402210 movesp,ebp00402212 popebp00402213 ret33:virtual ~CBed()34:{00402330 pushebp00402331 movebp,esp00402333 subesp,44h00402336 pushebx00402337 pushesi00402338 pushedi00402339 pushecx0040233A leaedi,[ebp-44h]0040233D movecx,11h00402342 moveax,0CCCCCCCCh00402347 rep stos dword ptr [edi]00402349 popecx0040234A movdword ptr [ebp-4],ecx0040234D moveax,dword ptr [ebp-4]00402350 movdword ptr [eax],offset CBed::`vftable' (00426150)35:printf("virtual ~CBed()\n");00402356 pushoffset string "virtual ~CBed()\n" (00426180)0040235B callprintf (00402ad0)00402360 addesp,436:}00402363 popedi00402364 popesi00402365 popebx00402366 addesp,44h00402369 cmpebp,esp0040236B call__chkesp (004029a0)00402370 movesp,ebp00402372 popebp00402373 ret37:virtual int GetArea()38:{00402230 pushebp00402231 movebp,esp00402233 subesp,44h00402236 pushebx00402237 pushesi00402238 pushedi00402239 pushecx0040223A leaedi,[ebp-44h]0040223D movecx,11h00402242 moveax,0CCCCCCCCh00402247 rep stos dword ptr [edi]00402249 popecx0040224A movdword ptr [ebp-4],ecx39:return m_nLength * m_nWidth;0040224D moveax,dword ptr [ebp-4]00402250 movecx,dword ptr [ebp-4]00402253 moveax,dword ptr [eax+4]00402256 imuleax,dword ptr [ecx+8]40:}0040225A popedi0040225B popesi0040225C popebx0040225D movesp,ebp0040225F popebp00402260 ret45: protected:46:int m_nLength;47:int m_nWidth;48: };49: class CSoftBed : public CSoft , public CBed50: {51: public:52:CSoftBed()00401F60 pushebp00401F61 movebp,esp00401F63 push0FFh00401F65 pushoffset __ehhandler$??0CSoftBed@@QAE@XZ (00414839)00401F6A moveax,fs:[00000000]00401F70 pusheax00401F71 movdword ptr fs:[0],esp00401F78 subesp,44h00401F7B pushebx00401F7C pushesi00401F7D pushedi00401F7E pushecx00401F7F leaedi,[ebp-50h]00401F82 movecx,11h00401F87 moveax,0CCCCCCCCh00401F8C rep stos dword ptr [edi]00401F8E popecx00401F8F movdword ptr [ebp-10h],ecx00401F92 movecx,dword ptr [ebp-10h]00401F95 call@ILT+70(CSoft::CSoft) (0040104b)00401F9A movdword ptr [ebp-4],000401FA1 movecx,dword ptr [ebp-10h]00401FA4 addecx,800401FA7 call@ILT+235(CBed::CBed) (004010f0)00401FAC moveax,dword ptr [ebp-10h]00401FAF movdword ptr [eax],offset CSoftBed::`vftable' (004260f4)00401FB5 movecx,dword ptr [ebp-10h]00401FB8 movdword ptr [ecx+8],offset CSoftBed::`vftable' (004260e4)53:{54:m_nHeight = 6;00401FBF movedx,dword ptr [ebp-10h]00401FC2 movdword ptr [edx+14h],655:}00401FC9 movdword ptr [ebp-4],0FFFFFFFFh00401FD0 moveax,dword ptr [ebp-10h]00401FD3 movecx,dword ptr [ebp-0Ch]00401FD6 movdword ptr fs:[0],ecx00401FDD popedi00401FDE popesi00401FDF popebx00401FE0 addesp,50h00401FE3 cmpebp,esp00401FE5 call__chkesp (004029a0)00401FEA movesp,ebp00401FEC popebp00401FED ret56:virtual ~CSoftBed()57:{00402390 pushebp00402391 movebp,esp00402393 push0FFh00402395 pushoffset __ehhandler$??1CSoftBed@@UAE@XZ (00414859)0040239A moveax,fs:[00000000]004023A0 pusheax004023A1 movdword ptr fs:[0],esp004023A8 subesp,48h004023AB pushebx004023AC pushesi004023AD pushedi004023AE pushecx004023AF leaedi,[ebp-54h]004023B2 movecx,12h004023B7 moveax,0CCCCCCCCh004023BC rep stos dword ptr [edi]004023BE popecx004023BF movdword ptr [ebp-10h],ecx004023C2 moveax,dword ptr [ebp-10h]004023C5 movdword ptr [eax],offset CSoftBed::`vftable' (004260f4)004023CB movecx,dword ptr [ebp-10h]004023CE movdword ptr [ecx+8],offset CSoftBed::`vftable' (004260e4)004023D5 movdword ptr [ebp-4],058:printf("virtual ~CSoftBed()\n");004023DC pushoffset string "virtual ~CSoftBed()\n" (004261a0)004023E1 callprintf (00402ad0)004023E6 addesp,459:}004023E9 cmpdword ptr [ebp-10h],0004023ED jeCSoftBed::~CSoftBed+6Ah (004023fa)004023EF movedx,dword ptr [ebp-10h]004023F2 addedx,8004023F5 movdword ptr [ebp-14h],edx004023F8 jmpCSoftBed::~CSoftBed+71h (00402401)004023FA movdword ptr [ebp-14h],000402401 movecx,dword ptr [ebp-14h]00402404 call@ILT+195(CBed::~CBed) (004010c8)00402409 movdword ptr [ebp-4],0FFFFFFFFh00402410 movecx,dword ptr [ebp-10h]00402413 call@ILT+115(CSoft::~CSoft) (00401078)00402418 movecx,dword ptr [ebp-0Ch]0040241B movdword ptr fs:[0],ecx00402422 popedi00402423 popesi00402424 popebx00402425 addesp,54h00402428 cmpebp,esp0040242A call__chkesp (004029a0)0040242F movesp,ebp00402431 popebp00402432 ret60:virtual SitDown()61:{00402460 pushebp00402461 movebp,esp00402463 subesp,44h00402466 pushebx00402467 pushesi00402468 pushedi00402469 pushecx0040246A leaedi,[ebp-44h]0040246D movecx,11h00402472 moveax,0CCCCCCCCh00402477 rep stos dword ptr [edi]00402479 popecx0040247A movdword ptr [ebp-4],ecx62:return printf("sit down on the soft bed\n");0040247D pushoffset string "sit down on the soft bed\n" (004271d0)00402482 callprintf (00402ad0)00402487 addesp,463:}0040248A popedi0040248B popesi0040248C popebx0040248D addesp,44h00402490 cmpebp,esp00402492 call__chkesp (004029a0)00402497 movesp,ebp00402499 popebp0040249A ret64:virtual int Sleep()65:{004024B0 pushebp004024B1 movebp,esp004024B3 subesp,44h004024B6 pushebx004024B7 pushesi004024B8 pushedi004024B9 pushecx004024BA leaedi,[ebp-44h]004024BD movecx,11h004024C2 moveax,0CCCCCCCCh004024C7 rep stos dword ptr [edi]004024C9 popecx004024CA movdword ptr [ebp-4],ecx66:return printf("go to sleep on the sofa bed\n");004024CD pushoffset string "go to sleep on the sofa bed\n" (004271ec)004024D2 callprintf (00402ad0)004024D7 addesp,467:}004024DA popedi004024DB popesi004024DC popebx004024DD addesp,44h004024E0 cmpebp,esp004024E2 call__chkesp (004029a0)004024E7 movesp,ebp004024E9 popebp004024EA ret68:virtual int GetHeight()69:{00402500 pushebp00402501 movebp,esp00402503 subesp,44h00402506 pushebx00402507 pushesi00402508 pushedi00402509 pushecx0040250A leaedi,[ebp-44h]0040250D movecx,11h00402512 moveax,0CCCCCCCCh00402517 rep stos dword ptr [edi]00402519 popecx0040251A movdword ptr [ebp-4],ecx70:return m_nHeight;0040251D moveax,dword ptr [ebp-4]00402520 moveax,dword ptr [eax+14h]71:}00402523 popedi00402524 popesi00402525 popebx00402526 movesp,ebp00402528 popebp00402529 ret72: protected:73:int m_nHeight;74: };75: int main()76: {00410090 pushebp00410091 movebp,esp00410093 push0FFh00410095 pushoffset __ehhandler$_main (00414819)0041009A moveax,fs:[00000000]004100A0 pusheax004100A1 movdword ptr fs:[0],esp004100A8 subesp,68h004100AB pushebx004100AC pushesi004100AD pushedi004100AE leaedi,[ebp-74h]004100B1 movecx,1Ah004100B6 moveax,0CCCCCCCCh004100BB rep stos dword ptr [edi]77:CSoftBed softBed;004100BD leaecx,[ebp-24h] 004100C0 call@ILT+100(CSoftBed::CSoftBed) (00401069)004100C5 movdword ptr [ebp-4],078:CSoft *pSoft = &softBed;004100CC leaeax,[ebp-24h]EAX = 0018FF24004100CF movdword ptr [ebp-28h],eax79:CBed *pBed = &softBed;004100D2 leaecx,[ebp-24h]004100D5 testecx,ecx004100D7 jemain+51h (004100e1)004100D9 leaedx,[ebp-1Ch]EDX = 0018FF2C继承的CBed对象部分004100DC movdword ptr [ebp-34h],edx004100DF jmpmain+58h (004100e8)004100E1 movdword ptr [ebp-34h],0004100E8 moveax,dword ptr [ebp-34h]004100EB movdword ptr [ebp-2Ch],eax80:pSoft->SitDown();004100EE movecx,dword ptr [ebp-28h]004100F1 movedx,dword ptr [ecx]004100F3 movesi,esp004100F5 movecx,dword ptr [ebp-28h]004100F8 calldword ptr [edx+8]004100FB cmpesi,esp004100FD call__chkesp (004029a0)81:pBed->Sleep();00410102 moveax,dword ptr [ebp-2Ch]00410105 movedx,dword ptr [eax]EDX = 004260E400410107 movesi,esp00410109 movecx,dword ptr [ebp-2Ch]0041010C calldword ptr [edx+8]0041010F cmpesi,esp00410111 call__chkesp (004029a0)82:printf("Color = %d\n" , pSoft->GetColor());00410116 moveax,dword ptr [ebp-28h]EAX = 0018FF2400410119 movedx,dword ptr [eax]EDX = 004260F40041011B movesi,esp0041011D movecx,dword ptr [ebp-28h]CSoft部分首地址 ECX = 0018FF2400410120 calldword ptr [edx+4]edx虚函数表首地址00410123 cmpesi,esp00410125 call__chkesp (004029a0)0041012A pusheax0041012B pushoffset string "Color = %d\n" (004260d0)00410130 callprintf (00402ad0)00410135 addesp,883:printf("area = %d\n" , pBed->GetArea());00410138 moveax,dword ptr [ebp-2Ch]0041013B movedx,dword ptr [eax]0041013D movesi,esp0041013F movecx,dword ptr [ebp-2Ch]00410142 calldword ptr [edx+4]00410145 cmpesi,esp00410147 call__chkesp (004029a0)0041014C pusheax0041014D pushoffset string "area = %d\n" (004260c0)00410152 callprintf (00402ad0)00410157 addesp,884:return 0;0041015A movdword ptr [ebp-30h],000410161 movdword ptr [ebp-4],0FFFFFFFFh00410168 leaecx,[ebp-24h]0041016B call@ILT+60(CSoftBed::~CSoftBed) (00401041)00410170 moveax,dword ptr [ebp-30h]85: }00410173 movecx,dword ptr [ebp-0Ch]00410176 movdword ptr fs:[0],ecx0041017D popedi0041017E popesi0041017F popebx00410180 addesp,74h00410183 cmpebp,esp00410185 call__chkesp (004029a0)0041018A movesp,ebp0041018C popebp0041018D ret0018FF0E CC CC CC CC CC CC 2C FF 18 00 CC 烫烫烫,….0018FF19 CC CC CC 2C FF 18 00 24 FF 18 00 烫.,…$…0018FF24 F4 60 42 00 02 00 00 00 E4 60 42 鬬B…..鋊B0018FF2F 00 04 00 00 00 05 00 00 00 06 00 ………..0018FF3A 00 00 78 FF 18 00 19 48 41 00 00 ..x….HA..0018FF45 00 00 00 88 FF 18 00 C9 2C 40 00 ……..,@.0018FF50 01 00 00 00 B8 19 3E 00 30 1A 3E ……>.0.>@ILT+100(??0CSoftBed@@QAE@XZ):00401069 jmpCSoftBed::CSoftBed (00401f60)@ILT+105(?main4@@YAHXZ):0040106E jmpmain4 (00401630)@ILT+110(??1CGerman@@UAE@XZ):00401073 jmpCGerman::~CGerman (00401d40)@ILT+115(??1CSoft@@UAE@XZ):00401078 jmpCSoft::~CSoft (00402070)@ILT+120(??_ECGerman@@UAEPAXI@Z):0040107D jmpCGerman::`scalar deleting destructor' (00401e20)@ILT+125(??1CDerive@@QAE@XZ):00401082 jmpCDerive::~CDerive (00401480)@ILT+130(??_ECSoftBed@@UAEPAXI@Z):00401087 jmpCSoftBed::`scalar deleting destructor' (00402540)@ILT+135(??0CPerson@@QAE@XZ):0040108C jmpCPerson::CPerson (00401790)@ILT+140(??_ECChinese@@UAEPAXI@Z):00401091 jmpCChinese::`scalar deleting destructor' (00401a40)@ILT+145(?SitDown@CSoft@@UAEHXZ):00401096 jmpCSoft::SitDown (00402110)@ILT+150(??1CAmerican@@UAE@XZ):0040109B jmpCAmerican::~CAmerican (00401b50)@ILT+155(?main2@@YAHXZ):004010A0 jmpmain2 (004015a0)@ILT+160(?GetClassName@CPerson@@UAEPADXZ):004010A5 jmpCPerson::GetClassName (004018b0)@ILT+165(??1CChinese@@UAE@XZ):004010AA jmpCChinese::~CChinese (00401960)@ILT+170(?Sleep@CSoftBed@@UAEHXZ):004010AF jmpCSoftBed::Sleep (004024b0)@ILT+175(??_ECSoftBed@@UAEPAXI@Z):004010B4 jmpCSoftBed::`scalar deleting destructor' (00402540)??_7CSoftBed@@6BCSoft@@@:004260F4 xchgedx,dword ptr [eax]004260F6 inceax004260F7 addbyte ptr [ecx+edx],al004260FA inceax004260FB addah,bl004260FD adcbyte ptr [eax],al00426100 ordword ptr [ecx],edx00426102 inceax00426103 addbyte ptr [eax],al00426105 addbyte ptr [eax],al00426107 addbyte ptr [eax],al00426109 addbyte ptr [eax],al0042610B addbyte ptr ds:[4004010h],ch00426111 adcdword ptr [eax],eax00426114 xchgeax,esi00426115 adcbyte ptr [eax],al

,可是旅行的彼时那刻我的心情一直是好的吗?

cpp反汇编之多继承

相关文章:

你感兴趣的文章:

标签云: