Guest User

Untitled

a guest
Jul 17th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.86 KB | None | 0 0
  1. main:
  2. push rbx
  3.  
  4. # allocate space for a C on the stack
  5. sub rsp, 16
  6.  
  7. # initialise c's vtable (note: only one)
  8. mov QWORD PTR [rsp+8], OFFSET FLAT:vtable for C+16
  9.  
  10. # use c
  11. lea rdi, [rsp+8]
  12. call do_something(C&)
  13.  
  14. # destruction sequence through virtual destructor
  15. mov QWORD PTR [rsp+8], OFFSET FLAT:vtable for B+16
  16. lea rdi, [rsp+8]
  17. call A::~A() [base object destructor]
  18.  
  19. add rsp, 16
  20. xor eax, eax
  21. pop rbx
  22. ret
  23. mov rbx, rax
  24. jmp .L10
  25.  
  26. struct A
  27. {
  28. virtual void foo() = 0;
  29. virtual ~A();
  30. };
  31.  
  32. struct B : A {};
  33.  
  34. struct C : B {
  35.  
  36. virtual void extrafoo()
  37. {
  38. }
  39.  
  40. void foo() override {
  41. extrafoo();
  42. }
  43.  
  44. };
  45.  
  46. int main()
  47. {
  48. extern void do_something(C&);
  49. auto c = C();
  50. do_something(c);
  51. }
Add Comment
Please, Sign In to add comment