#include <stdio.h>

/*

*(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2,5

&a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int)

int *ptr=(int *)(&a+1);

则ptr实际是&(a[5]),也就是a+5

原因如下:

&a是数组指针,其类型为 int (*)[5];

而指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同。

a是长度为5的int数组指针,所以要加 5*sizeof(int)

所以ptr实际是a[5]

但是prt与(&a+1)类型是不一样的(这点很重要)

所以prt-1只会减去sizeof(int*)

a,&a的地址是一样的,但意思不一样

a是数组首地址,也就是a[0]的地址,&a是对象(数组)首地址,
    
    a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[5].

*/

int array1()
{
    int ar[3][4]  = {{3,2,1,0},{3,2,1,0},{3,2,1,0}};
    int array[100];

array[0] = 1;
    array[1] = 1;
    array[2] = 1;
    array[3] = 1;
    array[4] = 1;
    array[5] = 1;
    array[6] = 1;
    array[7] = 1;
    array[8] = 1;
    array[9] = 1;

}

int array2()
{
    int ar[10];
    int aw[10];
    char ac[10];
}

int array3()
{
    int ar[10];
    int aw[10];
    char ac[10];

ar[0] = 100;
    aw[0] = 50;
    ac[0] = 'a';
    ac[1] = 'b';
    ac[2] = 'c';
    ac[3] = 'd';
    ac[4] = 'e';
    ac[5] = 'f';
    ac[6] = '\0';
}

void array4()
{
    int ar[3][4];

ar[0][0] = 1;
    ar[0][1] = 2;
    ar[0][2] = 3;
    ar[0][3] = 4;
    ar[1][0] = 5;
    ar[1][1] = 6;
    ar[1][2] = 7;
    ar[1][3] = 8;
}

#define COLS    4

int sum2d(int ar[][COLS], int rows);
int sum (int ar[], int n);

int aaa()
{
    int total1, total2, total3;
    int *pt1;
    int (*pt2)[COLS];

pt1 = (int [2]) {10, 20};
    pt2 = (int [2][COLS]) { {1, 2, 3, -9}, {4, 5, 6,-8} };

total1 = sum(pt1, 2);
    total2 = sum2d(pt2, 2);
    total3 = sum((int[]){4,4,4,5,5,5},6);
    printf("total1 = %d\n", total1);    // 30
    printf("total2 = %d\n", total2);    // 4
    printf("total3 = %d\n", total3);    // 27
}

int sum(int ar[], int n)
{
    int i;
    int total = 0;

for (i = 0; i < n; i++)
        total += ar[i];

return total;
}

int sum2d(int ar[][COLS], int rows)
{
    int r;
    int c;
    int tot = 0;

for (r = 0; r < rows; r++)
        for (c = 0; c < COLS; c++)
            tot += ar[r][c];

return tot;
}

int bbb()
{
    int row = 3, col = 4;
    int ary[row][col];
    
    int array(int col, int row, int ary[col][row]);
    int arra2(int ary[col][row], int col, int row);    // not VLA
    
}

int array_cal(void)
{
    int a[5]={1,2,3,4,9};
    int *ptr1 = (int*)(&a + 1);
    int *ptr2 = (int*)((int)a + 1);
    int temp = (int)(&a + 1 );    // &a+1 = &a + sizeof(a) = &a + 5 * sizeof(int),也就是下一个数组的首地址.

//printf("temp - : %d, 0x%x, %x, 0x%x\n", temp, *ptr1, ptr1[-1], *ptr2);

printf("a - 0x%x\n", a);                // 0x859033c0
    printf("a = 0x%x\n", &a);                // 0x859033c0

printf("a - 0x%x\n", a+1);                // 0x859033c4    0x859033c0+sizeof(int) = 0x859033c0+4 = 0x859033c4
    printf("a = 0x%x\n", &a+1);                // 0x859033d4    0x859033d4 - 0x859033c0 = 0x14 = 20 = sizeof(a)

printf("temp - 0x%x\n", temp);            // 0x859033d4    &a + 1
    printf("temp = %p\n", temp);            // 0x859033d4    &a + 1    
    printf("temp = %p\n\n", &temp);            // 0x7ffd859033ac    temp self address

printf("ptr1 - 0x%x, \n", *ptr1);        // 0x0                &a+1 value
    printf("ptr1 - %p\n", *ptr1);            // (nil)            非法地址. 因为是空值,所以没有地址.
    printf("ptr1 - 0x%x\n", ptr1);            // 0x859033d4        &a+1 ---> %x
    printf("ptr1 - %p\n", ptr1);            // 0x7ffd859033d4    &a+1 ---> %p    
    printf("ptr1 - %p\n\n", &ptr1);            // 0x7ffd859033b0    ptr1 self address ---> %p

printf("ptr1 - : 0x%x\n", ptr1[-1]);    // 0x9

//printf("ptr2 - : 0x%x\n", *ptr2);        // Segmentation fault    取非法地址值
    //printf("ptr2 - %p, \n", *ptr2);            // Segmentation fault    非法地址
    printf("ptr2 - %p\n", ptr2);            // 0xffffffff859033c1    指向的地址。0x859033c0 + 1 = 859033c1
    printf("ptr2 - %p\n\n", &ptr2);            // 0x7ffd859033b8        ptr2 self address ---> %p
        
    return 0;
}

int ccc(void)
{
    int array[10] = {11, 15, 20, 25, 30};
    int *p;
    
    p = &array[2];
    printf("%d\n", *p);            // 20 = array[2]
    printf("%d\n", p[-1]);        // 15 = array[1]
    printf("%d\n", *(p-2));        // 11 = array[1]   *(p-2) = p[-2]
    
    printf("%d\n", array[9]);    // 0
    return 0;
}

int main()
{
    aaa();

bbb();

array1();
    array2();
    array3();
    array4();

array_cal();
    ccc();

return 0;
}

arm 反汇编

/*
    x29            0x7ffffff410        549755810832
    x30            0x400c5c            4197468
    sp             0x7ffffff410        0x7ffffff410
    pc             0x4005fc            0x4005fc
*/
00000000004005fc <array1>:
  4005fc:    d10703ff     sub    sp, sp, #0x1c0
  400600:    90000000     adrp    x0, 400000 <_init-0x480>
  400604:    9134c001     add    x1, x0, #0xd30        // x1 = 0x400d30
  400608:    910643e0     add    x0, sp, #0x190        // x0 = 0x7ffffff3e0
  40060c:    a9400c22     ldp    x2, x3, [x1]        // x2 = 0x200000003, x3 = 0x1
  400610:    a9000c02     stp    x2, x3, [x0]
  400614:    a9410c22     ldp    x2, x3, [x1, #16]    // x2 = 0x200000003, x3 = 0x1
  400618:    a9010c02     stp    x2, x3, [x0, #16]
  40061c:    a9420821     ldp    x1, x2, [x1, #32]    // x1 = 0x200000003, x2 = 0x1
  400620:    a9020801     stp    x1, x2, [x0, #32]
  400624:    52800020     mov    w0, #0x1                       // #1
  400628:    b90003e0     str    w0, [sp]
  40062c:    52800020     mov    w0, #0x1                       // #1
  400630:    b90007e0     str    w0, [sp, #4]
  400634:    52800020     mov    w0, #0x1                       // #1
  400638:    b9000be0     str    w0, [sp, #8]
  40063c:    52800020     mov    w0, #0x1                       // #1
  400640:    b9000fe0     str    w0, [sp, #12]
  400644:    52800020     mov    w0, #0x1                       // #1
  400648:    b90013e0     str    w0, [sp, #16]
  40064c:    52800020     mov    w0, #0x1                       // #1
  400650:    b90017e0     str    w0, [sp, #20]
  400654:    52800020     mov    w0, #0x1                       // #1
  400658:    b9001be0     str    w0, [sp, #24]
  40065c:    52800020     mov    w0, #0x1                       // #1
  400660:    b9001fe0     str    w0, [sp, #28]
  400664:    52800020     mov    w0, #0x1                       // #1
  400668:    b90023e0     str    w0, [sp, #32]
  40066c:    52800020     mov    w0, #0x1                       // #1
  400670:    b90027e0     str    w0, [sp, #36]
  400674:    d503201f     nop
  400678:    910703ff     add    sp, sp, #0x1c0
  40067c:    d65f03c0     ret

0000000000400680 <array2>:
  400680:    d10183ff     sub    sp, sp, #0x60
  400684:    d503201f     nop
  400688:    910183ff     add    sp, sp, #0x60
  40068c:    d65f03c0     ret

/*
    x29            0x7ffffff410        549755810832
    x30            0x400c64            4197476
    sp             0x7ffffff410        0x7ffffff410
    pc             0x400690            0x400690
*/
0000000000400690 <array3>:
  400690:    d10183ff     sub    sp, sp, #0x60
  400694:    52800c80     mov    w0, #0x64                      // #100
  400698:    b9003be0     str    w0, [sp, #56]
  40069c:    52800640     mov    w0, #0x32                      // #50
  4006a0:    b90013e0     str    w0, [sp, #16]
  4006a4:    52800c20     mov    w0, #0x61                      // #97
  4006a8:    390003e0     strb    w0, [sp]
  4006ac:    52800c40     mov    w0, #0x62                      // #98
  4006b0:    390007e0     strb    w0, [sp, #1]
  4006b4:    52800c60     mov    w0, #0x63                      // #99
  4006b8:    39000be0     strb    w0, [sp, #2]
  4006bc:    52800c80     mov    w0, #0x64                      // #100
  4006c0:    39000fe0     strb    w0, [sp, #3]
  4006c4:    52800ca0     mov    w0, #0x65                      // #101
  4006c8:    390013e0     strb    w0, [sp, #4]
  4006cc:    52800cc0     mov    w0, #0x66                      // #102
  4006d0:    390017e0     strb    w0, [sp, #5]
  4006d4:    39001bff     strb    wzr, [sp, #6]
  4006d8:    d503201f     nop
  4006dc:    910183ff     add    sp, sp, #0x60
  4006e0:    d65f03c0     ret

00000000004006e4 <array4>:
  4006e4:    d100c3ff     sub    sp, sp, #0x30
  4006e8:    52800020     mov    w0, #0x1                       // #1
  4006ec:    b90003e0     str    w0, [sp]
  4006f0:    52800040     mov    w0, #0x2                       // #2
  4006f4:    b90007e0     str    w0, [sp, #4]
  4006f8:    52800060     mov    w0, #0x3                       // #3
  4006fc:    b9000be0     str    w0, [sp, #8]
  400700:    52800080     mov    w0, #0x4                       // #4
  400704:    b9000fe0     str    w0, [sp, #12]
  400708:    528000a0     mov    w0, #0x5                       // #5
  40070c:    b90013e0     str    w0, [sp, #16]
  400710:    528000c0     mov    w0, #0x6                       // #6
  400714:    b90017e0     str    w0, [sp, #20]
  400718:    528000e0     mov    w0, #0x7                       // #7
  40071c:    b9001be0     str    w0, [sp, #24]
  400720:    52800100     mov    w0, #0x8                       // #8
  400724:    b9001fe0     str    w0, [sp, #28]
  400728:    d503201f     nop
  40072c:    9100c3ff     add    sp, sp, #0x30
  400730:    d65f03c0     ret

0000000000400734 <aaa>:
  400734:    a9b97bfd     stp    x29, x30, [sp, #-112]!
  400738:    910003fd     mov    x29, sp
  40073c:    52800140     mov    w0, #0xa                       // #10
  400740:    b90013a0     str    w0, [x29, #16]            // [x29+16]=10
  400744:    52800280     mov    w0, #0x14                      // #20
  400748:    b90017a0     str    w0, [x29, #20]            // [x29+20]=20
  40074c:    910043a0     add    x0, x29, #0x10            // x0=x29+0x10 = 0x7ffffff3b0
  400750:    f90037a0     str    x0, [x29, #104]            // [x29+104]=x29+0x10 --> 0x7ffffff408:0x7ffffff3b0
  400754:    90000000     adrp    x0, 400000 <_init-0x480>
  400758:    91362000     add    x0, x0, #0xd88            // x0=0x400d88
  40075c:    910063a2     add    x2, x29, #0x18            // x2=x29+0x18 = 0x7ffffff3b8
  400760:    aa0003e3     mov    x3, x0                // x3=0x400d88
  400764:    a9400460     ldp    x0, x1, [x3]            // x0=[0x400d88]=0x200000001, x1=[0x400d90]=0xfffffff700000003
  400768:    a9000440     stp    x0, x1, [x2]            // [x29+0x18]=0x200000001, [x28+0x20]=0xfffffff700000003
  40076c:    a9410460     ldp    x0, x1, [x3, #16]        // x0=0x500000004 x1=0xfffffff800000006
  400770:    a9010440     stp    x0, x1, [x2, #16]        // 0x7ffffff3c8:0x0000000500000004 0x7ffffff3d0:0xfffffff800000006
  400774:    910063a0     add    x0, x29, #0x18            // x0 = 0x7ffffff3b8
  400778:    f90033a0     str    x0, [x29, #96]            // 0x7ffffff400:0x7ffffff3b8
  40077c:    52800041     mov    w1, #0x2                       // w1 = #2
  400780:    f94037a0     ldr    x0, [x29, #104]            // x0 = 0x7ffffff3b0
  400784:    94000021     bl    400808 <sum>            // 400808(0x7ffffff3b0, 2)
  400788:    b9005fa0     str    w0, [x29, #92]            // 0x7ffffff3fc:0xfffff3b80000001e
  40078c:    52800041     mov    w1, #0x2                       // #2
  400790:    f94033a0     ldr    x0, [x29, #96]            // x0 = 0x7ffffff3b8
  400794:    94000035     bl    400868 <sum2d>            // 400868(0x7ffffff3b8, 2)
  400798:    b9005ba0     str    w0, [x29, #88]
  40079c:    90000000     adrp    x0, 400000 <_init-0x480>
  4007a0:    9136a000     add    x0, x0, #0xda8
  4007a4:    9100e3a2     add    x2, x29, #0x38
  4007a8:    aa0003e3     mov    x3, x0
  4007ac:    a9400460     ldp    x0, x1, [x3]
  4007b0:    a9000440     stp    x0, x1, [x2]
  4007b4:    f9400860     ldr    x0, [x3, #16]
  4007b8:    f9000840     str    x0, [x2, #16]
  4007bc:    9100e3a0     add    x0, x29, #0x38
  4007c0:    528000c1     mov    w1, #0x6                       // #6
  4007c4:    94000011     bl    400808 <sum>
  4007c8:    b90057a0     str    w0, [x29, #84]
  4007cc:    90000000     adrp    x0, 400000 <_init-0x480>
  4007d0:    91356000     add    x0, x0, #0xd58
  4007d4:    b9405fa1     ldr    w1, [x29, #92]
  4007d8:    97ffff46     bl    4004f0 <printf@plt>
  4007dc:    90000000     adrp    x0, 400000 <_init-0x480>
  4007e0:    9135a000     add    x0, x0, #0xd68
  4007e4:    b9405ba1     ldr    w1, [x29, #88]
  4007e8:    97ffff42     bl    4004f0 <printf@plt>
  4007ec:    90000000     adrp    x0, 400000 <_init-0x480>
  4007f0:    9135e000     add    x0, x0, #0xd78
  4007f4:    b94057a1     ldr    w1, [x29, #84]
  4007f8:    97ffff3e     bl    4004f0 <printf@plt>
  4007fc:    d503201f     nop
  400800:    a8c77bfd     ldp    x29, x30, [sp], #112
  400804:    d65f03c0     ret

/*
    x29            0x7ffffff3a0        549755810720
    x30            0x400788            4196232
    sp             0x7ffffff3a0        0x7ffffff3a0
    pc             0x400808            0x400808
*/
0000000000400808 <sum>:
  400808:    d10083ff     sub    sp, sp, #0x20    // sp = 0x7ffffff380
  40080c:    f90007e0     str    x0, [sp, #8]    // x0 = 0x7ffffff3b0
  400810:    b90007e1     str    w1, [sp, #4]    // w1 = 2
  400814:    b9001bff     str    wzr, [sp, #24]    // 0x7ffffff398:   0x0000000000000000
  400818:    b9001fff     str    wzr, [sp, #28]    // 0x7ffffff39c:   0xfffff41000000000
  40081c:    1400000c     b    40084c <sum+0x44>
  400820:    b9801fe0     ldrsw    x0, [sp, #28]    // x0 = 0        x0 = 1
  400824:    d37ef400     lsl    x0, x0, #2    // x0 = 0        x0 = 4
  400828:    f94007e1     ldr    x1, [sp, #8]    // x1 = 0x7ffffff3b0    0x7ffffff3b0
  40082c:    8b000020     add    x0, x1, x0    // x0 = 0x7ffffff3b0    0x7ffffff3b4
  400830:    b9400000     ldr    w0, [x0]    // w0 = 10        w0 = 20
  400834:    b9401be1     ldr    w1, [sp, #24]    // w1 = 0        w1 = 10
  400838:    0b000020     add    w0, w1, w0    // w0 = 10        w0 = 30
  40083c:    b9001be0     str    w0, [sp, #24]    // [sp+24]=10        [sp+24]=30
  400840:    b9401fe0     ldr    w0, [sp, #28]    // w0 = 0        w0 = 1
  400844:    11000400     add    w0, w0, #0x1    // w0 = 1        w0 = 2
  400848:    b9001fe0     str    w0, [sp, #28]    // [sp+28]=1        [sp+28]=2
  40084c:    b9401fe1     ldr    w1, [sp, #28]    // w1 = 0, 1        2
  400850:    b94007e0     ldr    w0, [sp, #4]    // w0 = 2        2
  400854:    6b00003f     cmp    w1, w0
  400858:    54fffe4b     b.lt    400820 <sum+0x18>  // b.tstop    lt == <
  40085c:    b9401be0     ldr    w0, [sp, #24]    // w0 = 30
  400860:    910083ff     add    sp, sp, #0x20    // sp = 0x7ffffff3a0
  400864:    d65f03c0     ret

/*
    x29            0x7ffffff3a0        549755810720
    x30            0x400798            4196248
    sp             0x7ffffff3a0        0x7ffffff3a0
    pc             0x400868            0x400868
*/
0000000000400868 <sum2d>:
  400868:    d10083ff     sub    sp, sp, #0x20    // sp = 0x7ffffff380
  40086c:    f90007e0     str    x0, [sp, #8]    // 0x7ffffff3b8
  400870:    b90007e1     str    w1, [sp, #4]    // 2
  400874:    b90017ff     str    wzr, [sp, #20]    // 0
  400878:    b9001fff     str    wzr, [sp, #28]    // 0
  40087c:    14000015     b    4008d0 <sum2d+0x68>
  400880:    b9001bff     str    wzr, [sp, #24]    // 0
  400884:    1400000d     b    4008b8 <sum2d+0x50>
  400888:    b9801fe0     ldrsw    x0, [sp, #28]    // x0 = 0        x0 = 0
  40088c:    d37cec00     lsl    x0, x0, #4    // x0 = 0        x0 = 0
  400890:    f94007e1     ldr    x1, [sp, #8]    // x1 = 0x7ffffff3b8    x1=0x7ffffff3b8
  400894:    8b000020     add    x0, x1, x0    // x0 = 0x7ffffff3b8    x0=0x7ffffff3b8
  400898:    b9801be1     ldrsw    x1, [sp, #24]    // x1 = 0        x1 = 1
  40089c:    b8617800     ldr    w0, [x0, x1, lsl #2] // [0x7ffffff3b8]=1 [0x7ffffff3bc]=2
  4008a0:    b94017e1     ldr    w1, [sp, #20]    // w1 = 0
  4008a4:    0b000020     add    w0, w1, w0    // w0 = 1
  4008a8:    b90017e0     str    w0, [sp, #20]    // [sp+20]=1
  4008ac:    b9401be0     ldr    w0, [sp, #24]    // w0 = 0
  4008b0:    11000400     add    w0, w0, #0x1    // w0 = 1
  4008b4:    b9001be0     str    w0, [sp, #24]    // [sp+24] = 1
  4008b8:    b9401be0     ldr    w0, [sp, #24]    // 0, 1
  4008bc:    71000c1f     cmp    w0, #0x3    // [ EL=0 SS N ]
  4008c0:    54fffe4d     b.le    400888 <sum2d+0x20> // <= j
  4008c4:    b9401fe0     ldr    w0, [sp, #28]
  4008c8:    11000400     add    w0, w0, #0x1
  4008cc:    b9001fe0     str    w0, [sp, #28]
  4008d0:    b9401fe1     ldr    w1, [sp, #28]    // w1 = 0
  4008d4:    b94007e0     ldr    w0, [sp, #4]    // w0 = 2
  4008d8:    6b00003f     cmp    w1, w0        // 0x80200000 [ EL=0 SS N ]
  4008dc:    54fffd2b     b.lt    400880 <sum2d+0x18>  // b.tstop
  4008e0:    b94017e0     ldr    w0, [sp, #20]
  4008e4:    910083ff     add    sp, sp, #0x20
  4008e8:    d65f03c0     ret

/*
    x19            0x400c80            4197504
    x20            0x0                 0
    x21            0x400500            4195584
    x22            0x0                 0
    x23            0x0                 0
    x29            0x7ffffff410        549755810832
    x30            0x400c58            4197464
    sp             0x7ffffff410        0x7ffffff410
    pc             0x4008ec            0x4008ec
    cpsr           0x60200000          [ EL=0 SS C Z ]
*/
00000000004008ec <bbb>:
  4008ec:    a9ba7bfd     stp    x29, x30, [sp, #-96]!
  4008f0:    910003fd     mov    x29, sp            // 0x7ffffff3b0
  4008f4:    a90153f3     stp    x19, x20, [sp, #16]
  4008f8:    a9025bf5     stp    x21, x22, [sp, #32]
  4008fc:    f9001bf7     str    x23, [sp, #48]
  400900:    910003f4     mov    x20, sp            // x20 = 0x7ffffff3b0
  400904:    aa1403f7     mov    x23, x20        // x23 = 0x7ffffff3b0
  400908:    52800074     mov    w20, #0x3                       // #3
  40090c:    b90053b4     str    w20, [x29, #80]        // [x29+80]=3
  400910:    52800094     mov    w20, #0x4                       // #4
  400914:    b90057b4     str    w20, [x29, #84]        // [x29+84]=4
  400918:    b94057b4     ldr    w20, [x29, #84]        // w20=4
  40091c:    b94053b5     ldr    w21, [x29, #80]        // w21=3
  400920:    93407e96     sxtw    x22, w20        // x22=4
  400924:    d10006d6     sub    x22, x22, #0x1        // x22=4-1=3
  400928:    f9002fb6     str    x22, [x29, #88]        // [x29+88]=3
  40092c:    93407e96     sxtw    x22, w20        // x22=4
  400930:    aa1603f2     mov    x18, x22        // x18=4
  400934:    d2800013     mov    x19, #0x0                       // #0
  400938:    d37bfe56     lsr    x22, x18, #59        // x22 = 4>>59 = 0x0
  40093c:    d37bea6d     lsl    x13, x19, #5        // x13 = 0<<5 = 0x0
  400940:    aa0d02cd     orr    x13, x22, x13        // x13 = 0x0|0 = 0x0
  400944:    d37bea4c     lsl    x12, x18, #5        // x12 = 4<<5 = 10000000b = 0x80
  400948:    93407eac     sxtw    x12, w21        // x12 = 3
  40094c:    d100058c     sub    x12, x12, #0x1        // x12 = 3-1 = 2
  400950:    f90027ac     str    x12, [x29, #72]        // [x29+72]=2
  400954:    93407e8c     sxtw    x12, w20        // x12 = 4
  400958:    aa0c03e6     mov    x6, x12            // x6 = 4
  40095c:    d2800007     mov    x7, #0x0                // x7 = #0
  400960:    93407eac     sxtw    x12, w21        // x12 = 3
  400964:    aa0c03e4     mov    x4, x12            // x4 = 3
  400968:    d2800005     mov    x5, #0x0                       // #0
  40096c:    9b047ccd     mul    x13, x6, x4        // x13 = 4*3 = 12
  400970:    9bc47ccc     umulh    x12, x6, x4        // x12 = 4*3 = 0
  400974:    9b0430ec     madd    x12, x7, x4, x12    // x12 = x12+x7*x4 = 0+0 = 0
  400978:    9b0530cc     madd    x12, x6, x5, x12    // x12 = x12+x6*x5 = 0+4*0=0
  40097c:    aa0d03f0     mov    x16, x13        // x16 = 12
  400980:    aa0c03f1     mov    x17, x12        // x17 = 0
  400984:    d37bfe04     lsr    x4, x16, #59        // x4 = 12>>59 = 0
  400988:    d37bea2b     lsl    x11, x17, #5        // x11 = 0 << 5 = 0
  40098c:    aa0b008b     orr    x11, x4, x11        // x11 = 0|0 = 0
  400990:    d37bea0a     lsl    x10, x16, #5        // x10 = 12<<5 = 0x180
  400994:    93407e84     sxtw    x4, w20            // x4 = 4
  400998:    aa0403e2     mov    x2, x4            // x2 = 4
  40099c:    d2800003     mov    x3, #0x0                       // #0
  4009a0:    93407ea4     sxtw    x4, w21            // x4 = 3
  4009a4:    aa0403e0     mov    x0, x4            // x0 = 3
  4009a8:    d2800001     mov    x1, #0x0                       // #0
  4009ac:    9b007c45     mul    x5, x2, x0        // x5 = x2*x0 = 4*3 = 12
  4009b0:    9bc07c44     umulh    x4, x2, x0        // x4 = x2*x0 = 0
  4009b4:    9b001064     madd    x4, x3, x0, x4        // x4 = x4+x3*x0 = 0+0 = 0
  4009b8:    9b011044     madd    x4, x2, x1, x4        // x4 = x4+x2*x1 = 0+4*0=0
  4009bc:    aa0503ee     mov    x14, x5            // x14 = 12
  4009c0:    aa0403ef     mov    x15, x4            // x15 = 0
  4009c4:    d37bfdc0     lsr    x0, x14, #59        // x0 = 12>>59 = 0
  4009c8:    d37be9e9     lsl    x9, x15, #5        // x9 = 0 << 5 = 0
  4009cc:    aa090009     orr    x9, x0, x9        // x9 = 0|0 = 0
  4009d0:    d37be9c8     lsl    x8, x14, #5        // x8 = 12<<5 = 0x180
  4009d4:    93407e81     sxtw    x1, w20            // x1 = 4
  4009d8:    93407ea0     sxtw    x0, w21            // x0 = 3
  4009dc:    9b007c20     mul    x0, x1, x0        // x0 = 12
  4009e0:    d37ef400     lsl    x0, x0, #2        // x0 = 12<<2 = 0x30
  4009e4:    91000c00     add    x0, x0, #0x3        // x0 = 0x33
  4009e8:    91003c00     add    x0, x0, #0xf        // x0 = 0x42
  4009ec:    d344fc00     lsr    x0, x0, #4        // x0 = 0x42>>4 = 0x4
  4009f0:    d37cec00     lsl    x0, x0, #4        // x0 = 4<<4 = 0x40
  4009f4:    cb2063ff     sub    sp, sp, x0        // sp = 0x7ffffff3b0-0x40 = 0x7ffffff370
  4009f8:    910003e0     mov    x0, sp            // x0 = 0x7ffffff370
  4009fc:    91000c00     add    x0, x0, #0x3        // x0 = 0x7ffffff373
  400a00:    d342fc00     lsr    x0, x0, #2        // x0 = 0x7ffffff373 >> 2 = 0x1ffffffcdc
  400a04:    d37ef400     lsl    x0, x0, #2        // x0 = 0x1ffffffcdc << 2 = 0x7ffffff370
  400a08:    f90023a0     str    x0, [x29, #64]        // 0x7ffffff3f0:   0x0000007ffffff370
  400a0c:    910002ff     mov    sp, x23            // sp = 0x7ffffff3b0
  400a10:    d503201f     nop
  400a14:    910003bf     mov    sp, x29            // sp = 0x7ffffff3b0
  400a18:    a94153f3     ldp    x19, x20, [sp, #16]
  400a1c:    a9425bf5     ldp    x21, x22, [sp, #32]
  400a20:    f9401bf7     ldr    x23, [sp, #48]
  400a24:    a8c67bfd     ldp    x29, x30, [sp], #96
  400a28:    d65f03c0     ret

0000000000400a2c <array_cal>:
  400a2c:    a9bc7bfd     stp    x29, x30, [sp, #-64]!
  400a30:    910003fd     mov    x29, sp
  400a34:    90000000     adrp    x0, 400000 <_init-0x480>
  400a38:    913a2000     add    x0, x0, #0xe88        // x0=0x400e88
  400a3c:    9100a3a2     add    x2, x29, #0x28        // x2=0x7ffffff3f8
  400a40:    aa0003e3     mov    x3, x0            // x3=0x400e88
  400a44:    a9400460     ldp    x0, x1, [x3]        // x0=0x200000001 x1=0x400000003
  400a48:    a9000440     stp    x0, x1, [x2]
  400a4c:    b9401060     ldr    w0, [x3, #16]        // w0 = 9
  400a50:    b9001040     str    w0, [x2, #16]
  400a54:    9100a3a0     add    x0, x29, #0x28        // x0 = 0x7ffffff3f8
  400a58:    91005000     add    x0, x0, #0x14        // x0 = 0x7ffffff40c
  400a5c:    f90013a0     str    x0, [x29, #32]
  400a60:    9100a3a0     add    x0, x29, #0x28        // x0 = 0x7ffffff3f8
  400a64:    11000400     add    w0, w0, #0x1        // w0 = 0xfffff3f9
  400a68:    93407c00     sxtw    x0, w0            // 0xfffffffffffff3f9
  400a6c:    f9000fa0     str    x0, [x29, #24]        // 0x7ffffff3e8:   0xfffffffffffff3f9
  400a70:    9100a3a0     add    x0, x29, #0x28        // x0 = 0x7ffffff3f8
  400a74:    91005000     add    x0, x0, #0x14        // x0 = 0x7ffffff40c
  400a78:    b90017a0     str    w0, [x29, #20]        // w0 = 0x7ffffff40c    0x7ffffff3e4:0xfffff3f9fffff40
  400a7c:    9100a3a1     add    x1, x29, #0x28        // x1 = 0x7ffffff3f8        a
  400a80:    90000000     adrp    x0, 400000 <_init-0x480>
  400a84:    91372000     add    x0, x0, #0xdc8        // x0 = 0x400dc8
  400a88:    97fffe9a     bl    4004f0 <printf@plt>
  400a8c:    9100a3a1     add    x1, x29, #0x28        // x1 = 0x7ffffff3f8        &a
  400a90:    90000000     adrp    x0, 400000 <_init-0x480>
  400a94:    91376000     add    x0, x0, #0xdd8        // x0 = 0x400dd8
  400a98:    97fffe96     bl    4004f0 <printf@plt>
  400a9c:    9100a3a0     add    x0, x29, #0x28        // x0 = 0x7ffffff3f8
  400aa0:    91001000     add    x0, x0, #0x4        // x0 = 0x7ffffff3fc        a+1
  400aa4:    90000001     adrp    x1, 400000 <_init-0x480>
  400aa8:    91372022     add    x2, x1, #0xdc8        // x2 = 0x400dc8
  400aac:    aa0003e1     mov    x1, x0            // x1 = 0x7ffffff3fc
  400ab0:    aa0203e0     mov    x0, x2            // x0 = 0x400dc8
  400ab4:    97fffe8f     bl    4004f0 <printf@plt>
  400ab8:    9100a3a0     add    x0, x29, #0x28
  400abc:    91005000     add    x0, x0, #0x14                        // &a+1
  400ac0:    90000001     adrp    x1, 400000 <_init-0x480>
  400ac4:    91376022     add    x2, x1, #0xdd8
  400ac8:    aa0003e1     mov    x1, x0
  400acc:    aa0203e0     mov    x0, x2
  400ad0:    97fffe88     bl    4004f0 <printf@plt>
  400ad4:    b94017a1     ldr    w1, [x29, #20]            // temp = &a+1
  400ad8:    90000000     adrp    x0, 400000 <_init-0x480>
  400adc:    9137a000     add    x0, x0, #0xde8
  400ae0:    97fffe84     bl    4004f0 <printf@plt>
  400ae4:    b94017a1     ldr    w1, [x29, #20]            // temp = &a+1
  400ae8:    90000000     adrp    x0, 400000 <_init-0x480>
  400aec:    9137e000     add    x0, x0, #0xdf8
  400af0:    97fffe80     bl    4004f0 <printf@plt>
  400af4:    910053a1     add    x1, x29, #0x14            // &temp
  400af8:    90000000     adrp    x0, 400000 <_init-0x480>
  400afc:    91382000     add    x0, x0, #0xe08
  400b00:    97fffe7c     bl    4004f0 <printf@plt>
  400b04:    f94013a0     ldr    x0, [x29, #32]
  400b08:    b9400001     ldr    w1, [x0]            // *ptr1
  400b0c:    90000000     adrp    x0, 400000 <_init-0x480>
  400b10:    91386000     add    x0, x0, #0xe18
  400b14:    97fffe77     bl    4004f0 <printf@plt>
  400b18:    f94013a0     ldr    x0, [x29, #32]
  400b1c:    b9400001     ldr    w1, [x0]            // *ptr1
  400b20:    90000000     adrp    x0, 400000 <_init-0x480>
  400b24:    9138a000     add    x0, x0, #0xe28
  400b28:    97fffe72     bl    4004f0 <printf@plt>
  400b2c:    f94013a1     ldr    x1, [x29, #32]            // ptr1
  400b30:    90000000     adrp    x0, 400000 <_init-0x480>
  400b34:    9138e000     add    x0, x0, #0xe38
  400b38:    97fffe6e     bl    4004f0 <printf@plt>
  400b3c:    f94013a1     ldr    x1, [x29, #32]            // ptr1
  400b40:    90000000     adrp    x0, 400000 <_init-0x480>
  400b44:    9138a000     add    x0, x0, #0xe28
  400b48:    97fffe6a     bl    4004f0 <printf@plt>
  400b4c:    910083a1     add    x1, x29, #0x20            // &ptr1
  400b50:    90000000     adrp    x0, 400000 <_init-0x480>
  400b54:    91392000     add    x0, x0, #0xe48
  400b58:    97fffe66     bl    4004f0 <printf@plt>
  400b5c:    f94013a0     ldr    x0, [x29, #32]
  400b60:    d1001000     sub    x0, x0, #0x4            // ptr1[-1]
  400b64:    b9400001     ldr    w1, [x0]
  400b68:    90000000     adrp    x0, 400000 <_init-0x480>
  400b6c:    91396000     add    x0, x0, #0xe58
  400b70:    97fffe60     bl    4004f0 <printf@plt>
  400b74:    f9400fa1     ldr    x1, [x29, #24]            // ptr2
  400b78:    90000000     adrp    x0, 400000 <_init-0x480>
  400b7c:    9139a000     add    x0, x0, #0xe68
  400b80:    97fffe5c     bl    4004f0 <printf@plt>
  400b84:    910063a1     add    x1, x29, #0x18            // &ptr2
  400b88:    90000000     adrp    x0, 400000 <_init-0x480>
  400b8c:    9139e000     add    x0, x0, #0xe78
  400b90:    97fffe58     bl    4004f0 <printf@plt>
  400b94:    52800000     mov    w0, #0x0                       // #0
  400b98:    a8c47bfd     ldp    x29, x30, [sp], #64
  400b9c:    d65f03c0     ret

/*
    x29            0x7ffffff410        549755810832
    x30            0x400c70            4197488
    sp             0x7ffffff410        0x7ffffff410
    pc             0x400ba0            0x400ba0
*/
0000000000400ba0 <ccc>:
  400ba0:    a9bc7bfd     stp    x29, x30, [sp, #-64]!
  400ba4:    910003fd     mov    x29, sp
  400ba8:    a9017fbf     stp    xzr, xzr, [x29, #16]
  400bac:    a9027fbf     stp    xzr, xzr, [x29, #32]
  400bb0:    f9001bbf     str    xzr, [x29, #48]
  400bb4:    52800160     mov    w0, #0xb                       // #11
  400bb8:    b90013a0     str    w0, [x29, #16]
  400bbc:    528001e0     mov    w0, #0xf                       // #15
  400bc0:    b90017a0     str    w0, [x29, #20]
  400bc4:    52800280     mov    w0, #0x14                      // #20
  400bc8:    b9001ba0     str    w0, [x29, #24]
  400bcc:    52800320     mov    w0, #0x19                      // #25
  400bd0:    b9001fa0     str    w0, [x29, #28]
  400bd4:    528003c0     mov    w0, #0x1e                      // #30
  400bd8:    b90023a0     str    w0, [x29, #32]
  400bdc:    910043a0     add    x0, x29, #0x10
  400be0:    91002000     add    x0, x0, #0x8
  400be4:    f9001fa0     str    x0, [x29, #56]
  400be8:    f9401fa0     ldr    x0, [x29, #56]
  400bec:    b9400001     ldr    w1, [x0]
  400bf0:    90000000     adrp    x0, 400000 <_init-0x480>
  400bf4:    913a8000     add    x0, x0, #0xea0
  400bf8:    97fffe3e     bl    4004f0 <printf@plt>
  400bfc:    f9401fa0     ldr    x0, [x29, #56]
  400c00:    d1001000     sub    x0, x0, #0x4
  400c04:    b9400001     ldr    w1, [x0]
  400c08:    90000000     adrp    x0, 400000 <_init-0x480>
  400c0c:    913a8000     add    x0, x0, #0xea0
  400c10:    97fffe38     bl    4004f0 <printf@plt>
  400c14:    f9401fa0     ldr    x0, [x29, #56]
  400c18:    d1002000     sub    x0, x0, #0x8
  400c1c:    b9400001     ldr    w1, [x0]
  400c20:    90000000     adrp    x0, 400000 <_init-0x480>
  400c24:    913a8000     add    x0, x0, #0xea0
  400c28:    97fffe32     bl    4004f0 <printf@plt>
  400c2c:    b94037a1     ldr    w1, [x29, #52]
  400c30:    90000000     adrp    x0, 400000 <_init-0x480>
  400c34:    913a8000     add    x0, x0, #0xea0
  400c38:    97fffe2e     bl    4004f0 <printf@plt>
  400c3c:    52800000     mov    w0, #0x0                       // #0
  400c40:    a8c47bfd     ldp    x29, x30, [sp], #64
  400c44:    d65f03c0     ret

0000000000400c48 <main>:
  400c48:    a9bf7bfd     stp    x29, x30, [sp, #-16]!
  400c4c:    910003fd     mov    x29, sp
  400c50:    97fffeb9     bl    400734 <aaa>
  400c54:    97ffff26     bl    4008ec <bbb>
  400c58:    97fffe69     bl    4005fc <array1>
  400c5c:    97fffe89     bl    400680 <array2>
  400c60:    97fffe8c     bl    400690 <array3>
  400c64:    97fffea0     bl    4006e4 <array4>
  400c68:    97ffff71     bl    400a2c <array_cal>
  400c6c:    97ffffcd     bl    400ba0 <ccc>
  400c70:    52800000     mov    w0, #0x0                       // #0
  400c74:    a8c17bfd     ldp    x29, x30, [sp], #16
  400c78:    d65f03c0     ret

arm反汇编 之数组相关推荐

  1. 学习ARM反汇编工具objdump和一个简单实例

    学习ARM反汇编工具objdump和一个简单实例 --参考朱有鹏ARM裸机编程 1.反汇编的原理&为什么需要反汇编 arm-linux-objdump -D led.elf > led_ ...

  2. ARM 反汇编工具objdump的使用简介

    一.反汇编的原理 & 为什么要反汇编 arm-linux-objdump -D led.elf > led_elf.dis-D, --disassemble-all Display as ...

  3. 第七章 ARM 反汇编基础(七)(AArch64 汇编指令集)

    文章目录 AArch64 汇编指令集 AArch64 指令编码 AArch64 指令格式解析 AArch64 汇编指令集 arm64-v8a 对应两套架构的指令集 AArch32(简称"A3 ...

  4. 反汇编基础-数组和指针的反汇编代码分析

    程序源码如下: #include <stdio.h>int main(){const char c = 'A';char str[] = "Hello World!"; ...

  5. IDA Pro ARM指令集和Thumb指令集的切换

    在动态调试android的ndk程序的时候,发现很多程序都会反汇编错误,原来是ARM反汇编的模式没搞对.因为在动态调试的时候,ida Pro并没有去解析elf模块中的一些信息,造成了模块信息丢失,有时 ...

  6. strcmp可以比较数组么_C语言数组越界了,后果很严重,如何避免?

    素材来源:嵌入式ARM所谓的数组越界,简单地讲就是指数组下标变量的取值超过了初始定义时的大小,导致对数组元素的访问出现在数组的范围之外,这类错误也是 C 语言程序中最常见的错误之一.在 C 语言中,数 ...

  7. C/C++ BeaEngine 反汇编引擎

    反汇编引擎有很多,这个引擎没有Dll,是纯静态链接库,适合r3-r0环境,你可以将其编译为DLL文件,驱动强制注入到游戏进程中,让其快速反汇编,读取出反汇编代码并保存为txt文本,本地分析. 地址:G ...

  8. jtag访问arm内核寄存器

    jtag的原理图 jtag接口访问arm Device ID code register的步骤 jtag接口访问arm Device ID code register的功能验证的testbench j ...

  9. 游戏安全--手游安全技术入门笔记

    留坑:里面涉及了太多linux库函数和汇编的东西,坑挖给复习算法的时候一起来 内存修改器:用来搜索.修改游戏的内存数据,玩家一般根据游戏面板中的精确数据利用修改器搜索相应数值,再根据数值变化的规律多次 ...

最新文章

  1. java 系统 类_JAVA系统类 System的简单整理
  2. 官网拉取fuchsia代码
  3. Android用shareUserID实现多个Activity显示在同一界面
  4. java旋转爱心_p5.js临摹旋转爱心
  5. 火热招募中 | PMCAFF产品经理社区志愿者计划火热开启
  6. 初识Oracle的XMLType
  7. 31天重构学习笔记3. 提升方法
  8. java线程实例题_java线程相关试题实例源码代码
  9. 开发大会上,前微软CEO放出的狠话!.NET开发随时起飞,你准备好了吗?
  10. Gym - 100989J -(DFS)
  11. Java微服务篇4——Elastic search
  12. 自己动手架设linux下Web服务器(图)3
  13. anaconda激活python_Anaconda使用conda activate激活环境出错(待完全解决)2018-06-09
  14. python脚本入门_python 脚本学习(一)
  15. java 静态方法区别_Java 中 静态方法与非静态方法的区别
  16. case与bug的对应关系
  17. linux修改vcf编码格式,飞翔vcf文件编码转换
  18. 巴菲特致股东的一封信:1998年
  19. SSM框架 基于Bootstrap fileinput 实现文件上传功能
  20. 定位python内存泄漏问题

热门文章

  1. Python交互式编程环境及练习
  2. 湖北中级工程师评定条件及流程?伴德诚
  3. python爬取英雄联盟所有皮肤价格表_实用Python是如何爬取英雄联盟(lol)全部皮肤,涨知识了...
  4. 中国人月收入真实数据
  5. mysql 指定的服务已标记为删除,异常
  6. TypeScript开发的斗地主游戏核心逻辑
  7. canvas学习之五子棋规则法部分实现
  8. 利用基因沉默和过表达技术研究棉花的基因功能
  9. BDP FL-PEG4-TCO,BDP FL-四聚乙二醇-(4E)-反式环辛烯​,CAS:2183473-16-5
  10. 算法 | 如何通过Math.random()方法实现X平方或更多次方的概率?