An array of CPP disassembly

Source: Internet
Author: User

Paste the source code first

#include <string.h>void Show (char szbuf[]) {strcpy (szbuf, "Hello World");} char* Retarray () {char szbuff[] = {"Hello world"};return szbuff;} void Main () {int narray[5] = {1, 2, 3, 4, 5};/*int nOne = 1;int NWO = 2;int Nthree = 3;int Nfour = 4;int nfive = 5;*/ch  Ar cchar = ' A '; float ffloat = 1.0f;short Sshort = 1;int NInt = 2;double ddouble = 2.0f;char szhello[] = "Hello world"; Char szhell[] = "Hello worl"; char szhello1[] = "Hello world"; char szhellob[20] = {0}; Show (SZHELLOB); Retarray ();}
Another example

#include <stdio.h>int main5 () {int arr[3][5] = {{1, 2, 3}, {0}};int nIndex = 0;printf ("%d\n", Arr[nindex][nindex + 1]);//7:        printf ("%d\n", Arr[nindex][nindex + 1]);00401105   mov         Eax,dword ptr [ebp-40h]00401108   imul         eax,eax,14h0040110b   lea          ecx,[ebp+eax-3ch]0040110f   mov         Edx,dword ptr [ ebp-40h]00401112   mov         Eax,dword ptr [ecx+edx*4+4] 00401116   push        eax00401117   push         offset String "%d\n" (0042901c) 0040111c   call         printf (004018e0) 00401121   ADD&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBsp esp,8  return 0;}

Another one.

#include <stdio.h>int main7 () {char carray[3][256] = {"Hello world\r\n", "This was a test\r\n", "This is the end line!\ r\n "};p rintf (carray[1]); return 0;}

Disassembly analysis

1:void Main () 2: {00401010 push ebp00401011 mov ebp,esp00401013 sub esp,68h00401016 p         Ush ebx00401017 push esi00401018 push edi00401019 Lea EDI,[EBP-68H]0040101C mov ECX,1AH00401021 mov eax,0cccccccch00401026 rep stos dword ptr [Edi]3:int narray[5] = {1, 2, 3 , 4, 5};00401028 mov dword ptr [ebp-14h],1 stack is the first element from the bottom up 0040102F mov dword ptr [ebp-10h],200 401036 mov dword ptr [ebp-0ch],30040103d mov dword ptr [ebp-8],400401044 mov dword ptr [ebp- 4],54:int NOne = 1;0040104b mov dword ptr [ebp-18h],15:int nwo = 2;00401052 mov DWORD          ptr [Ebp-1ch],26:int nthree = 3;00401059 mov dword ptr [ebp-20h],37:int nfour = 4;00401060 mov         DWORD ptr [Ebp-24h],48:int nfive = 5;00401067 mov dword ptr [ebp-28h],59:}0040106e pop edi0040106f Pop        esi00401070 pop ebx00401071 mov esp,ebp00401073 pop ebp00401074 Ret10:char CChar = ' A '; 0040104B mov byte ptr [ebp-18h],41h11:float ffloat = 1.0f;0040104f mov dword ptr [E       Bp-1ch],3f800000h12:short sshort = 1;00401056 mov word ptr [ebp-20h],offset main+4ah (0040105a) 13: int nInt = 2;0040105C mov dword ptr [ebp-24h],214:double ddouble = 2.0f;00401063 mov dword ptr         [EBP-2CH],00040106A mov dword ptr [Ebp-28h],40000000h15:char szhello[] = "Hello world"; 004106F7 mov Eax,[string "Hello World" (00426EF4)]004106FC mov dword ptr [EBP-38H],EAX004106FF mov ecx,dword p TR [string "Hello World" +4 (00426EF8)]00410705 mov dword ptr [ebp-34h],ecx00410708 mov edx,dword ptr [ string "Hello World" +8 (00426EFC)]0041070e mov dword ptr [Ebp-30h],edx16:char szhell[] = "Hello worl"; 004 10711 mov eax,[string "Hello worl" (00426ee8)]00410716 mov dword ptr [ebp-44h],eax00410719 mov ecx,dword ptr [string]  "Hello Worl" +4 (00426EEC)]0041071f mov dword ptr [ebp-40h],ecx00410722 mov dx,word ptr [string] Hello Worl "+8 (00426EF0)]00410729 mov word ptr [ebp-3ch],dx0041072d mov al,[string" Hello worl "+0ah (00426e  F2)]00410732 mov byte ptr [ebp-3ah],al17:char szhello1[] = "Hello world"; 00410735 mov Ecx,dword ptr [string "Hello World" (00426EF4)]0041073b mov dword ptr [ebp-50h],ecx0041073e mov edx,dword ptr [ string "Hello World" +4 (00426EF8)]00410744 mov dword ptr [ebp-4ch],edx00410747 mov eax,[string "Hello        World "+8 (00426EFC)]0041074c mov dword ptr [ebp-48h],eax2:void Show (char szbuf[]) 3: {00410690 push ebp00410691 mov ebp,esp00410693 Sub esp,40h00410696 push ebx00410697 push esi0041 0698 Push edi00410699 Lea edi,[ebp-40h]0041069c mov ECX,10H004106A1 mov eax,0cccccccch004106a6 rep stos DWORD ptr [edi]4:strcpy (szbuf, "Hello World"); 004106a8 push offset string ' Hello World ' (00426ee8) 0041         06AD mov eax,dword ptr [ebp+8]004106b0 push eax004106b1 call strcpy (004041a0) 004106b6 add esp,85:}004106b9 pop edi004106ba pop esi004106bb pop ebx004106bc add es         P,40H004106BF CMP ebp,esp004106c1 call __CHKESP (004107d0) 004106c6 mov esp,ebp004106c8 pop EBP004106C9 ret7:char* Retarray () 8: {004106d0 push EBP004106D1 mov ebp,esp004106d3 s UB ESP,4CH004106D6 Push Ebx004106d7 push esi004106d8 push edi004106d9 Lea EDI        , [EBP-4CH]004106DC mov ecx,13h004106e1 mov eax,0cccccccch004106e6 rep stos dword ptr [edi]9: Char szbuff[] = {"HelLo World "};004106e8 mov eax,[string" Hello World "(00426ee8)]004106ed mov dword ptr [ebp-0ch],eax00410   6F0 mov ecx,dword ptr [string "Hello World" +4 (00426EEC)]004106f6 mov dword ptr [EBP-8],ECX004106F9 mov Edx,dword ptr [string "Hello World" +8 (00426EF0)]004106FF mov dword ptr [Ebp-4],edx10:return         szbuff;00410702 Lea eax,[ebp-0ch]11:}00410705 pop edi00410706 pop esi00410707 pop ebx00410708 mov esp,ebp0041070a pop ebp0041070b ret1: #include <stdio.h>2:3: int G_nar          Ray[5] = {1, 2, 3, 4, 5};4:int main () 5: {00401210 push ebp00401211 mov ebp,esp00401213 Sub esp,44h00401216 push ebx00401217 push esi00401218 push edi00401219 Lea edi,[        EBP-44H]0040121C mov ecx,11h00401221 mov eax,0cccccccch00401226 rep stos dword ptr [edi]6: int *pint = g_narray;00401228 mov dword ptr [Ebp-4],offset G_narray (00428A30) Global array address is not in the stack 7:do8: {9:printf        ("%d \ n", *pint); 0040122F mov eax,dword ptr [ebp-4]00401232 mov ecx,dword ptr [eax]00401234 push         ecx00401235 Push offset string "%d \ n" (0042603c) 0040123A call printf (00401460) 0040123F add                                esp,810: ++pint;00401242 mov edx,dword ptr [ebp-4]00401245 add edx,4 Pointer + + is the corresponding number of bytes added 00401248 mov dword ptr [ebp-4],edx11:}while (PInt < G_narray + 5); 0040124B cm P DWORD ptr [Ebp-4],offset g_narray+14h (00428a44) 00401252 jb main+1fh (0040122f) 12:return 0;004   01254 xor eax,eax13:}00401256 pop edi00401257 pop esi00401258 pop ebx00401259 Add ESP,44H0040125C cmp ebp,esp0040125e call __CHKESP (00401370) 00401263 mov esp,ebp 00401265 Pop Ebp00401266 Ret3:int Main () 4: {00401290 push ebp00401291 mov ebp,esp00401293 sub ESP, 48h00401296 push ebx00401297 push esi00401298 push edi00401299 Lea edi,[ebp-48h]00401 29C mov ECX,12H004012A1 mov eax,0cccccccch004012a6 rep stos dword ptr [Edi]5:int NOne, n   TWO;6:SCANF ("%d%d", &none, &ntwo); 004012a8 Lea EAX,[EBP-8]004012AB Push EAX004012AC        Lea ECX,[EBP-4]004012AF push ecx004012b0 push offset string "%d%d" (00429044) 004012b5 call         scanf (004015a0) 004012BA add esp,0ch7:static int g_snarray[5] = {nOne, ntwo, 0};004012BD xor         EDX,EDX004012BF mov dl,byte ptr [' main ':: ' 2 ':: $S 1 (0042f028)] static array compilation period determines storage space 004012c5 and EDX,1004012C8 Test EDX,EDX004012CA jne main+70h (00401300) 004012CC mov al,[' main ':: ' 2 ':: $S 1             (0042f028)] Here is the compiler doing the corresponding memory tag 004012d1 or AL,1004012D3 mov [' main ':: ' 2 ':: $S 1 (0042f028)],al at the first address 004012D8 mov ecx,dword ptr [ebp-4]004012db mov dword ptr [' main ':: ' 2 ':: $S 1+4 (0042f02c)],ecx 0042f0    2c is its memory address 004012E1 mov edx,dword ptr [ebp-8]004012e4 mov dword ptr [' main ':: ' 2 ':: $S 1+8 (0042f030)],edx    Indirect assignment 004012EA mov DWORD ptr [' main ':: ' 2 ':: $S 1+0ch (0042f034)],0 Direct Assignment 0004012f4 xor EAX,EAX004012F6        mov [' main ':: ' 2 ':: $S 1+10h (0042f038)],EAX004012FB mov [' main ':: ' 2 ':: $S 1+14h (0042f03c)],eax8: Return 0;00401300 xor eax,eax9:}00401302 pop edi00401303 pop esi00401304 pop E         bx00401305 Add esp,48h00401308 cmp ebp,esp0040130a call __CHKESP (00401430) 0040130F mov esp,ebp00401311 Pop ebp00401312 ret Now this value changes to 0042f0280042f01a  xx xx xx xx 00  .... 0042f021  00 00 00 00 00 XX 00  ... 0042f028  xx xx xx xx 00  .... 0042f02f  xx xx xx xx 00  .... 0042f036  xx xx xx xx 00  .... 0042f03d  xx xx xx xx 00  .... 0042f044  xx xx xx xx 00  .... After the completion of 0042f01a  xx xx xx 00  .... 0042f021  xx xx xx xx 00  ....  0042f028  0F xx 00  ..... Mark 1 NOne ntwo 670042f02f  xx, xx 00 . C..... 0042f036  xx xx xx xx 00  .... 0042f03d  xx xx xx xx 00  ....  0042f044  xx xx xx xx 00  ....
Disassembly examples

1: #include <stdio.h>2:3: int main () 4: {004016d0 push EBP004016D1 mov ebp,esp004016d3 s UB ESP,6CH004016D6 Push Ebx004016d7 push esi004016d8 push edi004016d9 Lea EDI        , [EBP-6CH]004016DC mov ecx,1bh004016e1 mov eax,0cccccccch004016e6 rep stos dword ptr [edi]5:         int nIndex = 1;004016e8 mov dword ptr [Ebp-4],16:int narray[9] = {1, 2, 3, 0};004016EF mov   DWORD ptr [EBP-28H],1004016F6 mov dword ptr [EBP-24H],2004016FD mov dword ptr [ebp-20h],300401704 mov dword ptr [ebp-1ch],00040170b XOR eax,eax0040170d mov dword ptr [ebp-18h],eax00401710 m OV DWORD ptr [ebp-14h],eax00401713 mov dword ptr [ebp-10h],eax00401716 mov dword ptr [ebp-0ch]   , eax00401719 mov dword ptr [ebp-8],eax7:int *pint = narray;0040171c Lea ecx,[ebp-28h]0040171f MOV dword ptr[Ebp-2ch],ecx8:printf ("%d\n", Narray[-1]); 00401722 Lea edx,[ebp-28h]00401725 mov eax,dword PT R [edx-4]00401728 Push eax00401729 push offset string "%d\n" (0042901c) 0040172E call printf (00 4018E0) 00401733 Add esp,89:printf ("%d\n", Narray[nindex]); 00401736 mov ecx,dword ptr [ebp-4]0 0401739 mov edx,dword ptr [ebp+ecx*4-28h]0040173d push edx0040173e push offset string "%d\n" ( 0042901C) 00401743 call printf (004018e0) 00401748 add esp,810:printf ("%d\n", Pint[nindex-2]); 0 040174B mov eax,dword ptr [ebp-4]0040174e mov ecx,dword ptr [ebp-2ch]00401751 mov edx,dword PTR [ecx+eax*4-8]00401755 Push edx00401756 push offset string "%d\n" (0042901c) 0040175B Call PR         intf (004018E0) 00401760 add Esp,811:return 0;00401763 xor eax,eax12:}00401765 pop       edi00401766 Pop  esi00401767 pop ebx00401768 Add esp,6ch0040176b cmp ebp,esp0040176d call __chkesp (00401960) 00401772 mov esp,ebp00401774 pop ebp00401775 ret


An array of CPP disassembly

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.