简体   繁体   English

如何在C ++汇编代码中找到VPTR?

[英]How to find VPTR in C++ assembly code?

class Base {
 public:
  Base() {}
  virtual void Get() { }
};

class Derivered : public Base {
 public:
  virtual void Get() { }
};

int main() {
  Base* base = new Derivered();
  base->Get();
  return 0;
}

I use gcc 5.4.0 to compile the code, and use objdump -S a.out to disassemble binary file. 我使用gcc 5.4.0编译代码,并使用objdump -S a.out分解二进制文件。 I want to find Base's vptr, but only display an unknown address 0x80487d4 . 我想找到Base的vptr,但只显示一个未知地址0x80487d4 The max address number is 0x80487b7 , I cann't understand. 最大地址为0x80487b7 ,我0x80487b7理解。 command list: g++ test.cpp -O0; objdump -S a.out 命令列表: g++ test.cpp -O0; objdump -S a.out g++ test.cpp -O0; objdump -S a.out

080486fe <_ZN4BaseC1Ev>:
 80486fe:   55                      push   %ebp
 80486ff:   89 e5                   mov    %esp,%ebp
 8048701:   ba d4 87 04 08          mov    $0x80487d4,%edx
 8048706:   8b 45 08                mov    0x8(%ebp),%eax
 8048709:   89 10                   mov    %edx,(%eax)
080486fe <_ZN4BaseC1Ev>:
  80486fe:   55                      push   %ebp
  80486ff:   89 e5                   mov    %esp,%ebp
  8048701:   ba d4 87 04 08          mov    $0x80487d4,%edx
  8048706:   8b 45 08                mov    0x8(%ebp),%eax
  8048709:   89 10                   mov    %edx,(%eax)

Is... 是...

push %ebp             ;- save frame pointer
mov %esp, %ebp        ;- mov esp-> ebp -ebp is frame pointer
mov $0x80487d4, %edx  ; load vptr address into edx
mov 0x8(%ebp), %eax   ; ld eax with address of this
mov %edx,(%eax)       ; store vptr in this byte 0

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM