国产探花免费观看_亚洲丰满少妇自慰呻吟_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]動態聯編實現原理分析

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 高安市| 介休市| 岐山县| 万载县| 建昌县| 六安市| 泽州县| 新干县| 万宁市| 商洛市| 嘉义市| 农安县| 瑞昌市| 宜章县| 敖汉旗| 东乡县| 阿城市| 东平县| 临汾市| 壤塘县| 嘉定区| 赞皇县| 武宣县| 疏附县| 临朐县| 三都| 黑河市| 兴宁市| 修文县| 盈江县| 昌江| 合水县| 盐源县| 贵阳市| 高唐县| 页游| 鹰潭市| 定襄县| 乌拉特中旗| 娄底市| 峨眉山市|