#include
#include <stdlib.h>
#include
void a_1()
{
/*4005fc: a9bd7bfd stp x29, x30, [sp, #-48]!
400600: 910003fd mov x29, sp
400604: d2800020 mov x0, #0x1 // #1
400608: f9000fa0 str x0, [x29, #24]*/
long j = 1;
/*40060c: 52800040 mov w0, #0x2 // #2
400610: b90017a0 str w0, [x29, #20]*/
int i = 2;
/*400614: b9002fbf str wzr, [x29, #44] // [x29+44] = 0
400618: b9402fa0 ldr w0, [x29, #44] // w0 = 0
40061c: b9002ba0 str w0, [x29, #40] // [x29+40] = 0
400620: b9402ba0 ldr w0, [x29, #40] // w0 = 0
400624: b90027a0 str w0, [x29, #36] // [x29+36] = 0
400628: b94027a0 ldr w0, [x29, #36] // w0 = 0
40062c: b90023a0 str w0, [x29, #32] // [x29+32] = 0*/
int a[4];
a[0] = a[1] = a[2] = a[3] = 0;
/*400630: f9400fa1 ldr x1, [x29, #24] // x1 = [x29+24] = 1
400634: 90000000 adrp x0, 400000 <_init-0x480>
400638: 91266000 add x0, x0, #0x998
40063c: 97ffffad bl 4004f0
printf("%ld\n", j);
/*400640: 910063a1 add x1, x29, #0x18
400644: 90000000 adrp x0, 400000 <_init-0x480>
400648: 91266000 add x0, x0, #0x998
40064c: 97ffffa9 bl 4004f0
printf("%p\n", &j);
/*400650: f9400fa1 ldr x1, [x29, #24] // x1 = j = 1
400654: f9400fa0 ldr x0, [x29, #24] // x0 = j = 1
400658: 91001002 add x2, x0, #0x4 // x2 = 1 + 0x4 = 5
40065c: f9400fa0 ldr x0, [x29, #24] // x0 = 1
400660: 91002003 add x3, x0, #0x8 // x3 = 1+8 = 9
400664: f9400fa0 ldr x0, [x29, #24] // x0 = 1
400668: 91003004 add x4, x0, #0xc // x4 = 14
40066c: f9400fa0 ldr x0, [x29, #24] // x0 = 1
400670: 91004005 add x5, x0, #0x10 // x5 = 1 + 0x10 = 17
400674: f9400fa0 ldr x0, [x29, #24] // [x29+24] = 1
400678: 91005006 add x6, x0, #0x14 // x6 = 1+0x14 = 21
40067c: 90000000 adrp x0, 400000 <_init-0x480>
400680: 91268000 add x0, x0, #0x9a0
400684: 97ffff9b bl 4004f0
printf("%ld %ld %ld %ld %ld %ld\n", j, j+0x4, j+8, j+12, j+16, j+20);
/*400688: f9400fa0 ldr x0, [x29, #24] // x0 = 1
40068c: b90023a0 str w0, [x29, #32] // [x29+32] = 1*/
a[0] = j;
/*400690: f9400fa0 ldr x0, [x29, #24] // x0 = 1
400694: 91001000 add x0, x0, #0x4 // x0 = 1+0x4 = 5
400698: b90027a0 str w0, [x29, #36] // [x29+36] = 5*/
a[1] = j + 0x4;
/*40069c: f9400fa0 ldr x0, [x29, #24] // x0 = 1
4006a0: 91002000 add x0, x0, #0x8 // x0 = 1 + 8
4006a4: b9002ba0 str w0, [x29, #40] // [x29+40] = 9*/
a[2] = j + 0x8;
/*4006a8: f9400fa0 ldr x0, [x29, #24] // x0 = 1
4006ac: 91003000 add x0, x0, #0xc // x0 = 1 + 0xc
4006b0: b9002fa0 str w0, [x29, #44] // [x29+44] = 0xd*/
a[3] = j + 0xc;
/*4006b4: 90000000 adrp x0, 400000 <_init-0x480>
4006b8: 91270000 add x0, x0, #0x9c0
4006bc: b9402fa4 ldr w4, [x29, #44] // w2 = 0xd
4006c0: b9402ba3 ldr w3, [x29, #40] // w3 = 9
4006c4: b94027a2 ldr w2, [x29, #36] // w2 = 5
4006c8: b94023a1 ldr w1, [x29, #32] // w1 = 1
4006cc: 97ffff89 bl 4004f0
printf("%d %d %d %d\n", a[0], a[1], a[2], a[3]);
/*4006d0: 910053a0 add x0, x29, #0x14 // x0 = x29+20
4006d4: f9000fa0 str x0, [x29, #24] // [x29+24] = x29+20 = &i */
j = (long)&i;
/*4006d8: 910053a1 add x1, x29, #0x14 // x1 = x29+20
4006dc: 90000000 adrp x0, 400000 <_init-0x480>
4006e0: 91274000 add x0, x0, #0x9d0
4006e4: 97ffff83 bl 4004f0
printf("%lx\n", (long)&i);
/*4006e8: f9400fa1 ldr x1, [x29, #24] // x1 = &i
4006ec: 90000000 adrp x0, 400000 <_init-0x480>
4006f0: 91266000 add x0, x0, #0x998
4006f4: 97ffff7f bl 4004f0
printf("%lx\n", j);
/*4006f8: f9400fa0 ldr x0, [x29, #24] // x0 = &i
4006fc: b9400001 ldr w1, [x0] // w1 = 2
400700: 90000000 adrp x0, 400000 <_init-0x480>
400704: 91266000 add x0, x0, #0x998
400708: 97ffff7a bl 4004f0
printf("%d\n", *(int*)j);
/*40070c: d503201f nop
400710: a8c37bfd ldp x29, x30, [sp], #48
400714: d65f03c0 ret*/
}
void a_0()
{
/*400718: a9bd7bfd stp x29, x30, [sp, #-48]!
40071c: 910003fd mov x29, sp
400720: f9000fbf str xzr, [x29, #24]
400724: b9002fbf str wzr, [x29, #44]*/
long j = 0;
int i = 0;
/*400728: b9402fa0 ldr w0, [x29, #44]
40072c: b9002ba0 str w0, [x29, #40]
400730: b9402ba0 ldr w0, [x29, #40]
400734: b90027a0 str w0, [x29, #36]
400738: b94027a0 ldr w0, [x29, #36]
40073c: b90023a0 str w0, [x29, #32]*/
int a[3];
a[0] = a[1] = a[2] = i;
/*400740: f9400fa1 ldr x1, [x29, #24]
400744: 90000000 adrp x0, 400000 <_init-0x480>
400748: 91266000 add x0, x0, #0x998
40074c: 97ffff69 bl 4004f0
printf("%ld\n", j);
/*400750: 910063a1 add x1, x29, #0x18
400754: 90000000 adrp x0, 400000 <_init-0x480>
400758: 91266000 add x0, x0, #0x998
40075c: 97ffff65 bl 4004f0
printf("%ld\n", (long)&j);
/*400760: f9400fa1 ldr x1, [x29, #24] // x1 = 0
400764: f9400fa0 ldr x0, [x29, #24] // x0 = 0
400768: 91001002 add x2, x0, #0x4 // x2 = 0+4
40076c: f9400fa0 ldr x0, [x29, #24] // x0 = 0
400770: 91002003 add x3, x0, #0x8 // x3 = 0+8
400774: f9400fa0 ldr x0, [x29, #24] // x0 = 0
400778: 91003004 add x4, x0, #0xc // x4 = 0+c
40077c: f9400fa0 ldr x0, [x29, #24] // x0 = 0
400780: 91004005 add x5, x0, #0x10 // x5 = 0+0x10
400784: f9400fa0 ldr x0, [x29, #24] // x0 = 0
400788: 91005006 add x6, x0, #0x14 // x6 = 0+0x14
40078c: 90000000 adrp x0, 400000 <_init-0x480>
400790: 91268000 add x0, x0, #0x9a0
400794: 97ffff57 bl 4004f0
printf("%ld %ld %ld %ld %ld %ld\n", j, j+4, j+8, j+12, j+16, j+20);
/*400798: f9400fa0 ldr x0, [x29, #24] // x0 = 0
40079c: b90023a0 str w0, [x29, #32] // [x29+32] = 0*/
a[0] = j;
/*4007a0: f9400fa0 ldr x0, [x29, #24] // x0 = 0
4007a4: 91001000 add x0, x0, #0x4 // x0 = 0+4
4007a8: b90027a0 str w0, [x29, #36] // [x29+36] = 4*/
a[1] = j+4;
/*4007ac: f9400fa0 ldr x0, [x29, #24] // x0 = 0
4007b0: 91002000 add x0, x0, #0x8 // x0 = 0+8
4007b4: b9002ba0 str w0, [x29, #40] // [x29+40] = 8*/
a[2] = j+8;
/*4007b8: f9400fa0 ldr x0, [x29, #24] // x0 = 0
4007bc: 91003000 add x0, x0, #0xc // x0 = 0+c
4007c0: b9002fa0 str w0, [x29, #44] // [x29+44] = 12*/
i = j+12;
/*4007c4: 90000000 adrp x0, 400000 <_init-0x480>
4007c8: 91270000 add x0, x0, #0x9c0
4007cc: b9402fa4 ldr w4, [x29, #44]
4007d0: b9402ba3 ldr w3, [x29, #40]
4007d4: b94027a2 ldr w2, [x29, #36]
4007d8: b94023a1 ldr w1, [x29, #32]
4007dc: 97ffff45 bl 4004f0
printf("%d %d %d %d\n", a[0], a[1], a[2], i);
/*4007e0: d503201f nop
4007e4: a8c37bfd ldp x29, x30, [sp], #48
4007e8: d65f03c0 ret*/
}
void a_3()
{
/*4007ec: a9bd7bfd stp x29, x30, [sp, #-48]!
4007f0: 910003fd mov x29, sp
4007f4: d2800060 mov x0, #0x3 // #3
4007f8: f9000fa0 str x0, [x29, #24]
4007fc: b9002fbf str wzr, [x29, #44] */
long j = 3;
int i = 0;
/*400800: b9402fa0 ldr w0, [x29, #44]
400804: b9002ba0 str w0, [x29, #40]
400808: b9402ba0 ldr w0, [x29, #40]
40080c: b90027a0 str w0, [x29, #36]
400810: b94027a0 ldr w0, [x29, #36]
400814: b90023a0 str w0, [x29, #32] */
int a[3];
a[0] = a[1] = a[2] = i;
/*400818: f9400fa1 ldr x1, [x29, #24]
40081c: 90000000 adrp x0, 400000 <_init-0x480>
400820: 91266000 add x0, x0, #0x998
400824: 97ffff33 bl 4004f0
printf("%ld\n", j);
/*400828: 910063a1 add x1, x29, #0x18
40082c: 90000000 adrp x0, 400000 <_init-0x480>
400830: 91266000 add x0, x0, #0x998
400834: 97ffff2f bl 4004f0
printf("%ld\n", (long)&j);
/*400838: f9400fa1 ldr x1, [x29, #24] // x1 = j = 3
40083c: f9400fa0 ldr x0, [x29, #24] // x0 = j = 3
400840: 91001002 add x2, x0, #0x4 // x2 = 3+0x4
400844: f9400fa0 ldr x0, [x29, #24] // x0 = 3
400848: 91002003 add x3, x0, #0x8 // x3 = 3+8
40084c: f9400fa0 ldr x0, [x29, #24] // x0
400850: 91003004 add x4, x0, #0xc // x4 = 3+c
400854: f9400fa0 ldr x0, [x29, #24]
400858: 91004005 add x5, x0, #0x10 // x5 = 3+0x10
40085c: f9400fa0 ldr x0, [x29, #24]
400860: 91005006 add x6, x0, #0x14 // x6 = 3+0x14
400864: 90000000 adrp x0, 400000 <_init-0x480>
400868: 91268000 add x0, x0, #0x9a0
40086c: 97ffff21 bl 4004f0
printf("%ld %ld %ld %ld %ld %ld\n", j, j+4, j+8, j+12, j+16, j+20);
/*400870: f9400fa0 ldr x0, [x29, #24] // x0 = j = 3
400874: b90023a0 str w0, [x29, #32] // [x29+32] = 3 */
a[0] = j;
/*400878: f9400fa0 ldr x0, [x29, #24] // x0 = 3
40087c: 91001000 add x0, x0, #0x4 // x0 = 3+4
400880: b90027a0 str w0, [x29, #36] // [x29+36] = 3+4 */
a[1] = j + 4;
/*400884: f9400fa0 ldr x0, [x29, #24]
400888: 91002000 add x0, x0, #0x8
40088c: b9002ba0 str w0, [x29, #40] */
a[2] = j + 8;
/*400890: f9400fa0 ldr x0, [x29, #24]
400894: 91003000 add x0, x0, #0xc
400898: b9002fa0 str w0, [x29, #44] */
i = j + 0xc;
/*40089c: 90000000 adrp x0, 400000 <_init-0x480>
4008a0: 91270000 add x0, x0, #0x9c0
4008a4: b9402fa4 ldr w4, [x29, #44]
4008a8: b9402ba3 ldr w3, [x29, #40]
4008ac: b94027a2 ldr w2, [x29, #36]
4008b0: b94023a1 ldr w1, [x29, #32]
4008b4: 97ffff0f bl 4004f0
printf("%d %d %d %d\n", a[0], a[1], a[2], i);
/*4008b8: d503201f nop
4008bc: a8c37bfd ldp x29, x30, [sp], #48
4008c0: d65f03c0 ret*/
}
int main()
{
/*4008c4: a9bf7bfd stp x29, x30, [sp, #-16]!
4008c8: 910003fd mov x29, sp*/
//4008cc: 97ffff4c bl 4005fc
a_1();
//4008d0: 97ffff92 bl 400718
a_0();
//4008d4: 97ffffc6 bl 4007ec
a_3();
/*4008d8: d503201f nop
4008dc: a8c17bfd ldp x29, x30, [sp], #16
4008e0: d65f03c0 ret
4008e4: 00000000 .inst 0x00000000 ; undefined*/
return 0;
}
// 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();
}