逆向-beginners之结构体

#include <stdio.h>
#include <time.h>

void tm1()
{
    struct tm t;
    time_t unix_time;

    unix_time = time(NULL);

    localtime_r(&unix_time, &t);

    printf("Year: %d\n", t.tm_year+1990);
    printf("Month: %d\n", t.tm_mon);
    printf("Day: %d\n", t.tm_mday);
    printf("Hour: %d\n", t.tm_hour);
    printf("Minutes: %d\n", t.tm_min);
    printf("Seconds: %d\n", t.tm_sec);
}

void tm2()
{
    struct tm t;
    time_t unix_time;
    int i=0, tmp=0;

    unix_time = time(NULL);

    localtime_r(&unix_time, &t);

    for (i = 0; i < 9; i++) {
        tmp = ((int*)&t)[i];
        printf("0x%08X (%d)\n", tmp, tmp);
    }

}

int main()
{
    tm1();
    tm2();

    return 0;
}

#if 0
/*
 * intel
 */
00000000000011a9 <tm1>:
    11a9:    f3 0f 1e fa              endbr64 
    11ad:    55                       push   %rbp
    11ae:    48 89 e5                 mov    %rsp,%rbp
    11b1:    48 83 ec 50              sub    $0x50,%rsp
    11b5:    64 48 8b 04 25 28 00     mov    %fs:0x28,%rax
    11bc:    00 00 
    11be:    48 89 45 f8              mov    %rax,-0x8(%rbp)
    11c2:    31 c0                    xor    %eax,%eax
    11c4:    bf 00 00 00 00           mov    $0x0,%edi
    11c9:    e8 e2 fe ff ff           callq  10b0 <time@plt>    // time(NULL)
    11ce:    48 89 45 b8              mov    %rax,-0x48(%rbp)
    11d2:    48 8d 55 c0              lea    -0x40(%rbp),%rdx        // tm
    11d6:    48 8d 45 b8              lea    -0x48(%rbp),%rax        // unix_time
    11da:    48 89 d6                 mov    %rdx,%rsi
    11dd:    48 89 c7                 mov    %rax,%rdi
    11e0:    e8 9b fe ff ff           callq  1080 <localtime_r@plt>    // localtime(rdi, rsi)
    11e5:    8b 45 d4                 mov    -0x2c(%rbp),%eax        // eax=(rbp-0x2c)    rbp-0x2c=tm-0x14=(rbp-0x40)-0x14
    11e8:    05 c6 07 00 00           add    $0x7c6,%eax        // eax=(rbp-0x2c)+0x7c6
    11ed:    89 c6                    mov    %eax,%esi        // esi=(rbp-0x2c)+0x7c6
    11ef:    48 8d 3d 0e 0e 00 00     lea    0xe0e(%rip),%rdi        # 2004 <_IO_stdin_used+0x4>    rdi=2004
    11f6:    b8 00 00 00 00           mov    $0x0,%eax
    11fb:    e8 a0 fe ff ff           callq  10a0 <printf@plt>    // printf(rdi, esi)
    1200:    8b 45 d0                 mov    -0x30(%rbp),%eax        // tm-0x10
    1203:    89 c6                    mov    %eax,%esi
    1205:    48 8d 3d 02 0e 00 00     lea    0xe02(%rip),%rdi        # 200e <_IO_stdin_used+0xe>
    120c:    b8 00 00 00 00           mov    $0x0,%eax
    1211:    e8 8a fe ff ff           callq  10a0 <printf@plt>
    1216:    8b 45 cc                 mov    -0x34(%rbp),%eax        // tm-0xc
    1219:    89 c6                    mov    %eax,%esi
    121b:    48 8d 3d f7 0d 00 00     lea    0xdf7(%rip),%rdi        # 2019 <_IO_stdin_used+0x19>
    1222:    b8 00 00 00 00           mov    $0x0,%eax
    1227:    e8 74 fe ff ff           callq  10a0 <printf@plt>
    122c:    8b 45 c8                 mov    -0x38(%rbp),%eax        // tm-8
    122f:    89 c6                    mov    %eax,%esi
    1231:    48 8d 3d ea 0d 00 00     lea    0xdea(%rip),%rdi        # 2022 <_IO_stdin_used+0x22>
    1238:    b8 00 00 00 00           mov    $0x0,%eax
    123d:    e8 5e fe ff ff           callq  10a0 <printf@plt>
    1242:    8b 45 c4                 mov    -0x3c(%rbp),%eax        // tm-4
    1245:    89 c6                    mov    %eax,%esi
    1247:    48 8d 3d de 0d 00 00     lea    0xdde(%rip),%rdi        # 202c <_IO_stdin_used+0x2c>
    124e:    b8 00 00 00 00           mov    $0x0,%eax
    1253:    e8 48 fe ff ff           callq  10a0 <printf@plt>
    1258:    8b 45 c0                 mov    -0x40(%rbp),%eax        // tm
    125b:    89 c6                    mov    %eax,%esi
    125d:    48 8d 3d d5 0d 00 00     lea    0xdd5(%rip),%rdi        # 2039 <_IO_stdin_used+0x39>
    1264:    b8 00 00 00 00           mov    $0x0,%eax
    1269:    e8 32 fe ff ff           callq  10a0 <printf@plt>
    126e:    90                       nop
    126f:    48 8b 45 f8              mov    -0x8(%rbp),%rax
    1273:    64 48 33 04 25 28 00     xor    %fs:0x28,%rax
    127a:    00 00 
    127c:    74 05                    je     1283 <tm1+0xda>
    127e:    e8 0d fe ff ff           callq  1090 <__stack_chk_fail@plt>
    1283:    c9                       leaveq 
    1284:    c3                       retq   

0000000000001285 <tm2>:
    1285:    f3 0f 1e fa              endbr64 
    1289:    55                       push   %rbp
    128a:    48 89 e5                 mov    %rsp,%rbp
    128d:    48 83 ec 50              sub    $0x50,%rsp
    1291:    64 48 8b 04 25 28 00     mov    %fs:0x28,%rax
    1298:    00 00 
    129a:    48 89 45 f8              mov    %rax,-0x8(%rbp)
    129e:    31 c0                    xor    %eax,%eax
    12a0:    c7 45 b0 00 00 00 00     movl   $0x0,-0x50(%rbp)    // (rbp-0x50)=0
    12a7:    c7 45 b4 00 00 00 00     movl   $0x0,-0x4c(%rbp)    // (rbp-0x4c)=0
    12ae:    bf 00 00 00 00           mov    $0x0,%edi    // edi=0
    12b3:    e8 f8 fd ff ff           callq  10b0 <time@plt>    // time(0)
    12b8:    48 89 45 b8              mov    %rax,-0x48(%rbp)    // (rbp-0x48)=time return value
    12bc:    48 8d 55 c0              lea    -0x40(%rbp),%rdx    
    12c0:    48 8d 45 b8              lea    -0x48(%rbp),%rax
    12c4:    48 89 d6                 mov    %rdx,%rsi
    12c7:    48 89 c7                 mov    %rax,%rdi
    12ca:    e8 b1 fd ff ff           callq  1080 <localtime_r@plt>    // localtime(rdi, rsi)
    12cf:    c7 45 b0 00 00 00 00     movl   $0x0,-0x50(%rbp)        // (rbp-0x50)=0 ==> x=0
    12d6:    eb 36                    jmp    130e <tm2+0x89>        // for x
    12d8:    8b 45 b0                 mov    -0x50(%rbp),%eax        
    12db:    48 98                    cltq                   // rax=x
    12dd:    48 8d 14 85 00 00 00     lea    0x0(,%rax,4),%rdx    // rdx=x*4+0x0
    12e4:    00 
    12e5:    48 8d 45 c0              lea    -0x40(%rbp),%rax        // rax=rbp-0x40
    12e9:    48 01 d0                 add    %rdx,%rax        // rax=rbp-0x40+(x*4)
    12ec:    8b 00                    mov    (%rax),%eax        // eax=(rbp-0x40+(x*4))
    12ee:    89 45 b4                 mov    %eax,-0x4c(%rbp)        // (rbp-0x4c)=(rbp-0x40+(x*4))
    12f1:    8b 55 b4                 mov    -0x4c(%rbp),%edx        // edx=(rbp-0x40+(x*4))
    12f4:    8b 45 b4                 mov    -0x4c(%rbp),%eax        // eax=(rbp-0x40+(x*4))
    12f7:    89 c6                    mov    %eax,%esi        // esi=(rbp-0x40+(x*4))
    12f9:    48 8d 3d 46 0d 00 00     lea    0xd46(%rip),%rdi        # 2046 <_IO_stdin_used+0x46>
    1300:    b8 00 00 00 00           mov    $0x0,%eax
    1305:    e8 96 fd ff ff           callq  10a0 <printf@plt>
    130a:    83 45 b0 01              addl   $0x1,-0x50(%rbp)        // x++
    130e:    83 7d b0 08              cmpl   $0x8,-0x50(%rbp)        // x-0x8
    1312:    7e c4                    jle    12d8 <tm2+0x53>        // for x
    1314:    90                       nop
    1315:    48 8b 45 f8              mov    -0x8(%rbp),%rax
    1319:    64 48 33 04 25 28 00     xor    %fs:0x28,%rax
    1320:    00 00 
    1322:    74 05                    je     1329 <tm2+0xa4>
    1324:    e8 67 fd ff ff           callq  1090 <__stack_chk_fail@plt>
    1329:    c9                       leaveq 
    132a:    c3                       retq   

000000000000132b <main>:
    132b:    f3 0f 1e fa              endbr64 
    132f:    55                       push   %rbp
    1330:    48 89 e5                 mov    %rsp,%rbp
    1333:    90                       nop
    1334:    5d                       pop    %rbp
    1335:    c3                       retq   
    1336:    66 2e 0f 1f 84 00 00     nopw   %cs:0x0(%rax,%rax,1)
    133d:    00 00 00 

/*
 * arm
 */
00000000004005fc <tm1>:
  4005fc:    a9bb7bfd     stp    x29, x30, [sp, #-80]!
  400600:    910003fd     mov    x29, sp
  400604:    d2800000     mov    x0, #0x0                       // #0
  400608:    97ffffaa     bl    4004b0 <time@plt>        // time(x0)
  40060c:    f9000ba0     str    x0, [x29, #16]
  400610:    910063a1     add    x1, x29, #0x18
  400614:    910043a0     add    x0, x29, #0x10
  400618:    97ffffa2     bl    4004a0 <localtime_r@plt>    // localtime(x0, x1)
  40061c:    b9402fa0     ldr    w0, [x29, #44]
  400620:    111f1801     add    w1, w0, #0x7c6
  400624:    90000000     adrp    x0, 400000 <_init-0x468>    
  400628:    911f2000     add    x0, x0, #0x7c8
  40062c:    97ffffb1     bl    4004f0 <printf@plt>
  400630:    b9402ba1     ldr    w1, [x29, #40]
  400634:    90000000     adrp    x0, 400000 <_init-0x468>
  400638:    911f6000     add    x0, x0, #0x7d8
  40063c:    97ffffad     bl    4004f0 <printf@plt>
  400640:    b94027a1     ldr    w1, [x29, #36]
  400644:    90000000     adrp    x0, 400000 <_init-0x468>
  400648:    911fa000     add    x0, x0, #0x7e8
  40064c:    97ffffa9     bl    4004f0 <printf@plt>
  400650:    b94023a1     ldr    w1, [x29, #32]
  400654:    90000000     adrp    x0, 400000 <_init-0x468>
  400658:    911fe000     add    x0, x0, #0x7f8
  40065c:    97ffffa5     bl    4004f0 <printf@plt>
  400660:    b9401fa1     ldr    w1, [x29, #28]
  400664:    90000000     adrp    x0, 400000 <_init-0x468>
  400668:    91202000     add    x0, x0, #0x808
  40066c:    97ffffa1     bl    4004f0 <printf@plt>
  400670:    b9401ba1     ldr    w1, [x29, #24]
  400674:    90000000     adrp    x0, 400000 <_init-0x468>
  400678:    91206000     add    x0, x0, #0x818
  40067c:    97ffff9d     bl    4004f0 <printf@plt>
  400680:    d503201f     nop
  400684:    a8c57bfd     ldp    x29, x30, [sp], #80
  400688:    d65f03c0     ret

000000000040068c <tm2>:
  40068c:    a9ba7bfd     stp    x29, x30, [sp, #-96]!
  400690:    910003fd     mov    x29, sp
  400694:    b9005fbf     str    wzr, [x29, #92]
  400698:    b9005bbf     str    wzr, [x29, #88]
  40069c:    d2800000     mov    x0, #0x0                       // #0
  4006a0:    97ffff84     bl    4004b0 <time@plt>
  4006a4:    f9000fa0     str    x0, [x29, #24]
  4006a8:    910083a1     add    x1, x29, #0x20
  4006ac:    910063a0     add    x0, x29, #0x18
  4006b0:    97ffff7c     bl    4004a0 <localtime_r@plt>
  4006b4:    b9005fbf     str    wzr, [x29, #92]
  4006b8:    1400000f     b    4006f4 <tm2+0x68>
  4006bc:    b9805fa0     ldrsw    x0, [x29, #92]
  4006c0:    d37ef400     lsl    x0, x0, #2
  4006c4:    910083a1     add    x1, x29, #0x20
  4006c8:    8b000020     add    x0, x1, x0
  4006cc:    b9400000     ldr    w0, [x0]
  4006d0:    b9005ba0     str    w0, [x29, #88]
  4006d4:    90000000     adrp    x0, 400000 <_init-0x468>
  4006d8:    9120a000     add    x0, x0, #0x828
  4006dc:    b9405ba2     ldr    w2, [x29, #88]
  4006e0:    b9405ba1     ldr    w1, [x29, #88]
  4006e4:    97ffff83     bl    4004f0 <printf@plt>
  4006e8:    b9405fa0     ldr    w0, [x29, #92]
  4006ec:    11000400     add    w0, w0, #0x1
  4006f0:    b9005fa0     str    w0, [x29, #92]
  4006f4:    b9405fa0     ldr    w0, [x29, #92]
  4006f8:    7100201f     cmp    w0, #0x8
  4006fc:    54fffe0d     b.le    4006bc <tm2+0x30>
  400700:    d503201f     nop
  400704:    a8c67bfd     ldp    x29, x30, [sp], #96
  400708:    d65f03c0     ret

000000000040070c <main>:
  40070c:    d503201f     nop
  400710:    d65f03c0     ret
  400714:    00000000     .inst    0x00000000 ; undefined


#endif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值