国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

獲取C++類成員虛函數(shù)地址

2019-11-08 01:05:44
字體:
供稿:網(wǎng)友

1.GCC平臺

GCC平臺獲取C++成員虛函數(shù)地址可使用如下方法[1]

class Base{ int i;public: virtual void f1(){ cout<<"Base's f1()"<<endl; }};Base b;void (Base::*mfp)() = &Base::f1;上面的代碼在linux g++ (GCC) 4.8.5中編譯通過。

2.Visual C++平臺

可以采用內(nèi)聯(lián)匯編的方式獲取[2],代碼如下:

#define ShowFuncAddress(function) _asm{/ mov eax, function}/ _asm{mov p,eax}/ cout<<"Address of "#function": "<<p<<endl;//使用示例ShowFuncAddress(Base::f1);

上面的代碼在VS2015中編譯通過。

3.通過訪問虛函數(shù)表獲取虛函數(shù)地址

下面的代碼可以在GCC和Visual C++共同編譯運行。

/**********************@className:類名稱@pObj:類對象地址@index:虛函數(shù)表項(從0開始)**********************/void showVtableContent(char* className, void* pObj, int index){ unsigned long* pAddr=NULL; pAddr=reinterpret_cast<unsigned long*>(pObj); pAddr=(unsigned long*)*pAddr; //獲取虛函數(shù)表指針 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); //輸出第一個虛函數(shù)Base::f1的地址showVtableContent("Base",&b,1); //輸出第二個虛函數(shù)Base::f2的地址

參考文獻(xiàn)

[1]print address of virtual member function [2]動態(tài)聯(lián)編實現(xiàn)原理分析


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 泊头市| 临武县| 格尔木市| 大邑县| 六安市| 马尔康县| 土默特左旗| 石屏县| 黑水县| 衡东县| 阿尔山市| 徐水县| 承德县| 陆川县| 黑龙江省| 韩城市| 贵溪市| 尼玛县| 闵行区| 纳雍县| 叙永县| 钟山县| 商河县| 昌乐县| 洮南市| 山阴县| 汽车| 三门峡市| 绥阳县| 漾濞| 商水县| 九龙坡区| 乳山市| 宣武区| 监利县| 利辛县| 乌鲁木齐市| 濉溪县| 永修县| 宝应县| 洛隆县|