#include <stdio.h>
void a_1()
{
/*80484d0: 55 push %ebp
80484d1: 89 e5 mov %esp,%ebp
80484d3: 57 push %edi
80484d4: 56 push %esi
80484d5: 53 push %ebx
80484d6: 83 ec 4c sub $0x4c,%esp
80484d9: c7 45 d4 01 00 00 00 movl $0x1,-0x2c(%ebp)
80484e0: c7 45 d0 02 00 00 00 movl $0x2,-0x30(%ebp)*/
int j = 1;
int i = 2;
/*80484e7: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
80484ee: 8b 45 e4 mov -0x1c(%ebp),%eax
80484f1: 89 45 e0 mov %eax,-0x20(%ebp)
80484f4: 8b 45 e0 mov -0x20(%ebp),%eax
80484f7: 89 45 dc mov %eax,-0x24(%ebp)
80484fa: 8b 45 dc mov -0x24(%ebp),%eax
80484fd: 89 45 d8 mov %eax,-0x28(%ebp)*/
int a[4];
a[0] = a[1] = a[2] = a[3] = 0;
/*8048500: 8b 45 d4 mov -0x2c(%ebp),%eax
8048503: 89 44 24 04 mov %eax,0x4(%esp)
8048507: c7 04 24 74 88 04 08 movl $0x8048874,(%esp)
804850e: e8 7d fe ff ff call 8048390 <printf@plt>*/
printf("%d\n", j);
/*8048513: 8d 45 d4 lea -0x2c(%ebp),%eax // eax = &j
8048516: 89 44 24 04 mov %eax,0x4(%esp) // esp+4 = &j
804851a: c7 04 24 74 88 04 08 movl $0x8048874,(%esp)
8048521: e8 6a fe ff ff call 8048390 <printf@plt>*/
printf("%x\n", &j);
/*8048526: 8b 45 d4 mov -0x2c(%ebp),%eax // eax = j = 2
8048529: 8d 78 14 lea 0x14(%eax),%edi // edi = j+0x14
804852c: 8b 45 d4 mov -0x2c(%ebp),%eax // eax = j
804852f: 8d 70 10 lea 0x10(%eax),%esi // esi = j+0x10
8048532: 8b 45 d4 mov -0x2c(%ebp),%eax
8048535: 8d 58 0c lea 0xc(%eax),%ebx // ebx = j+0xc
8048538: 8b 45 d4 mov -0x2c(%ebp),%eax
804853b: 8d 48 08 lea 0x8(%eax),%ecx // ecx = j+0x8
804853e: 8b 45 d4 mov -0x2c(%ebp),%eax
8048541: 8d 50 04 lea 0x4(%eax),%edx // edx = j+4
8048544: 8b 45 d4 mov -0x2c(%ebp),%eax // eax = j
8048547: 89 7c 24 18 mov %edi,0x18(%esp)
804854b: 89 74 24 14 mov %esi,0x14(%esp)
804854f: 89 5c 24 10 mov %ebx,0x10(%esp)
8048553: 89 4c 24 0c mov %ecx,0xc(%esp)
8048557: 89 54 24 08 mov %edx,0x8(%esp)
804855b: 89 44 24 04 mov %eax,0x4(%esp)
804855f: c7 04 24 7c 88 04 08 movl $0x804887c,(%esp)
8048566: e8 25 fe ff ff call 8048390 <printf@plt>*/
printf("%d %d %d %d %d %d\n", j, j+4, j+8, j+12, j+16, j+20);
/*804856b: 8b 45 d4 mov -0x2c(%ebp),%eax
804856e: 89 45 d8 mov %eax,-0x28(%ebp)*/
a[0] = j;
/*8048571: 8b 45 d4 mov -0x2c(%ebp),%eax
8048574: 83 c0 04 add $0x4,%eax
8048577: 89 45 dc mov %eax,-0x24(%ebp)*/
a[1] = j+4;
/*804857a: 8b 45 d4 mov -0x2c(%ebp),%eax
804857d: 83 c0 08 add $0x8,%eax
8048580: 89 45 e0 mov %eax,-0x20(%ebp)*/
a[2] = j+8;
/*8048583: 8b 45 d4 mov -0x2c(%ebp),%eax
8048586: 83 c0 0c add $0xc,%eax
8048589: 89 45 e4 mov %eax,-0x1c(%ebp)*/
a[3] = j+0xc;
/*804858c: 8b 45 e4 mov -0x1c(%ebp),%eax
804858f: 89 44 24 10 mov %eax,0x10(%esp)
8048593: 8b 45 e0 mov -0x20(%ebp),%eax
8048596: 89 44 24 0c mov %eax,0xc(%esp)
804859a: 8b 45 dc mov -0x24(%ebp),%eax
804859d: 89 44 24 08 mov %eax,0x8(%esp)
80485a1: 8b 45 d8 mov -0x28(%ebp),%eax
80485a4: 89 44 24 04 mov %eax,0x4(%esp)
80485a8: c7 04 24 9b 88 04 08 movl $0x804889b,(%esp)
80485af: e8 dc fd ff ff call 8048390 <printf@plt>*/
printf("%d %d %d %d\n", a[0], a[1], a[2], a[3]);
/*80485b4: 8d 45 d0 lea -0x30(%ebp),%eax
80485b7: 89 45 d4 mov %eax,-0x2c(%ebp)*/
j = &i;
/*80485ba: 8d 45 d0 lea -0x30(%ebp),%eax
80485bd: 89 44 24 04 mov %eax,0x4(%esp)
80485c1: c7 04 24 a8 88 04 08 movl $0x80488a8,(%esp)
80485c8: e8 c3 fd ff ff call 8048390 <printf@plt>*/
printf("%x\n", i);
/*80485cd: 8b 45 d4 mov -0x2c(%ebp),%eax
80485d0: 89 44 24 04 mov %eax,0x4(%esp)
80485d4: c7 04 24 74 88 04 08 movl $0x8048874,(%esp)
80485db: e8 b0 fd ff ff call 8048390 <printf@plt>*/
printf("%x\n", j);
/*80485e0: 8b 45 d4 mov -0x2c(%ebp),%eax
80485e3: 8b 00 mov (%eax),%eax
80485e5: 89 44 24 04 mov %eax,0x4(%esp)
80485e9: c7 04 24 74 88 04 08 movl $0x8048874,(%esp)
80485f0: e8 9b fd ff ff call 8048390 <printf@plt>*/
printf("%d\n", *(int*)j);
/*80485f5: 83 c4 4c add $0x4c,%esp
80485f8: 5b pop %ebx
80485f9: 5e pop %esi
80485fa: 5f pop %edi
80485fb: 5d pop %ebp
80485fc: c3 ret */
}
void a_0()
{
/*80485fd: 55 push %ebp
80485fe: 89 e5 mov %esp,%ebp
8048600: 57 push %edi
8048601: 56 push %esi
8048602: 53 push %ebx
8048603: 83 ec 4c sub $0x4c,%esp
8048606: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp)*/
int j = 0;
/*804860d: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
8048614: 8b 45 e4 mov -0x1c(%ebp),%eax
8048617: 89 45 e0 mov %eax,-0x20(%ebp)
804861a: 8b 45 e0 mov -0x20(%ebp),%eax
804861d: 89 45 dc mov %eax,-0x24(%ebp)
8048620: 8b 45 dc mov -0x24(%ebp),%eax
8048623: 89 45 d8 mov %eax,-0x28(%ebp)*/
int a[4];
a[0] = a[1] = a[2] = a[3] = 0;
/*8048626: 8b 45 d4 mov -0x2c(%ebp),%eax
8048629: 89 44 24 04 mov %eax,0x4(%esp)
804862d: c7 04 24 74 88 04 08 movl $0x8048874,(%esp)
8048634: e8 57 fd ff ff call 8048390 <printf@plt>*/
printf("%d\n", j);
/*8048639: 8d 45 d4 lea -0x2c(%ebp),%eax
804863c: 89 44 24 04 mov %eax,0x4(%esp)
8048640: c7 04 24 74 88 04 08 movl $0x8048874,(%esp)
8048647: e8 44 fd ff ff call 8048390 <printf@plt>*/
printf("%x\n", &j);
/*804864c: 8b 45 d4 mov -0x2c(%ebp),%eax
804864f: 8d 78 14 lea 0x14(%eax),%edi // edi = j+0x14
8048652: 8b 45 d4 mov -0x2c(%ebp),%eax
8048655: 8d 70 10 lea 0x10(%eax),%esi // esi = j+0x10
8048658: 8b 45 d4 mov -0x2c(%ebp),%eax
804865b: 8d 58 0c lea 0xc(%eax),%ebx // ebx = j+0xc
804865e: 8b 45 d4 mov -0x2c(%ebp),%eax
8048661: 8d 48 08 lea 0x8(%eax),%ecx // ecx = j+0x8
8048664: 8b 45 d4 mov -0x2c(%ebp),%eax
8048667: 8d 50 04 lea 0x4(%eax),%edx // edx = j+0x4
804866a: 8b 45 d4 mov -0x2c(%ebp),%eax // eax = j;
804866d: 89 7c 24 18 mov %edi,0x18(%esp)
8048671: 89 74 24 14 mov %esi,0x14(%esp)
8048675: 89 5c 24 10 mov %ebx,0x10(%esp)
8048679: 89 4c 24 0c mov %ecx,0xc(%esp)
804867d: 89 54 24 08 mov %edx,0x8(%esp)
8048681: 89 44 24 04 mov %eax,0x4(%esp)
8048685: c7 04 24 7c 88 04 08 movl $0x804887c,(%esp)
804868c: e8 ff fc ff ff call 8048390 <printf@plt>*/
printf("%d %d %d %d %d %d\n", j , j+4, j+8, j+0xc, j+0x10, j+0x14);
/*8048691: 8b 45 d4 mov -0x2c(%ebp),%eax
8048694: 89 45 d8 mov %eax,-0x28(%ebp)*/
a[0] = j;
/*8048697: 8b 45 d4 mov -0x2c(%ebp),%eax
804869a: 83 c0 04 add $0x4,%eax
804869d: 89 45 dc mov %eax,-0x24(%ebp)*/
a[1] = j+4;
/*80486a0: 8b 45 d4 mov -0x2c(%ebp),%eax
80486a3: 83 c0 08 add $0x8,%eax
80486a6: 89 45 e0 mov %eax,-0x20(%ebp)*/
a[2] = j+8;
/*80486a9: 8b 45 d4 mov -0x2c(%ebp),%eax
80486ac: 83 c0 0c add $0xc,%eax
80486af: 89 45 e4 mov %eax,-0x1c(%ebp)*/
a[3] = j+0xc;
/*80486b2: 8b 45 e4 mov -0x1c(%ebp),%eax
80486b5: 89 44 24 10 mov %eax,0x10(%esp)
80486b9: 8b 45 e0 mov -0x20(%ebp),%eax
80486bc: 89 44 24 0c mov %eax,0xc(%esp)
80486c0: 8b 45 dc mov -0x24(%ebp),%eax
80486c3: 89 44 24 08 mov %eax,0x8(%esp)
80486c7: 8b 45 d8 mov -0x28(%ebp),%eax
80486ca: 89 44 24 04 mov %eax,0x4(%esp)
80486ce: c7 04 24 9b 88 04 08 movl $0x804889b,(%esp)
80486d5: e8 b6 fc ff ff call 8048390 <printf@plt>*/
printf("%d %d %d %d\n", a[0], a[1], a[2], a[3]);
/*80486da: 83 c4 4c add $0x4c,%esp
80486dd: 5b pop %ebx
80486de: 5e pop %esi
80486df: 5f pop %edi
80486e0: 5d pop %ebp
80486e1: c3 ret*/
}
void a_3()
{
/*80486e2: 55 push %ebp
80486e3: 89 e5 mov %esp,%ebp
80486e5: 57 push %edi
80486e6: 56 push %esi
80486e7: 53 push %ebx
80486e8: 83 ec 4c sub $0x4c,%esp
80486eb: c7 45 d4 03 00 00 00 movl $0x3,-0x2c(%ebp)*/
int j = 0;
/*80486f2: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
80486f9: 8b 45 e4 mov -0x1c(%ebp),%eax
80486fc: 89 45 e0 mov %eax,-0x20(%ebp)
80486ff: 8b 45 e0 mov -0x20(%ebp),%eax
8048702: 89 45 dc mov %eax,-0x24(%ebp)
8048705: 8b 45 dc mov -0x24(%ebp),%eax
8048708: 89 45 d8 mov %eax,-0x28(%ebp)*/
int a[4];
a[0] = a[1] = a[2] = a[3] = 0;
/*804870b: 8b 45 d4 mov -0x2c(%ebp),%eax
804870e: 89 44 24 04 mov %eax,0x4(%esp)
8048712: c7 04 24 74 88 04 08 movl $0x8048874,(%esp)
8048719: e8 72 fc ff ff call 8048390 <printf@plt>*/
printf("%d\n", j);
/* 804871e: 8d 45 d4 lea -0x2c(%ebp),%eax
8048721: 89 44 24 04 mov %eax,0x4(%esp)
8048725: c7 04 24 74 88 04 08 movl $0x8048874,(%esp)
804872c: e8 5f fc ff ff call 8048390 <printf@plt>*/
printf("%d\n", &j);
/*8048731: 8b 45 d4 mov -0x2c(%ebp),%eax
8048734: 8d 78 14 lea 0x14(%eax),%edi
8048737: 8b 45 d4 mov -0x2c(%ebp),%eax
804873a: 8d 70 10 lea 0x10(%eax),%esi
804873d: 8b 45 d4 mov -0x2c(%ebp),%eax
8048740: 8d 58 0c lea 0xc(%eax),%ebx
8048743: 8b 45 d4 mov -0x2c(%ebp),%eax
8048746: 8d 48 08 lea 0x8(%eax),%ecx
8048749: 8b 45 d4 mov -0x2c(%ebp),%eax
804874c: 8d 50 04 lea 0x4(%eax),%edx
804874f: 8b 45 d4 mov -0x2c(%ebp),%eax
8048752: 89 7c 24 18 mov %edi,0x18(%esp)
8048756: 89 74 24 14 mov %esi,0x14(%esp)
804875a: 89 5c 24 10 mov %ebx,0x10(%esp)
804875e: 89 4c 24 0c mov %ecx,0xc(%esp)
8048762: 89 54 24 08 mov %edx,0x8(%esp)
8048766: 89 44 24 04 mov %eax,0x4(%esp)
804876a: c7 04 24 7c 88 04 08 movl $0x804887c,(%esp)
8048771: e8 1a fc ff ff call 8048390 <printf@plt>*/
printf("%d %d %d %d %d %d\n", j , j+4, j+8, j+0xc, j+0x10, j+0x14);
/*8048776: 8b 45 d4 mov -0x2c(%ebp),%eax
8048779: 89 45 d8 mov %eax,-0x28(%ebp)
804877c: 8b 45 d4 mov -0x2c(%ebp),%eax
804877f: 83 c0 04 add $0x4,%eax
8048782: 89 45 dc mov %eax,-0x24(%ebp)
8048785: 8b 45 d4 mov -0x2c(%ebp),%eax
8048788: 83 c0 08 add $0x8,%eax
804878b: 89 45 e0 mov %eax,-0x20(%ebp)
804878e: 8b 45 d4 mov -0x2c(%ebp),%eax
8048791: 83 c0 0c add $0xc,%eax
8048794: 89 45 e4 mov %eax,-0x1c(%ebp)
8048797: 8b 45 e4 mov -0x1c(%ebp),%eax
804879a: 89 44 24 10 mov %eax,0x10(%esp)
804879e: 8b 45 e0 mov -0x20(%ebp),%eax
80487a1: 89 44 24 0c mov %eax,0xc(%esp)
80487a5: 8b 45 dc mov -0x24(%ebp),%eax
80487a8: 89 44 24 08 mov %eax,0x8(%esp)
80487ac: 8b 45 d8 mov -0x28(%ebp),%eax
80487af: 89 44 24 04 mov %eax,0x4(%esp)
80487b3: c7 04 24 9b 88 04 08 movl $0x804889b,(%esp)
80487ba: e8 d1 fb ff ff call 8048390 <printf@plt>*/
printf("%d %d %d %d\n", a[0], a[1], a[2], a[3]);
/*80487bf: 83 c4 4c add $0x4c,%esp
80487c2: 5b pop %ebx
80487c3: 5e pop %esi
80487c4: 5f pop %edi
80487c5: 5d pop %ebp
80487c6: c3 ret */
}
int main()
{
/*qA80487c7: 55 push %ebp
80487c8: 89 e5 mov %esp,%ebp
80487ca: 83 e4 f0 and $0xfffffff0,%esp
80487cd: e8 fe fc ff ff call 80484d0 <a_1>*/
a_1();
//80487d2: e8 26 fe ff ff call 80485fd <a_0>
a_0();
//80487d7: e8 06 ff ff ff call 80486e2 <a_3>
a_3();
/*80487dc: c9 leave
80487dd: c3 ret
80487de: 66 90 xchg %ax,%ax*/
}
// code
void a_1()
{
int *a = 1;
int byte1, byte2, byte3, byte4;
int b = 2;
byte1 = byte2 = byte3 = byte4 = 0;
printf("a=%x\n", a); // 1
printf("a=%x\n", &a); // b7d24708
printf("0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n", &a[0], &a[1], &a[2], &a[3], &a[4], &a[5]); // 0x1 0x5 0x9 0xd 0x11 0x15
//printf("%x %x %x %x\n", a[0], a[1], a[2], a[3]); // Segmentation fault (core dumped)
byte1 = (char *)&a[0];
byte2 = (char *)&a[1];
byte3 = (char *)&a[2];
byte4 = (char *)&a[3];
printf("%x %x %x %x\n", byte1, byte2, byte3, byte4); // 1 5 9 d
a = &b;
printf("b=%x\n", &b); // b7d246f4
printf("a=%x\n", a); // b7d246f4
printf("a=%x\n", *a); // 2
}
void a_0()
{
int *a = 0;
int byte1, byte2, byte3, byte4;
byte1 = byte2 = byte3 = byte4 = 0;
printf("a=%x\n", a); // 0 指向地址0
//printf("a=%d\n", *a); // Segmentation fault (core dumped) 取地址0上的数据,报错
printf("a=%x\n", &a); // c03f1498
printf("0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n", &a[0], &a[1], &a[2], &a[3], &a[4], &a[5]); // 0x0 0x4 0x8 0xc 0x10 0x14
//printf("%x %x %x %x\n", a[0], a[1], a[2], a[3]); // Segmentation fault (core dumped)
byte1 = (char *)&a[0];
byte2 = (char *)&a[1];
byte3 = (char *)&a[2];
byte4 = (char *)&a[3];
printf("%x %x %x %x\n", byte1, byte2, byte3, byte4); // 0 4 8 c
}
void a_3()
{
int *a = 3;
int byte1, byte2, byte3, byte4;
byte1 = byte2 = byte3 = byte4 = 0;
printf("a=%x\n", a); // 3
printf("a=%x\n", &a); // ce340a48
printf("0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n", &a[0], &a[1], &a[2], &a[3], &a[4], &a[5]); // 0x3 0x7 0xb 0xf 0x13 0x17
//printf("%x %x %x %x\n", a[0], a[1], a[2], a[3]); // Segmentation fault (core dumped)
byte1 = (char *)&a[0];
byte2 = (char *)&a[1];
byte3 = (char *)&a[2];
byte4 = (char *)&a[3];
printf("%x %x %x %x\n", byte1, byte2, byte3, byte4); // 3 7 b f
}
void main()
{
a_1();
a_0();
a_3();
}