青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 8  文章 - 26  trackbacks - 0
<2009年12月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用鏈接

留言簿(5)

隨筆檔案

文章分類

文章檔案

相冊

C++語言

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

 

今天在網上看了一篇關于C++虛函數表的文章,讓我對C++又有了更深了的理解,文章鏈接:http://www.51cto.com/art/200712/62673_2.htm

在這篇文章中講到了通過虛函數表訪問私有的虛函數的問題,問題就出在C++在虛函數表中保存了虛函數的地址,而這個地址又很方便查找。
在每個C++對象實例的開頭存儲這這個對象的虛函數表的指針,通過這個指針可找到虛函數表,在虛函數表中就存著虛函數指針,這樣我們就可以騙過編譯器訪問私有的虛函數了。

 1class base
 2{
 3private:
 4    virtual    void f(){cout<<"base_f()"<<endl;}
 5}
;
 6class child:public base
 7{
 8private:
 9    virtual void f(){cout<<"child_f()"<<endl;};
10    void g(){cout<<"base_g()"<<endl;}
11    
12}
;
13void main()
14{
15    typedef void(*Fun)(void);
16    child b;
17    Fun pFun;
18    pFun = (Fun)*((int*)*(int*)(&b));
19    pFun();
20}

輸出結果:child_f();

這樣就訪問了私有的虛函數了。

但是這樣只能訪問私有的虛函數,那怎么才能訪問任意的私有函數呢,像child類的g()函數,還請高人指點。
posted on 2008-11-03 20:43 楊彬彬 閱讀(2841) 評論(10)  編輯 收藏 引用

FeedBack:
# re: 通過虛函數表訪問私有虛函數 2008-11-03 22:50 giscn
私有函數本來就是防止別人訪問的。最簡單的辦法是將類定義中的 private 改成 public  回復  更多評論
  
# re: 通過虛函數表訪問私有虛函數 2008-11-03 23:08 lonkil
這種將地址轉成函數指針的方法,好像只能訪問第一個吧?如果有兩個虛擬函數,就不好訪問了吧?

其實這個實驗只能讓你更清楚,虛函數表的物理位置,沒有什么實際意義,個人愚見,哈哈。

  回復  更多評論
  
# re: 通過虛函數表訪問私有虛函數 2008-11-04 12:23 abc
函數帶參數的怎么訪問?  回復  更多評論
  
# re: 通過虛函數表訪問私有虛函數 2008-11-04 15:15 zuhd
看了那篇文章,好像只要是虛函數,就可以通過虛表的指針獲得,至于每個函數在虛表中的偏移量,我也沒有理解  回復  更多評論
  
# re: 通過虛函數表訪問私有虛函數 2008-11-04 15:31 zuhd
http://blog.csdn.net/haoel/archive/2007/12/18/1948051.aspx
這是原文地址,看了就明白了,寫得很贊  回復  更多評論
  
# re: 通過虛函數表訪問私有虛函數 2008-11-04 19:08 空明流轉
私有函數僅僅在編譯期間起作用。  回復  更多評論
  
# re: 通過虛函數表訪問私有虛函數 2008-11-12 20:28 imdavid
child cc;

int *p = (int *)&cc + 1;

__asm
{
call p ;// call the point to the address
}

如果類有構造函數, 不加1直接取到其地址并調用.

# re: 通過虛函數表訪問私有虛函數 2008-11-04 19:08 空明流轉
私有函數僅僅在編譯期間起作用。

這個是對, 但是想要弄明白一個類的內存分配。可能還需要找點資料. 另外函數的前后分布也有關系。


13void main()
14{
15 typedef void(*Fun)(void); // 這個局限性比較大
16 child b;
17 Fun pFun;
18 pFun = (Fun)*((int*)*(int*)(&b));
19 pFun();
20}


寫個類的內存分布掃描器還是有必要的. :)

  回復  更多評論
  
# re: 通過虛函數表訪問私有虛函數 2008-11-13 19:01 楊彬彬
@imdavid
“int *p = (int *)&cc + 1; ”小弟不才,對于這還是不明白,那p所指向的究竟是什么?是虛函數的指針,但虛函數指針不是在虛函數表里嗎。。真暈啊。
有沒有好的資料能看看
  回復  更多評論
  
# re: 通過虛函數表訪問私有虛函數 2008-11-13 19:30 imdavid
呵呵, 以為沒有人關注了呢, +1 是class里面的成員順序也就是虛函數指針. 別問我+2為什么不對 :)

但虛函數指針不是在虛函數表里嗎.

個人認為:在編譯時確實存在VTable. 但是在運行時里"感覺"就不分VT了。而是直接指向類首地址,在進行地址加減就可以得到.

你們自定義函數指針是可以,但局限性太大太大.

另外說明:這東西沒有資料可尋。 有問題一起msn聊聊. imdavid2msn@msn.com  回復  更多評論
  
# re: 通過虛函數表訪問私有虛函數 2008-11-13 19:32 imdavid
個人認為:在編譯時確實存在VTable. 但是在運行時里"感覺"就不分VT了。而是直接指向類首地址,在進行地址加減就可以得到.

關于這句話有所保留。 不過因為是先指向class首地址 然后在進行查找。所以可行。

另外也用過struct的一些方法。 例如: ((類指針*)0)->xxx 但編譯有問題。 還在琢磨。
  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              亚洲国产天堂久久综合网| 一区二区日韩欧美| 欧美日本韩国一区| 久久久久久久欧美精品| 在线观看亚洲专区| 国产欧美一区二区精品婷婷| 久久精品国产亚洲一区二区三区| 欧美性片在线观看| 欧美日韩一区二区免费在线观看| 久久久久九九视频| 久久综合999| 欧美11—12娇小xxxx| 免费看黄裸体一级大秀欧美| 久久青草福利网站| 欧美成人资源| 一本色道久久综合精品竹菊| 亚洲欧美日韩综合一区| 久久躁狠狠躁夜夜爽| 欧美福利小视频| 国产精品久久久久久久久久免费看| 国产精品一二一区| 国内精品久久久久久久影视蜜臀 | 欧美日韩国产一区二区三区地区 | 欧美亚洲一级| 欧美大片免费观看在线观看网站推荐| 欧美精品导航| 国产一区二区欧美日韩| 亚洲日韩成人| 欧美资源在线观看| 亚洲国内精品| 久久成人18免费网站| 欧美激情精品久久久久久蜜臀| 国产精品久久久久久久久久直播| 亚洲高清123| 久久久国产精彩视频美女艺术照福利| 亚洲福利久久| 久久久午夜视频| 国产精品久久久久久五月尺| 亚洲精品国产视频| 麻豆成人在线观看| 亚洲欧美综合国产精品一区| 欧美日韩激情小视频| 亚洲激情综合| 美女国内精品自产拍在线播放| 在线观看日韩av| 国产亚洲激情| 亚洲一区二区精品视频| 欧美激情亚洲激情| 久久精品国产一区二区电影| 国产精品亚洲第一区在线暖暖韩国| 亚洲美女av网站| 女人色偷偷aa久久天堂| 午夜影视日本亚洲欧洲精品| 欧美性猛交xxxx免费看久久久| 亚洲欧洲另类| 欧美 亚欧 日韩视频在线| 欧美一区二区三区四区在线观看地址| 欧美天天在线| 亚洲私人黄色宅男| 亚洲精品乱码久久久久久黑人 | 亚洲综合电影| 欧美日韩亚洲国产一区| 日韩一区二区高清| 亚洲国产精品视频| 欧美经典一区二区| 亚洲免费高清视频| 亚洲区第一页| 欧美日韩免费区域视频在线观看| 99精品视频免费在线观看| 亚洲国产精品一区制服丝袜 | 久久精品99国产精品| 亚洲综合日韩| 国产综合视频在线观看| 久久久蜜桃一区二区人| 久久不射网站| 亚洲国产欧美一区二区三区丁香婷| 老妇喷水一区二区三区| 麻豆久久婷婷| 玖玖玖国产精品| 午夜精品偷拍| 一色屋精品视频免费看| 亚洲国产精品va在线观看黑人| 欧美成人情趣视频| 亚洲欧美久久久| 欧美伊人久久久久久久久影院 | 一区二区三区高清视频在线观看| 亚洲麻豆国产自偷在线| 国产精品视频yy9099| 老司机精品福利视频| 欧美日韩ab片| 久久久精品久久久久| 蜜臀av在线播放一区二区三区| 99国产精品视频免费观看| 99国产精品一区| 好看的av在线不卡观看| 亚洲精品乱码视频| 国产精品久久久一区二区三区| 欧美成人一区二区在线| 国产日韩视频| 欧美不卡一卡二卡免费版| 欧美三级欧美一级| 久久综合九色综合欧美狠狠| 欧美啪啪一区| 久久女同互慰一区二区三区| 欧美日韩极品在线观看一区| 久久亚洲精品一区二区| 欧美日韩视频在线一区二区 | 国产午夜精品一区二区三区欧美 | 久久久久看片| 欧美日韩在线播放一区| 男女av一区三区二区色多| 国产精品久久二区二区| 欧美激情中文字幕一区二区 | 99在线精品观看| 欧美一区二区女人| 亚洲午夜精品久久久久久浪潮| 久久久久一区二区三区| 性久久久久久| 欧美视频一区在线| 91久久精品国产91久久性色tv| 国产午夜精品在线观看| 亚洲午夜日本在线观看| 亚洲精品久久久久中文字幕欢迎你 | 美乳少妇欧美精品| 久久激情视频| 国产伦精品一区二区三区在线观看 | 欧美日本乱大交xxxxx| 蜜桃av一区| 国内揄拍国内精品少妇国语| 99re这里只有精品6| 亚洲久久一区| 欧美成人乱码一区二区三区| 免费视频一区| 亚洲高清色综合| 久久久久久夜精品精品免费| 久久视频这里只有精品| 国产一区二区三区在线观看精品 | 亚洲午夜av| 亚洲欧美久久久| 国产精品久久久久久久9999| 日韩视频二区| 亚洲男人的天堂在线| 精品av久久707| 亚洲天堂av图片| 精品电影一区| 欧美在线国产| 久久天天躁狠狠躁夜夜爽蜜月| 国产精品免费一区豆花| 亚洲色诱最新| 欧美在线观看一区| 激情欧美国产欧美| 蜜桃av一区二区| 亚洲精品欧美精品| 亚洲男人的天堂在线aⅴ视频| 国产精品爽爽爽| 久久国产精品免费一区| 免费久久久一本精品久久区| 亚洲精选在线观看| 国产精品国产精品| 性欧美大战久久久久久久免费观看| 久久精品中文字幕一区| 亚洲第一狼人社区| 欧美日韩国产一区二区三区地区| 99热这里只有精品8| 性欧美精品高清| 亚洲高清视频在线观看| 欧美日韩影院| 久久精品一区蜜桃臀影院| 亚洲黄色高清| 午夜在线a亚洲v天堂网2018| 激情文学一区| 国产精品99一区二区| 久久久国产精品一区二区三区| 亚洲精品视频一区二区三区| 欧美在线网站| 99在线观看免费视频精品观看| 国产精品资源在线观看| 欧美成人中文字幕| 午夜精品福利一区二区三区av| 欧美激情第8页| 欧美在线观看你懂的| 亚洲精品国产精品久久清纯直播 | 久久伊人亚洲| 夜久久久久久| 一区二区亚洲精品| 国产精品扒开腿做爽爽爽视频| 久久精品国产久精国产思思 | 狂野欧美一区| 亚洲一区二区三区色| 亚洲二区免费| 老司机免费视频一区二区| 亚洲天堂黄色| 日韩系列在线| 亚洲福利国产精品| 国产啪精品视频| 欧美日韩国产成人在线观看 | 激情懂色av一区av二区av| 欧美日韩午夜剧场| 欧美精品手机在线| 免费91麻豆精品国产自产在线观看|