c++虛擬函式反彙編特徵
阿新 • • 發佈:2021-07-18
class MyClass { public: virtual int getNumber() { return m; } virtual void setnumber(int number) { m = number; } private: int m; };
這裡例項化類大小佔8個位元組 int*4+32位的指標 虛表
在初始化預設建構函式時 會把虛擬函式指標放到虛表中 通過虛表來呼叫函式 虛擬函式多型性 都是和繼承有關
#include <iostream> usingnamespace 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指標解引用 找到虛表
從此山高路遠,縱馬揚鞭。願往後旅途,三冬暖,春不寒,天黑有燈,下雨有傘。此生盡興,不負勇往。