国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表

圖片精選

主站蜘蛛池模板: 凤凰县| 东至县| 永昌县| 永登县| 台南县| 全南县| 林西县| 肇东市| 博湖县| 南丰县| 海盐县| 哈巴河县| 会同县| 和平县| 浦县| 福贡县| 女性| 呼玛县| 广宗县| 读书| 佛学| 青岛市| 闵行区| 青州市| 饶阳县| 嘉祥县| 抚宁县| 浪卡子县| 嘉黎县| 开阳县| 南和县| 双辽市| 简阳市| 阿拉尔市| 运城市| 南召县| 长岭县| 卢氏县| 大兴区| 张家川| 弋阳县|