C++继承对应的汇编代码

来源:互联网 发布:visio 软件下载最新 编辑:程序博客网 时间:2024/06/15 12:57

////  main.cpp//  asm_study////  Created by mac on 12-12-24.//  Copyright (c) 2012年 mac. All rights reserved.//#include <iostream>class base{public:    base(){}    virtual ~base(){}    virtual int print()const{ return _a; }    int _a;};class derived : public base{public:    derived(){}    virtual ~derived(){}    virtual int print()const{ return _b; }    int _b;};int main(int argc, const char * argv[]){    // insert code here...    derived* d=new derived();    std::cout << "Hello, World!\n";    d->print();    delete d;    return 0;}

asm_study`main at main.cpp:29:0x1000011a0:  pushq  %rbp0x1000011a1:  movq   %rsp, %rbp0x1000011a4:  subq   $96, %rsp0x1000011a8:  movl   $0, -4(%rbp)0x1000011af:  movl   %edi, -8(%rbp)0x1000011b2:  movq   %rsi, -16(%rbp)0x1000011b6:  movl   $16, %edi0x1000011bb:  callq  0x100001bac               ; symbol stub for: operator new(unsigned long)0x1000011c0:  movq   %rax, %rsi0x1000011c3:  movq   %rax, %rdi0x1000011c6:  movq   %rdi, -48(%rbp)0x1000011ca:  movq   %rax, %rdi0x1000011cd:  movq   %rsi, -56(%rbp)0x1000011d1:  callq  0x100001260               ; derived::derived() at main.cpp:220x1000011d6:  jmpq   0x1000011db               ; main + 59 at main.cpp:320x1000011db:  movq   3670(%rip), %rdi          ; (void *)0x00007fff73f26910: std::__1::cout0x1000011e2:  leaq   2835(%rip), %rsi          ; "Hello, World!\n"0x1000011e9:  movq   -56(%rbp), %rax0x1000011ed:  movq   %rax, -24(%rbp)0x1000011f1:  callq  0x100001b82               ; symbol stub for: std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::operator<<<std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*)0x1000011f6:  movq   -24(%rbp), %rsi0x1000011fa:  movq   (%rsi), %rdi0x1000011fd:  movq   %rdi, -64(%rbp)0x100001201:  movq   %rsi, %rdi0x100001204:  movq   -64(%rbp), %rsi0x100001208:  movq   %rax, -72(%rbp)0x10000120c:  callq  *16(%rsi)0x10000120f:  movq   -24(%rbp), %rsi0x100001213:  cmpq   $0, %rsi0x10000121a:  movl   %eax, -76(%rbp)0x10000121d:  movq   %rsi, -88(%rbp)0x100001221:  je     0x100001234               ; main + 148 at main.cpp:350x100001227:  movq   -88(%rbp), %rax0x10000122b:  movq   (%rax), %rcx0x10000122e:  movq   %rax, %rdi0x100001231:  callq  *8(%rcx)0x100001234:  movl   $0, %eax0x100001239:  addq   $96, %rsp0x10000123d:  popq   %rbp0x10000123e:  ret    0x10000123f:  movl   %edx, %ecx0x100001241:  movq   %rax, -32(%rbp)0x100001245:  movl   %ecx, -36(%rbp)0x100001248:  movq   -48(%rbp), %rdi0x10000124c:  callq  0x100001ba6               ; symbol stub for: operator delete(void*)0x100001251:  movq   -32(%rbp), %rdi0x100001255:  callq  0x100001bbe               ; symbol stub for: _Unwind_Resume