GCC平臺獲取C++成員虛函數地址可使用如下方法
可以采用內聯匯編的方式獲取
上面的代碼在VS2015中編譯通過。
下面的代碼可以在GCC和Visual C++共同編譯運行。
/**********************@className:類名稱@pObj:類對象地址@index:虛函數表項(從0開始)**********************/void showVtableContent(char* className, void* pObj, int index){ unsigned long* pAddr=NULL; pAddr=reinterpret_cast<unsigned long*>(pObj); pAddr=(unsigned long*)*pAddr; //獲取虛函數表指針 cout<<className<<"'s vtable["<<index<<"]"; cout<<": 0x"<<(void*)pAddr[index]<<endl;}//使用示例:class Base{ int i;public: virtual void f1(){ cout<<"Base's f1()"<<endl; } virtual void f2(){ cout<<"Base's f2()"<<endl; }};Base b;showVtableContent("Base",&b,0); //輸出第一個虛函數Base::f1的地址showVtableContent("Base",&b,1); //輸出第二個虛函數Base::f2的地址[1]print address of virtual member function [2]動態聯編實現原理分析
新聞熱點
疑難解答
圖片精選