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

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

如何獲取C++類成員虛函數地址的示例代碼

2020-01-26 13:57:38
字體:
來源:轉載
供稿:網友

本文主要給大家介紹了關于如何獲取C++類成員虛函數地址的相關內容,分享出來供大家參考學習,話不多說了,來一起看看詳細的介紹:

1.GCC平臺

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

class Base{ int i;public: virtual void f1(){  cout<<"Base's f1()"<<endl; }};Base b;void (Base::*mfp)() = &Base::f1;printf("address: %p", (void*)(b->*mfp));

上面的代碼在Linux g++ (GCC) 4.8.5中編譯通過。

2.Visual C++平臺

可以采用內聯匯編的方式獲取[2],代碼如下:

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

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

3.通過訪問虛函數表獲取虛函數地址

下面的代碼可以在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]動態聯編實現原理分析

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 青河县| 威远县| 长海县| 安塞县| 汝阳县| 惠水县| 双流县| 大渡口区| 龙岩市| 修武县| 平遥县| 巨鹿县| 揭阳市| 靖边县| 康定县| 万载县| 游戏| 临沧市| 金寨县| 酒泉市| 聊城市| 元朗区| 章丘市| 自贡市| 文山县| 尼木县| 贵南县| 涞源县| 商都县| 明光市| 桃江县| 南宁市| 四会市| 长兴县| 奉贤区| 舒城县| 永福县| 紫阳县| 琼中| 德安县| 孟连|