chapter1.4.4

it2022-05-09  24

 

// chapter1.4.4.cpp : 定义控制台应用程序的入口点。//

#include "stdafx.h"#include <iostream>

int _tmain(int argc, _TCHAR* argv[]){ int sum = 0, value; while(std::cin>>value) {  sum+=value; } std::cout<<"Sum is "  <<sum<<std::endl; return 0;}

 

 

debug

od

 

004114C0    55              push    ebp004114C1    8BEC            mov     ebp, esp004114C3    81EC E4000000   sub     esp, 0E4004114C9    53              push    ebx004114CA    56              push    esi004114CB    57              push    edi004114CC    8DBD 1CFFFFFF   lea     edi, dword ptr [ebp-E4]004114D2    B9 39000000     mov     ecx, 39004114D7    B8 CCCCCCCC     mov     eax, CCCCCCCC004114DC    F3:AB           rep     stos dword ptr es:[edi]004114DE    C745 F8 0000000>mov     dword ptr [ebp-8], 0004114E5    8BF4            mov     esi, esp004114E7    8D45 EC         lea     eax, dword ptr [ebp-14]004114EA    50              push    eax004114EB    8B0D 24A34100   mov     ecx, dword ptr [<&MSVCP90D.std::>; MSVCP90D.std::cin004114F1    FF15 20A34100   call    dword ptr [<&MSVCP90D.std::basic>; MSVCP90D.std::basic_istream<char,std::char_traits<char> >::operator>>004114F7    3BF4            cmp     esi, esp004114F9    E8 BAFCFFFF     call    004111B8004114FE    8985 20FFFFFF   mov     dword ptr [ebp-E0], eax00411504    8B8D 20FFFFFF   mov     ecx, dword ptr [ebp-E0]0041150A    8B11            mov     edx, dword ptr [ecx]0041150C    8B8D 20FFFFFF   mov     ecx, dword ptr [ebp-E0]00411512    034A 04         add     ecx, dword ptr [edx+4]00411515    8BF4            mov     esi, esp00411517    FF15 1CA34100   call    dword ptr [<&MSVCP90D.std::ios_b>; MSVCP90D.std::ios_base::operator void *0041151D    3BF4            cmp     esi, esp0041151F    E8 94FCFFFF     call    004111B800411524    85C0            test    eax, eax                         ; 输入是否结束00411526    74 0B           je      short 0041153300411528    8B45 F8         mov     eax, dword ptr [ebp-8]           ; sum0041152B    0345 EC         add     eax, dword ptr [ebp-14]          ; sum+=value0041152E    8945 F8         mov     dword ptr [ebp-8], eax00411531  ^ EB B2           jmp     short 004114E500411533    8BF4            mov     esi, esp00411535    A1 18A34100     mov     eax, dword ptr [<&MSVCP90D.std::>0041153A    50              push    eax0041153B    8BFC            mov     edi, esp0041153D    8B4D F8         mov     ecx, dword ptr [ebp-8]00411540    51              push    ecx00411541    68 00784100     push    00417800                         ; ASCII "Sum is "00411546    8B15 14A34100   mov     edx, dword ptr [<&MSVCP90D.std::>; MSVCP90D.std::cout0041154C    52              push    edx0041154D    E8 11FCFFFF     call    0041116300411552    83C4 08         add     esp, 800411555    8BC8            mov     ecx, eax00411557    FF15 10A34100   call    dword ptr [<&MSVCP90D.std::basic>; MSVCP90D.std::basic_ostream<char,std::char_traits<char> >::operator<<0041155D    3BFC            cmp     edi, esp0041155F    E8 54FCFFFF     call    004111B800411564    8BC8            mov     ecx, eax00411566    FF15 0CA34100   call    dword ptr [<&MSVCP90D.std::basic>; MSVCP90D.std::basic_ostream<wchar_t,std::char_traits<wchar_t> >::operator<<0041156C    3BF4            cmp     esi, esp0041156E    E8 45FCFFFF     call    004111B800411573    33C0            xor     eax, eax00411575    52              push    edx00411576    8BCD            mov     ecx, ebp00411578    50              push    eax00411579    8D15 9C154100   lea     edx, dword ptr [41159C]0041157F    E8 2BFBFFFF     call    004110AF00411584    58              pop     eax00411585    5A              pop     edx00411586    5F              pop     edi00411587    5E              pop     esi00411588    5B              pop     ebx00411589    81C4 E4000000   add     esp, 0E40041158F    3BEC            cmp     ebp, esp00411591    E8 22FCFFFF     call    004111B800411596    8BE5            mov     esp, ebp00411598    5D              pop     ebp00411599    C3              retn

 ida

.text:004114C0.text:004114C0 ; =============== S U B R O U T I N E =======================================.text:004114C0.text:004114C0 ; Attributes: bp-based frame.text:004114C0.text:004114C0 _wmain          proc near               ; CODE XREF: j__wmainj.text:004114C0.text:004114C0 var_E4          = byte ptr -0E4h.text:004114C0 cin             = dword ptr -0E0h.text:004114C0 value           = dword ptr -14h.text:004114C0 sum             = dword ptr -8.text:004114C0.text:004114C0                 push    ebp.text:004114C1                 mov     ebp, esp.text:004114C3                 sub     esp, 0E4h.text:004114C9                 push    ebx.text:004114CA                 push    esi.text:004114CB                 push    edi.text:004114CC                 lea     edi, [ebp+var_E4].text:004114D2                 mov     ecx, 39h.text:004114D7                 mov     eax, 0CCCCCCCCh.text:004114DC                 rep stosd.text:004114DE                 mov     [ebp+sum], 0.text:004114E5.text:004114E5 loc_4114E5:                             ; CODE XREF: _wmain+71j.text:004114E5                 mov     esi, esp.text:004114E7                 lea     eax, [ebp+value].text:004114EA                 push    eax.text:004114EB                 mov     ecx, ds:__imp_?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A ; std::basic_istream<char,std::char_traits<char>> std::cin.text:004114F1                 call    ds:__imp_??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAH@Z ; std::basic_istream<char,std::char_traits<char>>::operator>>(int &).text:004114F7                 cmp     esi, esp.text:004114F9                 call    j___RTC_CheckEsp.text:004114FE                 mov     [ebp+cin], eax.text:00411504                 mov     ecx, [ebp+cin].text:0041150A                 mov     edx, [ecx].text:0041150C                 mov     ecx, [ebp+cin].text:00411512                 add     ecx, [edx+4].text:00411515                 mov     esi, esp.text:00411517                 call    ds:__imp_??Bios_base@std@@QBEPAXXZ ; std::ios_base::operator void *(void).text:0041151D                 cmp     esi, esp.text:0041151F                 call    j___RTC_CheckEsp.text:00411524                 test    eax, eax.text:00411526                 jz      short loc_411533.text:00411528                 mov     eax, [ebp+sum].text:0041152B                 add     eax, [ebp+value].text:0041152E                 mov     [ebp+sum], eax.text:00411531                 jmp     short loc_4114E5.text:00411533 ; ---------------------------------------------------------------------------.text:00411533.text:00411533 loc_411533:                             ; CODE XREF: _wmain+66j.text:00411533                 mov     esi, esp.text:00411535                 mov     eax, ds:__imp_?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z ; std::endl(std::basic_ostream<char,std::char_traits<char>> &).text:0041153A                 push    eax.text:0041153B                 mov     edi, esp.text:0041153D                 mov     ecx, [ebp+sum].text:00411540                 push    ecx.text:00411541                 push    offset aSumIs   ; "Sum is ".text:00411546                 mov     edx, ds:__imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A ; std::basic_ostream<char,std::char_traits<char>> std::cout.text:0041154C                 push    edx.text:0041154D                 call    j_??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,char const *).text:00411552                 add     esp, 8.text:00411555                 mov     ecx, eax.text:00411557                 call    ds:__imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@H@Z ; std::basic_ostream<char,std::char_traits<char>>::operator<<(int).text:0041155D                 cmp     edi, esp.text:0041155F                 call    j___RTC_CheckEsp.text:00411564                 mov     ecx, eax.text:00411566                 call    ds:__imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z ; std::basic_ostream<char,std::char_traits<char>>::operator<<(std::basic_ostream<char,std::char_traits<char>> & (*)(std::basic_ostream<char,std::char_traits<char>> &)).text:0041156C                 cmp     esi, esp.text:0041156E                 call    j___RTC_CheckEsp.text:00411573                 xor     eax, eax.text:00411575                 push    edx.text:00411576                 mov     ecx, ebp.text:00411578                 push    eax.text:00411579                 lea     edx, dword_41159C.text:0041157F                 call    j_@_RTC_CheckStackVars@8 ; _RTC_CheckStackVars(x,x).text:00411584                 pop     eax.text:00411585                 pop     edx.text:00411586                 pop     edi.text:00411587                 pop     esi.text:00411588                 pop     ebx.text:00411589                 add     esp, 0E4h.text:0041158F                 cmp     ebp, esp.text:00411591                 call    j___RTC_CheckEsp.text:00411596                 mov     esp, ebp.text:00411598                 pop     ebp.text:00411599                 retn.text:00411599 _wmain          endp.text:00411599.text:00411599 ; ---------------------------------------------------------------------------

release

od

 

00401000  /$  51            push    ecx00401001  |.  8B0D 40204000 mov     ecx, dword ptr [<&MSVCP90.std::c>;  MSVCP90.std::cin00401007  |.  56            push    esi00401008  |.  8D4424 04     lea     eax, dword ptr [esp+4]0040100C  |.  50            push    eax0040100D  |.  33F6          xor     esi, esi0040100F  |.  FF15 5C204000 call    dword ptr [<&MSVCP90.std::basic_>;  MSVCP90.std::basic_istream<char,std::char_traits<char> >::operator>>00401015  |.  8B08          mov     ecx, dword ptr [eax]00401017  |.  8B49 04       mov     ecx, dword ptr [ecx+4]0040101A  |.  8B5401 08     mov     edx, dword ptr [ecx+eax+8]0040101E  |.  03C8          add     ecx, eax00401020  |.  80E2 06       and     dl, 600401023  |.  0FBEC2        movsx   eax, dl00401026  |.  F7D8          neg     eax00401028  |.  1BC0          sbb     eax, eax0040102A  |.  F7D0          not     eax0040102C  |.  85C1          test    ecx, eax0040102E  |.  74 2E         je      short 0040105E00401030  |>  037424 04     /add     esi, dword ptr [esp+4]          ;  sum+=value00401034  |.  8D4C24 04     |lea     ecx, dword ptr [esp+4]00401038  |.  51            |push    ecx                             ;  value00401039  |.  8B0D 40204000 |mov     ecx, dword ptr [<&MSVCP90.std::>;  MSVCP90.std::cin0040103F  |.  FF15 5C204000 |call    dword ptr [<&MSVCP90.std::basic>;  MSVCP90.std::basic_istream<char,std::char_traits<char> >::operator>>00401045  |.  8B10          |mov     edx, dword ptr [eax]00401047  |.  8B4A 04       |mov     ecx, dword ptr [edx+4]0040104A  |.  03C8          |add     ecx, eax0040104C  |.  8B41 08       |mov     eax, dword ptr [ecx+8]0040104F  |.  24 06         |and     al, 600401051  |.  0FBED0        |movsx   edx, al00401054  |.  F7DA          |neg     edx00401056  |.  1BD2          |sbb     edx, edx00401058  |.  F7D2          |not     edx0040105A  |.  85D1          |test    ecx, edx                        ;  是否是结束0040105C  |.^ 75 D2         \jnz     short 004010300040105E  |>  A1 38204000   mov     eax, dword ptr [<&MSVCP90.std::e>00401063  |.  8B0D 44204000 mov     ecx, dword ptr [<&MSVCP90.std::c>;  MSVCP90.std::cout00401069  |.  50            push    eax0040106A  |.  56            push    esi                              ;  sum0040106B  |.  51            push    ecx0040106C  |.  E8 4F010000   call    004011C000401071  |.  83C4 04       add     esp, 400401074  |.  8BC8          mov     ecx, eax00401076  |.  FF15 64204000 call    dword ptr [<&MSVCP90.std::basic_>;  MSVCP90.std::basic_ostream<char,std::char_traits<char> >::operator<<0040107C  |.  8BC8          mov     ecx, eax0040107E  |.  FF15 68204000 call    dword ptr [<&MSVCP90.std::basic_>;  MSVCP90.std::basic_ostream<wchar_t,std::char_traits<wchar_t> >::operator<<00401084  |.  33C0          xor     eax, eax00401086  |.  5E            pop     esi00401087  |.  59            pop     ecx00401088  \.  C3            retn

 

ida

.text:00401000.text:00401000 ; =============== S U B R O U T I N E =======================================.text:00401000.text:00401000.text:00401000 ; int __cdecl main(int temvalue, const char **argv, const char *envp).text:00401000 _main           proc near               ; CODE XREF: ___tmainCRTStartup+10Ap.text:00401000.text:00401000 value           = byte ptr -4.text:00401000 temvalue        = dword ptr  4.text:00401000 argv            = dword ptr  8.text:00401000 envp            = dword ptr  0Ch.text:00401000.text:00401000                 push    ecx.text:00401001                 mov     ecx, ds:__imp_?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A ; std::basic_istream<char,std::char_traits<char>> std::cin.text:00401007                 push    esi.text:00401008                 lea     eax, [esp+8+value].text:0040100C                 push    eax.text:0040100D                 xor     esi, esi.text:0040100F                 call    ds:__imp_??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAH@Z ; std::basic_istream<char,std::char_traits<char>>::operator>>(int &).text:00401015                 mov     ecx, [eax].text:00401017                 mov     ecx, [ecx+4].text:0040101A                 mov     edx, [ecx+eax+8].text:0040101E                 add     ecx, eax.text:00401020                 and     dl, 6.text:00401023                 movsx   eax, dl.text:00401026                 neg     eax.text:00401028                 sbb     eax, eax.text:0040102A                 not     eax.text:0040102C                 test    eax, ecx        ; 是否是结束.text:0040102E                 jz      short printresult.text:00401030.text:00401030 whilecin:                               ; CODE XREF: _main+5Cj.text:00401030                 add     esi, [esp+temvalue] ; esi为sum.text:00401034                 lea     ecx, [esp+temvalue] ; temvalue.text:00401038                 push    ecx.text:00401039                 mov     ecx, ds:__imp_?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A ; std::basic_istream<char,std::char_traits<char>> std::cin.text:0040103F                 call    ds:__imp_??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAH@Z ; std::basic_istream<char,std::char_traits<char>>::operator>>(int &).text:00401045                 mov     edx, [eax].text:00401047                 mov     ecx, [edx+4].text:0040104A                 add     ecx, eax.text:0040104C                 mov     eax, [ecx+8].text:0040104F                 and     al, 6.text:00401051                 movsx   edx, al.text:00401054                 neg     edx.text:00401056                 sbb     edx, edx.text:00401058                 not     edx.text:0040105A                 test    edx, ecx        ; 是否结束.text:0040105C                 jnz     short whilecin  ; esi为sum.text:0040105E.text:0040105E printresult:                            ; CODE XREF: _main+2Ej.text:0040105E                 mov     eax, ds:__imp_?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z ; std::endl(std::basic_ostream<char,std::char_traits<char>> &).text:00401063                 mov     ecx, ds:__imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A ; std::basic_ostream<char,std::char_traits<char>> std::cout.text:00401069                 push    eax.text:0040106A                 push    esi             ; sum.text:0040106B                 push    ecx.text:0040106C                 call    ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,char const *).text:00401071                 add     esp, 4.text:00401074                 mov     ecx, eax.text:00401076                 call    ds:__imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@H@Z ; std::basic_ostream<char,std::char_traits<char>>::operator<<(int).text:0040107C                 mov     ecx, eax.text:0040107E                 call    ds:__imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z ; std::basic_ostream<char,std::char_traits<char>>::operator<<(std::basic_ostream<char,std::char_traits<char>> & (*)(std::basic_ostream<char,std::char_traits<char>> &)).text:00401084                 xor     eax, eax.text:00401086                 pop     esi.text:00401087                 pop     ecx.text:00401088                 retn.text:00401088 _main           endp.text:00401088.text:00401088 ; ---------------------------------------------------------------------------

 

转载于:https://www.cnblogs.com/nanshouyong326/archive/2010/06/20/1761420.html


最新回复(0)