C对象的对象转储中有哪些列?

C对象的对象转储中有哪些列?,c,object,C,Object,使用objdump-S——反汇编hello,我得到如下输出: 000000000000064a <main>: 64a: 55 push %rbp 64b: 48 89 e5 mov %rsp,%rbp 64e: 48 83 ec 10 sub $0x10,%rsp 652: c7 45 f4 00 00 00 00 movl $0x0,-

使用
objdump-S——反汇编hello
,我得到如下输出:

000000000000064a <main>:
 64a:   55                      push   %rbp
 64b:   48 89 e5                mov    %rsp,%rbp
 64e:   48 83 ec 10             sub    $0x10,%rsp
 652:   c7 45 f4 00 00 00 00    movl   $0x0,-0xc(%rbp)
 659:   c7 45 f8 01 00 00 00    movl   $0x1,-0x8(%rbp)
 660:   8b 55 f4                mov    -0xc(%rbp),%edx
 663:   8b 45 f8                mov    -0x8(%rbp),%eax
 666:   01 d0                   add    %edx,%eax
 668:   89 45 fc                mov    %eax,-0x4(%rbp)
 66b:   8b 45 fc                mov    -0x4(%rbp),%eax
 66e:   89 c6                   mov    %eax,%esi
 670:   48 8d 3d 9d 00 00 00    lea    0x9d(%rip),%rdi        # 714 <_IO_stdin_used+0x4>
 677:   b8 00 00 00 00          mov    $0x0,%eax
 67c:   e8 9f fe ff ff          callq  520 <printf@plt>
 681:   b8 00 00 00 00          mov    $0x0,%eax
 686:   c9                      leaveq 
 687:   c3                      retq   
 688:   0f 1f 84 00 00 00 00    nopl   0x0(%rax,%rax,1)
 68f:   00 
0000000000000 64A:
64a:55%rbp
64b:48 89 e5 mov%rsp,%rbp
64e:48 83 ec 10分$0x10,%rsp
652:c7 45 f4 00移动$0x0,-0xc(%rbp)
659:c7 45 f8 01 00移动$0x1,-0x8(%rbp)
660:8b 55 f4 mov-0xc(%rbp),%edx
663:8b 45 f8 mov-0x8(%rbp),%eax
666:01 d0添加%edx,%eax
668:89 45 fc mov%eax,-0x4(%rbp)
66b:8b 45 fc mov-0x4(%rbp),%eax
66e:89 c6 mov%eax%esi
670:48 8d 3d 9d 00 00 lea 0x9d(%rip),%rdi#714
677:b8 00 mov$0x0,%eax
67c:e8 9f fe ff ff callq 520
681:b8 00 mov$0x0,%eax
686:c9-Q
687:c3 retq
688:0f 1f 84 00 nopl 0x0(%rax,%rax,1)
68f:00
各栏里有什么?在
#
是一个注释之后,我在最后得到了这个结论。
55
对于
push
意味着什么?

这些字段是:

  • 0000000000000 64A
    :符号和
  • 64a
    :十六进制地址
  • 55
    :十六进制字节,即指令的机器代码
  • push
    :指令操作码的助记符
  • %rbp
    :指令的操作数
操作码字节可能跨越两行,例如

401230:       c7 05 da 5f 20 00 01    movl   $0x1,0x205fda(%rip)
401237:       00 00 00

可以,但不是每个
mov
都必须有相同的操作码?参见例如
660
663
@TMOTTM当然不是,这些指令有不同的操作数(通常被视为指令的一部分)。