逆向-beginners之结构体-CPU信息

#include <stdio.h>

#ifdef __GNUC__
static inline void cpuid(int code, int *a, int *b, int *c, int *d)
{
    __asm volatile("cpuid":"=a"(*a), "=b"(*b), "=c"(*c), "=d"(*d):"a"(code));
}
#endif

#ifdef _MSC_VER
#include <intrin.h>
#endif

struct cpuid_1_eax
{
    unsigned int stepping:4;
    unsigned int model:4;
    unsigned int family_id:4;
    unsigned int processor_type:2;
    unsigned int reserved1:2;
    unsigned int extended_model_id:4;
    unsigned int extended_family_id:8;
    unsigned int reserved2:4;
};

int main()
{
    struct cpuid_1_eax * tmp;
    int b[4];

#ifdef _MSC_VER
    __cpuid(b, 1);
#endif

#ifdef __GNUC__
    cpuid(1, &b[0], &b[1], &b[2], &b[3]);
#endif

    tmp = (struct cpuid_1_eax *) &b[0];

    printf("stepping=%d\n", tmp->stepping);
    printf("model=%d\n", tmp->model);
    printf("family_id=%d\n", tmp->family_id);
    printf("processor_type=%d\n", tmp->processor_type);
    printf("extended_model_id=%d\n", tmp->extended_model_id);
    printf("extended_family_id=%d\n", tmp->extended_family_id);

    return 0;
}

#if 0
/*
 * intel
 */
0000000000001169 <cpuid>:
    1169:    55                       push   %rbp                // rsp=0x7fffffffe180    rbp=0x7fffffffe1c0
    116a:    48 89 e5                 mov    %rsp,%rbp        // rsp=0x7fffffffe180    rbp=0x7fffffffe180
    116d:    53                       push   %rbx                // rsp=0x7fffffffe178    rbp=0x7fffffffe180
    116e:    89 7d f4                 mov    %edi,-0xc(%rbp)    // edi=1                (rbp-0xc)=0x7fffffffe174:0x555552e000000001
    1171:    48 89 75 e8              mov    %rsi,-0x18(%rbp)    // rsi=0x7fffffffe1a0    (rbp-0x18)=0x7fffffffe168:0x00007fffffffe1a0
    1175:    48 89 55 e0              mov    %rdx,-0x20(%rbp)    // rdx=0x7fffffffe1a4    (rbp-0x20)=0x7fffffffe160:0x00007fffffffe1a4
    1179:    48 89 4d d8              mov    %rcx,-0x28(%rbp)    // rcx=0x7fffffffe1a8    (rbp-0x28)=0x7fffffffe158:0x00007fffffffe1a8
    117d:    4c 89 45 d0              mov    %r8,-0x30(%rbp)    // r8=0x7fffffffe1ac    (rbp-0x30)=0x7fffffffe150:0x00007fffffffe1ac
    1181:    8b 45 f4                 mov    -0xc(%rbp),%eax    // eax=1
    1184:    0f a2                    cpuid  
    1186:    89 de                    mov    %ebx,%esi        // esi=0x18400800
    1188:    89 c7                    mov    %eax,%edi        // edi=0x50657
    118a:    48 8b 45 e8              mov    -0x18(%rbp),%rax    // rax=0x7fffffffe1a0
    118e:    89 38                    mov    %edi,(%rax)        // (rax)=0x7fffffffe1a0:0x0000000000050657
    1190:    48 8b 45 e0              mov    -0x20(%rbp),%rax    // rax=0x7fffffffe1a4
    1194:    89 30                    mov    %esi,(%rax)        // (rax)=0x7fffffffe1a4:0x5555508018400800
    1196:    48 8b 45 d8              mov    -0x28(%rbp),%rax    // rax=0x7fffffffe1a8
    119a:    89 08                    mov    %ecx,(%rax)        // (rax)=0x7fffffffe1a8:0x000055557ffefbff    ecx=0x7ffefbff
    119c:    48 8b 45 d0              mov    -0x30(%rbp),%rax    // rax=0x7fffffffe1ac
    11a0:    89 10                    mov    %edx,(%rax)        // (rax)=0x7fffffffe1ac:0xffffe2b0bfebfbff    edx=0xbfebfbff
    11a2:    90                       nop                        // rsp=0x7fffffffe178    rbp=0x7fffffffe180
    11a3:    5b                       pop    %rbx                // rsp=0x7fffffffe180    rbp=0x7fffffffe180
    11a4:    5d                       pop    %rbp                // rsp=0x7fffffffe188    rbp=0x7fffffffe1c0
    11a5:    c3                       retq                    // rsp=0x7fffffffe190    rbp=0x7fffffffe1c0    retq 相当于 : pop %rip

00000000000011a6 <main>:
    11a6:    f3 0f 1e fa              endbr64                // rsp=0x7fffffffe1c8    rbp=0x0
    11aa:    55                       push   %rbp            // rsp=0x7fffffffe1c0    
    11ab:    48 89 e5                 mov    %rsp,%rbp    // rsp=0x7fffffffe1c0    rbp=0x7fffffffe1c0
    11ae:    48 83 ec 30              sub    $0x30,%rsp    // rsp=0x7fffffffe190    rbp=0x7fffffffe1c0
    11b2:    64 48 8b 04 25 28 00     mov    %fs:0x28,%rax    // rax=0xc6a79e60e6de8500
    11b9:    00 00 
    11bb:    48 89 45 f8              mov    %rax,-0x8(%rbp)    // (rbp-0x8)=0x7fffffffe1b8: 0xc6a79e60e6de8500
    11bf:    31 c0                    xor    %eax,%eax        // eax=0
    11c1:    48 8d 45 e0              lea    -0x20(%rbp),%rax        // rax=rbp-0x20=0x7fffffffe1a0
    11c5:    48 8d 70 0c              lea    0xc(%rax),%rsi        // rsi=rbp-0x20+0xc=0x7fffffffe1a0+0xc=0x7fffffffe1ac
    11c9:    48 8d 45 e0              lea    -0x20(%rbp),%rax        // rax=rbp-0x20=0x7fffffffe1a0
    11cd:    48 8d 48 08              lea    0x8(%rax),%rcx        // rcx=rbp-0x20+0x8=0x7fffffffe1a8
    11d1:    48 8d 45 e0              lea    -0x20(%rbp),%rax        // rax=rbp-0x20=0x7fffffffe1a0
    11d5:    48 8d 50 04              lea    0x4(%rax),%rdx        // rdx=rbp-0x20+0x4=0x7fffffffe1a4
    11d9:    48 8d 45 e0              lea    -0x20(%rbp),%rax        // rax=rbp-0x20=0x7fffffffe1a0
    11dd:    49 89 f0                 mov    %rsi,%r8            // r8=rbp-0x20+0xc=0x7fffffffe1ac
    11e0:    48 89 c6                 mov    %rax,%rsi        // rsi=rbp-0x20=0x7fffffffe1a0
    11e3:    bf 01 00 00 00           mov    $0x1,%edi        // edi=1
    11e8:    e8 7c ff ff ff           callq  1169 <cpuid>        // cpuid(edi, rsi, rdx, rcx, r8) (1, 0x7fffffffe1a0, 0x7fffffffe1a4, 0x7fffffffe1a8, 0x7fffffffe1ac)
                                                            // rsp=0x7fffffffe188    rbp=0x7fffffffe1c0
    11ed:    48 8d 45 e0              lea    -0x20(%rbp),%rax        // rsp=0x7fffffffe190    rbp=0x7fffffffe1c0    rax=0x7fffffffe1a0    rbp-0x20=0x7fffffffe1a0:0x1840080000050657
    11f1:    48 89 45 d8              mov    %rax,-0x28(%rbp)        // (rbp-0x28)=0x7fffffffe1a0    rax=0x7fffffffe1a0    rbp-0x28=0x7fffffffe198:0x00007fffffffe1a0
    11f5:    48 8b 45 d8              mov    -0x28(%rbp),%rax        // rax=(rbp-0x28)=0x7fffffffe1a0    rbp-0x28=0x7fffffffe198:0x00007fffffffe1a0
    11f9:    0f b6 00                 movzbl (%rax),%eax        // eax=0x57        (rax)=(rbp-0x28)=(0x7fffffffe1a0)=0x7fffffffe1a0:0x1840080000050657
    11fc:    83 e0 0f                 and    $0xf,%eax        // eax=eax&0xf=0x7        /* 取字节低四位 */
    11ff:    0f b6 c0                 movzbl %al,%eax            // eax=al=0x7
    1202:    89 c6                    mov    %eax,%esi        // esi=eax=0x7
    1204:    48 8d 3d f9 0d 00 00     lea    0xdf9(%rip),%rdi        # 2004 <_IO_stdin_used+0x4>
    120b:    b8 00 00 00 00           mov    $0x0,%eax
    1210:    e8 5b fe ff ff           callq  1070 <printf@plt>    // rsp=0x7fffffffe190    rbp=0x7fffffffe1c0
    1215:    48 8b 45 d8              mov    -0x28(%rbp),%rax        // rax=(rbp-0x28)=rbp-0x20=0x7fffffffe1a0
    1219:    0f b6 00                 movzbl (%rax),%eax        // eax=(rax)=(rbp-0x20)=0x57
    121c:    c0 e8 04                 shr    $0x4,%al            // al=al>>4=0x5        /* 取字节高四位 */
    121f:    0f b6 c0                 movzbl %al,%eax            // eax=al=0x5
    1222:    89 c6                    mov    %eax,%esi        // esi=eax=0x5
    1224:    48 8d 3d e6 0d 00 00     lea    0xde6(%rip),%rdi        # 2011 <_IO_stdin_used+0x11>
    122b:    b8 00 00 00 00           mov    $0x0,%eax
    1230:    e8 3b fe ff ff           callq  1070 <printf@plt>
    1235:    48 8b 45 d8              mov    -0x28(%rbp),%rax        // rax=0x7fffffffe1a0    x/xg 0x7fffffffe1a0:0x1840080000050657    x/8xb 0x7fffffffe1a0:0x57    0x06    0x05    0x00    0x00    0x08    0x40    0x18
    1239:    0f b6 40 01              movzbl 0x1(%rax),%eax        // eax=0x6    (rax+0x1)=0x7fffffffe1a0+1=0x7fffffffe1a1=0x6
    123d:    83 e0 0f                 and    $0xf,%eax        // eax=eax&0xf=0x6    
    1240:    0f b6 c0                 movzbl %al,%eax            // eax=al=0x6
    1243:    89 c6                    mov    %eax,%esi        // esi=0x6
    1245:    48 8d 3d cf 0d 00 00     lea    0xdcf(%rip),%rdi        # 201b <_IO_stdin_used+0x1b>
    124c:    b8 00 00 00 00           mov    $0x0,%eax
    1251:    e8 1a fe ff ff           callq  1070 <printf@plt>
    1256:    48 8b 45 d8              mov    -0x28(%rbp),%rax        // rax=0x7fffffffe1a0
    125a:    0f b6 40 01              movzbl 0x1(%rax),%eax        // eax=(rax+0x1)=0x6
    125e:    c0 e8 04                 shr    $0x4,%al            // al=al>>4=0x0
    1261:    83 e0 03                 and    $0x3,%eax        // eax&=3=0x0
    1264:    0f b6 c0                 movzbl %al,%eax            // eax=0x0
    1267:    89 c6                    mov    %eax,%esi
    1269:    48 8d 3d b9 0d 00 00     lea    0xdb9(%rip),%rdi        # 2029 <_IO_stdin_used+0x29>
    1270:    b8 00 00 00 00           mov    $0x0,%eax
    1275:    e8 f6 fd ff ff           callq  1070 <printf@plt>
    127a:    48 8b 45 d8              mov    -0x28(%rbp),%rax        // rax=0x7fffffffe1a0
    127e:    0f b6 40 02              movzbl 0x2(%rax),%eax        // eax=(rax+0x2)=0x5
    1282:    83 e0 0f                 and    $0xf,%eax            // eax=0x5
    1285:    0f b6 c0                 movzbl %al,%eax                // eax=0x5
    1288:    89 c6                    mov    %eax,%esi
    128a:    48 8d 3d ab 0d 00 00     lea    0xdab(%rip),%rdi        # 203c <_IO_stdin_used+0x3c>
    1291:    b8 00 00 00 00           mov    $0x0,%eax    
    1296:    e8 d5 fd ff ff           callq  1070 <printf@plt>
    129b:    48 8b 45 d8              mov    -0x28(%rbp),%rax        // rax=0x7fffffffe1a0
    129f:    0f b7 40 02              movzwl 0x2(%rax),%eax        // eax=0x5
    12a3:    66 c1 e8 04              shr    $0x4,%ax                // ax=0x0
    12a7:    80 e4 ff                 and    $0xff,%ah            // ah=0x0
    12aa:    0f b6 c0                 movzbl %al,%eax                // eax=0x0
    12ad:    89 c6                    mov    %eax,%esi
    12af:    48 8d 3d 9c 0d 00 00     lea    0xd9c(%rip),%rdi        # 2052 <_IO_stdin_used+0x52>
    12b6:    b8 00 00 00 00           mov    $0x0,%eax
    12bb:    e8 b0 fd ff ff           callq  1070 <printf@plt>
    12c0:    b8 00 00 00 00           mov    $0x0,%eax
    12c5:    48 8b 55 f8              mov    -0x8(%rbp),%rdx
    12c9:    64 48 33 14 25 28 00     xor    %fs:0x28,%rdx
    12d0:    00 00 
    12d2:    74 05                    je     12d9 <main+0x133>
    12d4:    e8 87 fd ff ff           callq  1060 <__stack_chk_fail@plt>
    12d9:    c9                       leaveq 
    12da:    c3                       retq   
    12db:    0f 1f 44 00 00           nopl   0x0(%rax,%rax,1)

/*
 * arm
 */

#endif

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值