//
// 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 %rbp
0x1000011a1: movq %rsp, %rbp
0x1000011a4: subq $96, %rsp
0x1000011a8: movl $0, -4(%rbp)
0x1000011af: movl %edi, -8(%rbp)
0x1000011b2: movq %rsi, -16(%rbp)
0x1000011b6: movl $16, %edi
0x1000011bb: callq 0x100001bac ; symbol stub for: operator new(unsigned long)
0x1000011c0: movq %rax, %rsi
0x1000011c3: movq %rax, %rdi
0x1000011c6: movq %rdi, -48(%rbp)
0x1000011ca: movq %rax, %rdi
0x1000011cd: movq %rsi, -56(%rbp)
0x1000011d1: callq 0x100001260 ; derived::derived() at main.cpp:22
0x1000011d6: jmpq 0x1000011db ; main + 59 at main.cpp:32
0x1000011db: movq 3670(%rip), %rdi ; (void *)0x00007fff73f26910: std::__1::cout
0x1000011e2: leaq 2835(%rip), %rsi ; "Hello, World!\n"
0x1000011e9: movq -56(%rbp), %rax
0x1000011ed: 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), %rsi
0x1000011fa: movq (%rsi), %rdi
0x1000011fd: movq %rdi, -64(%rbp)
0x100001201: movq %rsi, %rdi
0x100001204: movq -64(%rbp), %rsi
0x100001208: movq %rax, -72(%rbp)
0x10000120c: callq *16(%rsi)
0x10000120f: movq -24(%rbp), %rsi
0x100001213: cmpq $0, %rsi
0x10000121a: movl %eax, -76(%rbp)
0x10000121d: movq %rsi, -88(%rbp)
0x100001221: je 0x100001234 ; main + 148 at main.cpp:35
0x100001227: movq -88(%rbp), %rax
0x10000122b: movq (%rax), %rcx
0x10000122e: movq %rax, %rdi
0x100001231: callq *8(%rcx)
0x100001234: movl $0, %eax
0x100001239: addq $96, %rsp
0x10000123d: popq %rbp
0x10000123e: ret
0x10000123f: movl %edx, %ecx
0x100001241: movq %rax, -32(%rbp)
0x100001245: movl %ecx, -36(%rbp)
0x100001248: movq -48(%rbp), %rdi
0x10000124c: callq 0x100001ba6 ; symbol stub for: operator delete(void*)
0x100001251: movq -32(%rbp), %rdi
0x100001255: callq 0x100001bbe ; symbol stub for: _Unwind_Resume