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当然不是,这些指令有不同的操作数(通常被视为指令的一部分)。