逆向-beginners之二维数组

#include <stdio.h>

char a[3][4];

/* 以行优先的顺序填充数据 */

int hang()
{
    int x, y;

    /* 清空数组 */
    for (x = 0; x < 3; x++)
        for (y = 0; y < 4; y++)
            a[x][y] = 0;

    /* 填充第二行 */
    for (y = 0; y < 4; y++)
        a[1][y] = y;

    return 0;
}

/* 以列优先的顺序填充数据 */

int lie()
{
    int x, y;

    /* 清空数组 */
    for (x = 0; x < 3; x++)
        for (y = 0; y < 4; y++)
            a[x][y] = 0;

    /* 填充第三列 */
    for (x = 0; x < 3; x++)
        a[x][2] = x;

    return 0;
}

/* 以下是以一维数组的方式访问二维数组 */
char get_by_coordinates1(char array[3][4], int a, int b)
{
    return array[a][b];
}

char get_by_coordinates2(char * array, int a, int b)
{
    /* treat input array as one-dimensional */
    /* 4 is array width here */
    return array[a*4+b];
}

char get_by_coordinates3(char * array, int a, int b)
{
    /* treat input array as pointer,
       calculate address, get value at is 4 is array width here */
    return *(array+a*4+b);
      
}

int main()
{
    a[2][3] = 123;

    printf("%d\n", get_by_coordinates1(a, 2, 3));
    printf("%d\n", get_by_coordinates2(a[0], 2, 3));
    printf("%d\n", get_by_coordinates3(a[0], 2, 3));

    return 0;
}


#if 0
/*
 * intel
 */

0000000000001149 <hang>:
    1149:    f3 0f 1e fa              endbr64
    114d:    55                       push   %rbp
    114e:    48 89 e5                 mov    %rsp,%rbp

    1151:    c7 45 f8 00 00 00 00     movl   $0x0,-0x8(%rbp)        // for x=0
    1158:    eb 36                    jmp    1190 <hang+0x47>        // x jump
    115a:    c7 45 fc 00 00 00 00     movl   $0x0,-0x4(%rbp)        // for y=0
    1161:    eb 23                    jmp    1186 <hang+0x3d>        // y jump
    1163:    8b 45 fc                 mov    -0x4(%rbp),%eax        // eax=y
    1166:    48 98                    cltq                   // rax=y
    1168:    8b 55 f8                 mov    -0x8(%rbp),%edx        // edx=x
    116b:    48 63 d2                 movslq %edx,%rdx        // rdx=x
    116e:    48 c1 e2 02              shl    $0x2,%rdx        // rdx=x<<2
    1172:    48 01 c2                 add    %rax,%rdx        // rdx=x<<2+y
    1175:    48 8d 05 9c 2e 00 00     lea    0x2e9c(%rip),%rax        # 4018 <a>    rax=a        117c+0x2e9c=4018
    117c:    48 01 d0                 add    %rdx,%rax        // rax=a+(x<<2+y)
    117f:    c6 00 00                 movb   $0x0,(%rax)        // (rax)=0
    1182:    83 45 fc 01              addl   $0x1,-0x4(%rbp)        // y++
    1186:    83 7d fc 03              cmpl   $0x3,-0x4(%rbp)        // 0x3-y
    118a:    7e d7                    jle    1163 <hang+0x1a>
    118c:    83 45 f8 01              addl   $0x1,-0x8(%rbp)        // x++
    1190:    83 7d f8 02              cmpl   $0x2,-0x8(%rbp)        // 0x2-x
    1194:    7e c4                    jle    115a <hang+0x11>

    1196:    c7 45 fc 00 00 00 00     movl   $0x0,-0x4(%rbp)        // y=0
    119d:    eb 18                    jmp    11b7 <hang+0x6e>
    119f:    8b 45 fc                 mov    -0x4(%rbp),%eax        // eax=y
    11a2:    89 c1                    mov    %eax,%ecx        // ecx=y
    11a4:    8b 45 fc                 mov    -0x4(%rbp),%eax        // eax=y
    11a7:    48 98                    cltq                   // rax=y
    11a9:    48 8d 15 6c 2e 00 00     lea    0x2e6c(%rip),%rdx        # 401c <a+0x4>    rdx=a+0x4  11b0+2e6c=401c
    11b0:    88 0c 10                 mov    %cl,(%rax,%rdx,1)    // (y+(a+0x4)*1=cl
    11b3:    83 45 fc 01              addl   $0x1,-0x4(%rbp)        // y++
    11b7:    83 7d fc 03              cmpl   $0x3,-0x4(%rbp)        // 0x3-y
    11bb:    7e e2                    jle    119f <hang+0x56>
    11bd:    b8 00 00 00 00           mov    $0x0,%eax
    11c2:    5d                       pop    %rbp
    11c3:    c3                       retq   

00000000000011c4 <lie>:
    11c4:    f3 0f 1e fa              endbr64
    11c8:    55                       push   %rbp
    11c9:    48 89 e5                 mov    %rsp,%rbp
    11cc:    c7 45 f8 00 00 00 00     movl   $0x0,-0x8(%rbp)    // x=0
    11d3:    eb 36                    jmp    120b <lie+0x47>    // for x
    11d5:    c7 45 fc 00 00 00 00     movl   $0x0,-0x4(%rbp)    // y=0
    11dc:    eb 23                    jmp    1201 <lie+0x3d>    // for y
    11de:    8b 45 fc                 mov    -0x4(%rbp),%eax    
    11e1:    48 98                    cltq               // rax=y
    11e3:    8b 55 f8                 mov    -0x8(%rbp),%edx    
    11e6:    48 63 d2                 movslq %edx,%rdx    // rdx=x
    11e9:    48 c1 e2 02              shl    $0x2,%rdx    // rdx=x<<2
    11ed:    48 01 c2                 add    %rax,%rdx    // rdx=(x<<2)+y
    11f0:    48 8d 05 21 2e 00 00     lea    0x2e21(%rip),%rax        # 4018 <a>    rax=a
    11f7:    48 01 d0                 add    %rdx,%rax    // rax=a+(x<<2)+y
    11fa:    c6 00 00                 movb   $0x0,(%rax)    // (rax)=0
    11fd:    83 45 fc 01              addl   $0x1,-0x4(%rbp)    // y++
    1201:    83 7d fc 03              cmpl   $0x3,-0x4(%rbp)    // 0x3-y
    1205:    7e d7                    jle    11de <lie+0x1a>
    1207:    83 45 f8 01              addl   $0x1,-0x8(%rbp)    // x++
    120b:    83 7d f8 02              cmpl   $0x2,-0x8(%rbp)    // 0x2-x
    120f:    7e c4                    jle    11d5 <lie+0x11>
    1211:    c7 45 f8 00 00 00 00     movl   $0x0,-0x8(%rbp)    // x=0
    1218:    eb 20                    jmp    123a <lie+0x76>
    121a:    8b 45 f8                 mov    -0x8(%rbp),%eax    // eax=x
    121d:    89 c1                    mov    %eax,%ecx    // ecx=x
    121f:    8b 45 f8                 mov    -0x8(%rbp),%eax    
    1222:    48 98                    cltq               // rax=x
    1224:    48 8d 14 85 00 00 00     lea    0x0(,%rax,4),%rdx    // rdx=(x*4)+0x0
    122b:    00
    122c:    48 8d 05 e7 2d 00 00     lea    0x2de7(%rip),%rax        # 401a <a+0x2>    rax=a+2
    1233:    88 0c 02                 mov    %cl,(%rdx,%rax,1)    // ((x*4)+(a+2)*1)=cl
    1236:    83 45 f8 01              addl   $0x1,-0x8(%rbp)        // x++
    123a:    83 7d f8 02              cmpl   $0x2,-0x8(%rbp)        // 0x2-x
    123e:    7e da                    jle    121a <lie+0x56>
    1240:    b8 00 00 00 00           mov    $0x0,%eax
    1245:    5d                       pop    %rbp
    1246:    c3                       retq   

0000000000001247 <get_by_coordinates1>:
    1247:    f3 0f 1e fa              endbr64
    124b:    55                       push   %rbp
    124c:    48 89 e5                 mov    %rsp,%rbp
    124f:    48 89 7d f8              mov    %rdi,-0x8(%rbp)    // (rbp-0x8)=rdi parameter
    1253:    89 75 f4                 mov    %esi,-0xc(%rbp)    // (rbp-0xc)=esi parameter
    1256:    89 55 f0                 mov    %edx,-0x10(%rbp)    // (rbp-0x10)=edx parameter
    1259:    8b 45 f4                 mov    -0xc(%rbp),%eax
    125c:    48 98                    cltq                   // rax=(rbp-0xc)
    125e:    48 8d 14 85 00 00 00     lea    0x0(,%rax,4),%rdx    // rdx=((rbp-0xc)*4)+0x0
    1265:    00
    1266:    48 8b 45 f8              mov    -0x8(%rbp),%rax        // rax=(rbp-0x8)
    126a:    48 01 c2                 add    %rax,%rdx        // rdx=(rbp-0x8)+((rbp-0xc)*4)+0x0
    126d:    8b 45 f0                 mov    -0x10(%rbp),%eax        // eax=(rbp-0x10)
    1270:    48 98                    cltq                   // rax=(rbp-0x10)
    1272:    0f b6 04 02              movzbl (%rdx,%rax,1),%eax    // eax=((rbp-0x8)+[(rbp-0xc)*4)+0x0]+[(rbp-0x10)*1]
    1276:    5d                       pop    %rbp
    1277:    c3                       retq   

0000000000001278 <get_by_coordinates2>:
    1278:    f3 0f 1e fa              endbr64
    127c:    55                       push   %rbp
    127d:    48 89 e5                 mov    %rsp,%rbp
    1280:    48 89 7d f8              mov    %rdi,-0x8(%rbp)        // (rbp-0x8)=rdi
    1284:    89 75 f4                 mov    %esi,-0xc(%rbp)        // (rbp-0xc)=esi
    1287:    89 55 f0                 mov    %edx,-0x10(%rbp)        // (rbp-0x10)=edx
    128a:    8b 45 f4                 mov    -0xc(%rbp),%eax        // eax=(rbp-0xc)
    128d:    8d 14 85 00 00 00 00     lea    0x0(,%rax,4),%edx    // edx=(rbp-0xc)*4+0x0
    1294:    8b 45 f0                 mov    -0x10(%rbp),%eax        // eax=(rbp-0x10)
    1297:    01 d0                    add    %edx,%eax        // eax=[(rbp-0xc)*4+0x0]+(rbp-0x10)
    1299:    48 63 d0                 movslq %eax,%rdx        // rdx=[(rbp-0xc)*4+0x0]+(rbp-0x10)
    129c:    48 8b 45 f8              mov    -0x8(%rbp),%rax        // rax=(rbp-0x8)
    12a0:    48 01 d0                 add    %rdx,%rax        // rax=(rbp-0x8)+[(rbp-0xc)*4+0x0]+(rbp-0x10)
    12a3:    0f b6 00                 movzbl (%rax),%eax        // eax=((rbp-0x8)+[(rbp-0xc)*4+0x0]+(rbp-0x10))
    12a6:    5d                       pop    %rbp
    12a7:    c3                       retq   

00000000000012a8 <get_by_coordinates3>:
    12a8:    f3 0f 1e fa              endbr64
    12ac:    55                       push   %rbp
    12ad:    48 89 e5                 mov    %rsp,%rbp
    12b0:    48 89 7d f8              mov    %rdi,-0x8(%rbp)        // (rbp-0x8)=rdi
    12b4:    89 75 f4                 mov    %esi,-0xc(%rbp)        // (rbp-0xc)=esi
    12b7:    89 55 f0                 mov    %edx,-0x10(%rbp)        // (rbp-0x10)=edx
    12ba:    8b 45 f4                 mov    -0xc(%rbp),%eax        // eax=(rbp-0xc)
    12bd:    c1 e0 02                 shl    $0x2,%eax        // eax=(rbp-0xc)<<2
    12c0:    48 63 d0                 movslq %eax,%rdx        // rdx=(rbp-0xc)<<2
    12c3:    8b 45 f0                 mov    -0x10(%rbp),%eax        // eax=(rbp-0x10)
    12c6:    48 98                    cltq                   // rax=(rbp-0x10)
    12c8:    48 01 c2                 add    %rax,%rdx        // rdx=(rbp-0x10)+(rbp-0xc)<<2
    12cb:    48 8b 45 f8              mov    -0x8(%rbp),%rax        // rax=(rbp-0x8)
    12cf:    48 01 d0                 add    %rdx,%rax        // rax=(rbp-0x8)+(rbp-0x10)+(rbp-0xc)<<2
    12d2:    0f b6 00                 movzbl (%rax),%eax        // eax=((rbp-0x8)+(rbp-0x10)+(rbp-0xc)<<2)
    12d5:    5d                       pop    %rbp
    12d6:    c3                       retq   

00000000000012d7 <main>:
    12d7:    f3 0f 1e fa              endbr64
    12db:    55                       push   %rbp
    12dc:    48 89 e5                 mov    %rsp,%rbp
    12df:    c6 05 3d 2d 00 00 7b     movb   $0x7b,0x2d3d(%rip)        # 4023 <a+0xb>
    12e6:    ba 03 00 00 00           mov    $0x3,%edx
    12eb:    be 02 00 00 00           mov    $0x2,%esi
    12f0:    48 8d 3d 21 2d 00 00     lea    0x2d21(%rip),%rdi        # 4018 <a>
    12f7:    e8 4b ff ff ff           callq  1247 <get_by_coordinates1>
    12fc:    0f be c0                 movsbl %al,%eax
    12ff:    89 c6                    mov    %eax,%esi
    1301:    48 8d 3d fc 0c 00 00     lea    0xcfc(%rip),%rdi        # 2004 <_IO_stdin_used+0x4>
    1308:    b8 00 00 00 00           mov    $0x0,%eax
    130d:    e8 3e fd ff ff           callq  1050 <printf@plt>
    1312:    ba 03 00 00 00           mov    $0x3,%edx
    1317:    be 02 00 00 00           mov    $0x2,%esi
    131c:    48 8d 3d f5 2c 00 00     lea    0x2cf5(%rip),%rdi        # 4018 <a>
    1323:    e8 50 ff ff ff           callq  1278 <get_by_coordinates2>
    1328:    0f be c0                 movsbl %al,%eax
    132b:    89 c6                    mov    %eax,%esi
    132d:    48 8d 3d d0 0c 00 00     lea    0xcd0(%rip),%rdi        # 2004 <_IO_stdin_used+0x4>
    1334:    b8 00 00 00 00           mov    $0x0,%eax
    1339:    e8 12 fd ff ff           callq  1050 <printf@plt>
    133e:    ba 03 00 00 00           mov    $0x3,%edx
    1343:    be 02 00 00 00           mov    $0x2,%esi
    1348:    48 8d 3d c9 2c 00 00     lea    0x2cc9(%rip),%rdi        # 4018 <a>
    134f:    e8 54 ff ff ff           callq  12a8 <get_by_coordinates3>
    1354:    0f be c0                 movsbl %al,%eax
    1357:    89 c6                    mov    %eax,%esi
    1359:    48 8d 3d a4 0c 00 00     lea    0xca4(%rip),%rdi        # 2004 <_IO_stdin_used+0x4>
    1360:    b8 00 00 00 00           mov    $0x0,%eax
    1365:    e8 e6 fc ff ff           callq  1050 <printf@plt>
    136a:    b8 00 00 00 00           mov    $0x0,%eax
    136f:    5d                       pop    %rbp
    1370:    c3                       retq   
    1371:    66 2e 0f 1f 84 00 00     nopw   %cs:0x0(%rax,%rax,1)
    1378:    00 00 00
    137b:    0f 1f 44 00 00           nopl   0x0(%rax,%rax,1)

/*
 * arm
 */
000000000040055c <hang>:
  40055c:    d10043ff     sub    sp, sp, #0x10
  400560:    b9000fff     str    wzr, [sp, #12]        // x=0
  400564:    14000014     b    4005b4 <hang+0x58>    // for x
  400568:    b9000bff     str    wzr, [sp, #8]        // y=0
  40056c:    1400000c     b    40059c <hang+0x40>    // for y
  400570:    b0000080     adrp    x0, 411000 <__libc_start_main@GLIBC_2.17>
  400574:    9100e002     add    x2, x0, #0x38        // a
  400578:    b9800be0     ldrsw    x0, [sp, #8]        // x0=y
  40057c:    b9800fe1     ldrsw    x1, [sp, #12]        // x1=x
  400580:    d37ef421     lsl    x1, x1, #2        // x1=x<<2
  400584:    8b010041     add    x1, x2, x1        // x1=a+x<<2
  400588:    8b000020     add    x0, x1, x0        // x0=a+x<<2+y
  40058c:    3900001f     strb    wzr, [x0]        // [x0]=0
  400590:    b9400be0     ldr    w0, [sp, #8]        // w0=y
  400594:    11000400     add    w0, w0, #0x1        // y++
  400598:    b9000be0     str    w0, [sp, #8]        // [sp+8]=y
  40059c:    b9400be0     ldr    w0, [sp, #8]        // w0=y
  4005a0:    71000c1f     cmp    w0, #0x3        // 0x3-y
  4005a4:    54fffe6d     b.le    400570 <hang+0x14>
  4005a8:    b9400fe0     ldr    w0, [sp, #12]        // w0=x
  4005ac:    11000400     add    w0, w0, #0x1        // x++
  4005b0:    b9000fe0     str    w0, [sp, #12]        // [sp+12]=x
  4005b4:    b9400fe0     ldr    w0, [sp, #12]        // w0=x
  4005b8:    7100081f     cmp    w0, #0x2        // 0x2-x
  4005bc:    54fffd6d     b.le    400568 <hang+0xc>
  4005c0:    b9000bff     str    wzr, [sp, #8]        // y=0
  4005c4:    1400000c     b    4005f4 <hang+0x98>
  4005c8:    b9400be0     ldr    w0, [sp, #8]        // w0=y
  4005cc:    12001c02     and    w2, w0, #0xff        // w2=y&0xff
  4005d0:    b0000080     adrp    x0, 411000 <__libc_start_main@GLIBC_2.17>
  4005d4:    9100e001     add    x1, x0, #0x38        // x1=a
  4005d8:    b9800be0     ldrsw    x0, [sp, #8]        // x0=y
  4005dc:    8b000020     add    x0, x1, x0        // x0=a+y
  4005e0:    2a0203e1     mov    w1, w2            // w1=y&0xff
  4005e4:    39001001     strb    w1, [x0, #4]        // [a+y+4]=y=0xff
  4005e8:    b9400be0     ldr    w0, [sp, #8]        // w0=y
  4005ec:    11000400     add    w0, w0, #0x1        // w0=y+1
  4005f0:    b9000be0     str    w0, [sp, #8]        // [sp+8]=y+1
  4005f4:    b9400be0     ldr    w0, [sp, #8]        // w0=y+1
  4005f8:    71000c1f     cmp    w0, #0x3        // 0x3-(y+1)
  4005fc:    54fffe6d     b.le    4005c8 <hang+0x6c>
  400600:    52800000     mov    w0, #0x0                       // #0
  400604:    910043ff     add    sp, sp, #0x10
  400608:    d65f03c0     ret

000000000040060c <lie>:
  40060c:    d10043ff     sub    sp, sp, #0x10
  400610:    b9000fff     str    wzr, [sp, #12]        // x=0
  400614:    14000014     b    400664 <lie+0x58>    // for x
  400618:    b9000bff     str    wzr, [sp, #8]        // y=0
  40061c:    1400000c     b    40064c <lie+0x40>    // for y
  400620:    b0000080     adrp    x0, 411000 <__libc_start_main@GLIBC_2.17>
  400624:    9100e002     add    x2, x0, #0x38        // x2=a
  400628:    b9800be0     ldrsw    x0, [sp, #8]        // x0=y
  40062c:    b9800fe1     ldrsw    x1, [sp, #12]        // x1=x
  400630:    d37ef421     lsl    x1, x1, #2        // x1=x<<2
  400634:    8b010041     add    x1, x2, x1        // x1=a+x<<2
  400638:    8b000020     add    x0, x1, x0        // x0=a+x<<2+y
  40063c:    3900001f     strb    wzr, [x0]        // a+x<<2+y=0
  400640:    b9400be0     ldr    w0, [sp, #8]        // w0=y
  400644:    11000400     add    w0, w0, #0x1        // y++
  400648:    b9000be0     str    w0, [sp, #8]        
  40064c:    b9400be0     ldr    w0, [sp, #8]        // w0=y
  400650:    71000c1f     cmp    w0, #0x3        // w0-0x3
  400654:    54fffe6d     b.le    400620 <lie+0x14>    // for y
  400658:    b9400fe0     ldr    w0, [sp, #12]        // w0=x
  40065c:    11000400     add    w0, w0, #0x1        // x++
  400660:    b9000fe0     str    w0, [sp, #12]
  400664:    b9400fe0     ldr    w0, [sp, #12]        // x0=x
  400668:    7100081f     cmp    w0, #0x2        // w0-0x2
  40066c:    54fffd6d     b.le    400618 <lie+0xc>    // for x

  400670:    b9000fff     str    wzr, [sp, #12]        // x=0
  400674:    1400000d     b    4006a8 <lie+0x9c>
  400678:    b9400fe0     ldr    w0, [sp, #12]        // w0=x
  40067c:    12001c02     and    w2, w0, #0xff        // w2=x&0ff
  400680:    b0000080     adrp    x0, 411000 <__libc_start_main@GLIBC_2.17>
  400684:    9100e001     add    x1, x0, #0x38        // x1=a
  400688:    b9800fe0     ldrsw    x0, [sp, #12]        // x0=x
  40068c:    d37ef400     lsl    x0, x0, #2        // x0=x<<2
  400690:    8b000020     add    x0, x1, x0        // x0=a+x<<2
  400694:    2a0203e1     mov    w1, w2            // w1=x&0xff
  400698:    39000801     strb    w1, [x0, #2]        // [a+x<<2+2]=x&0xff
  40069c:    b9400fe0     ldr    w0, [sp, #12]        // w0=x
  4006a0:    11000400     add    w0, w0, #0x1        // x++
  4006a4:    b9000fe0     str    w0, [sp, #12]
  4006a8:    b9400fe0     ldr    w0, [sp, #12]        // w0=x
  4006ac:    7100081f     cmp    w0, #0x2        // x-0x2
  4006b0:    54fffe4d     b.le    400678 <lie+0x6c>
  4006b4:    52800000     mov    w0, #0x0                       // #0
  4006b8:    910043ff     add    sp, sp, #0x10
  4006bc:    d65f03c0     ret

00000000004006c0 <get_by_coordinates1>:
  4006c0:    d10043ff     sub    sp, sp, #0x10
  4006c4:    f90007e0     str    x0, [sp, #8]        // [xp+8]=x0    parameter1
  4006c8:    b90007e1     str    w1, [sp, #4]        // [sp+4]=x1    parameter2
  4006cc:    b90003e2     str    w2, [sp]        // [sp]=w2    parameter3
  4006d0:    b98007e0     ldrsw    x0, [sp, #4]        // x0=parameter2
  4006d4:    d37ef400     lsl    x0, x0, #2        // x0=parameter2<<2
  4006d8:    f94007e1     ldr    x1, [sp, #8]        // x1=parameter1
  4006dc:    8b000021     add    x1, x1, x0        // x1=parameter1+parameter2<<2
  4006e0:    b98003e0     ldrsw    x0, [sp]        // x0=parameter3
  4006e4:    38606820     ldrb    w0, [x1, x0]        // w0=[parameter1+parameter2<<2+parameter3]
  4006e8:    910043ff     add    sp, sp, #0x10
  4006ec:    d65f03c0     ret

00000000004006f0 <get_by_coordinates2>:
  4006f0:    d10043ff     sub    sp, sp, #0x10
  4006f4:    f90007e0     str    x0, [sp, #8]        // parameter1
  4006f8:    b90007e1     str    w1, [sp, #4]        // parameter2
  4006fc:    b90003e2     str    w2, [sp]        // parameter3
  400700:    b94007e0     ldr    w0, [sp, #4]        // w0=parameter2
  400704:    531e7401     lsl    w1, w0, #2        // w1=parameter2<<2
  400708:    b94003e0     ldr    w0, [sp]        // w0=parameter3
  40070c:    0b000020     add    w0, w1, w0        // w0=parameter2<<2+parameter3
  400710:    93407c00     sxtw    x0, w0            // x0=parameter2<<2+parameter3
  400714:    f94007e1     ldr    x1, [sp, #8]        // x1=parameter1
  400718:    8b000020     add    x0, x1, x0        // x0=parameter1+parameter2<<2+parameter3
  40071c:    39400000     ldrb    w0, [x0]        // w0=[parameter1+parameter2<<2+parameter3]
  400720:    910043ff     add    sp, sp, #0x10
  400724:    d65f03c0     ret

0000000000400728 <get_by_coordinates3>:
  400728:    d10043ff     sub    sp, sp, #0x10
  40072c:    f90007e0     str    x0, [sp, #8]        // x0=parameter1
  400730:    b90007e1     str    w1, [sp, #4]        // w1=parameter2
  400734:    b90003e2     str    w2, [sp]        // w2=parameter3
  400738:    b94007e0     ldr    w0, [sp, #4]        // w0=parameter2
  40073c:    531e7400     lsl    w0, w0, #2        // w0=parameter2<<2
  400740:    93407c01     sxtw    x1, w0            // x1=parameter2<<2
  400744:    b98003e0     ldrsw    x0, [sp]        // x0=parameter3
  400748:    8b000020     add    x0, x1, x0        // x0=parameter2<<2+parameter3
  40074c:    f94007e1     ldr    x1, [sp, #8]        // x1=parameter1
  400750:    8b000020     add    x0, x1, x0        // x0=parameter1+parameter2<<2+parameter3
  400754:    39400000     ldrb    w0, [x0]        // w0=[parameter1+parameter2<<2+parameter3]
  400758:    910043ff     add    sp, sp, #0x10
  40075c:    d65f03c0     ret

0000000000400760 <main>:
  400760:    a9bf7bfd     stp    x29, x30, [sp, #-16]!
  400764:    910003fd     mov    x29, sp
  400768:    b0000080     adrp    x0, 411000 <__libc_start_main@GLIBC_2.17>
  40076c:    9100e000     add    x0, x0, #0x38
  400770:    52800f61     mov    w1, #0x7b                      // #123
  400774:    39002c01     strb    w1, [x0, #11]
  400778:    b0000080     adrp    x0, 411000 <__libc_start_main@GLIBC_2.17>
  40077c:    9100e000     add    x0, x0, #0x38
  400780:    52800062     mov    w2, #0x3                       // #3
  400784:    52800041     mov    w1, #0x2                       // #2
  400788:    97ffffce     bl    4006c0 <get_by_coordinates1>
  40078c:    12001c00     and    w0, w0, #0xff
  400790:    2a0003e1     mov    w1, w0
  400794:    90000000     adrp    x0, 400000 <_init-0x3e8>
  400798:    9122c000     add    x0, x0, #0x8b0
  40079c:    97ffff2d     bl    400450 <printf@plt>
  4007a0:    b0000080     adrp    x0, 411000 <__libc_start_main@GLIBC_2.17>
  4007a4:    9100e000     add    x0, x0, #0x38
  4007a8:    52800062     mov    w2, #0x3                       // #3
  4007ac:    52800041     mov    w1, #0x2                       // #2
  4007b0:    97ffffd0     bl    4006f0 <get_by_coordinates2>
  4007b4:    12001c00     and    w0, w0, #0xff
  4007b8:    2a0003e1     mov    w1, w0
  4007bc:    90000000     adrp    x0, 400000 <_init-0x3e8>
  4007c0:    9122c000     add    x0, x0, #0x8b0
  4007c4:    97ffff23     bl    400450 <printf@plt>
  4007c8:    b0000080     adrp    x0, 411000 <__libc_start_main@GLIBC_2.17>
  4007cc:    9100e000     add    x0, x0, #0x38
  4007d0:    52800062     mov    w2, #0x3                       // #3
  4007d4:    52800041     mov    w1, #0x2                       // #2
  4007d8:    97ffffd4     bl    400728 <get_by_coordinates3>
  4007dc:    12001c00     and    w0, w0, #0xff
  4007e0:    2a0003e1     mov    w1, w0
  4007e4:    90000000     adrp    x0, 400000 <_init-0x3e8>
  4007e8:    9122c000     add    x0, x0, #0x8b0
  4007ec:    97ffff19     bl    400450 <printf@plt>
  4007f0:    52800000     mov    w0, #0x0                       // #0
  4007f4:    a8c17bfd     ldp    x29, x30, [sp], #16
  4007f8:    d65f03c0     ret

#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值