1. 程式人生 > 其它 >c++虛擬函式反彙編特徵

c++虛擬函式反彙編特徵

class MyClass
{
public:
    virtual int getNumber()
    {
        return m;
    }
    virtual void setnumber(int number)
    {
        m = number;
    }
    
private:
    int m;
};

這裡例項化類大小佔8個位元組 int*4+32位的指標 虛表

在初始化預設建構函式時 會把虛擬函式指標放到虛表中 通過虛表來呼叫函式 虛擬函式多型性 都是和繼承有關

#include <iostream>
using
namespace std; class A { public: virtual void foo() { cout << "A::foo() is called" << endl; } }; class B :public A { public: void foo() { cout << "B::foo() is called" << endl; } }; int main(void) { A* a = new B(); a->foo();
return 0; }

在呼叫父類後 會去從虛表中直接呼叫 b的foo地址

在pop ecx 拿到this指標地址 再去賦值

通過對暫存器的值判斷 可以肯定 this指標裡儲存的時 虛表地址可以動過 ida 找到所有函式引用 就能找到所有有關函式 也可以通過反推找到建構函式

其實本質上來說就是 類物件成員有一個 虛擬函式指標型別 可以通過 this指標解引用 找到虛表

從此山高路遠,縱馬揚鞭。願往後旅途,三冬暖,春不寒,天黑有燈,下雨有傘。此生盡興,不負勇往。