1
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;
}
gcc 5.4.0を使用してコードをコンパイルし、objdump -S a.out
を使用してバイナリファイルを逆アセンブルします。 Baseのvptrを探したいが、未知のアドレス0x80487d4
しか表示しない。最大アドレス番号は0x80487b7
です。わかりません。 コマンドリスト:g++ test.cpp -O0; objdump -S a.out
VPTRをC++アセンブリコードで見つけるには?
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)
は必ず最適化がオフになっていることを確認します。 –
この[記事](http://phrack.org/issues/56/8.html)を読んでいますか? – perror
このコンテキストのように最適化を行うと、コンパイラが関数呼び出しを無効にしてインライン化し、除外することもできます。 – WhiZTiM