• <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>
            posts - 101,  comments - 57,  trackbacks - 0

            1.代碼

            #include<iostream>

            using namespace std;

            class A
            public:
                
            virtual void fun1(){ cout<<"A::fun1"<<endl;}
                
            virtual void fun2(){cout<<"A::fun2"<<endl;}
            }
            ;


            class B : public A
            {     
            public:    
                
            virtual void fun1(){ cout<<"B::fun1"<<endl;}
                
            virtual void fun2(){cout<<"B::fun2"<<endl;}
            }
            ;

            void main(){
                
                
            void (A::*f1)();  
                
            void (A::*f2)();  
                
                A 
            *p=new B;
                
                f1 
            = &A::fun1;
                f2 
            = &A::fun2;
                (p
            ->*f1)();
                (p
            ->*f2)();

                printf(
            "f1 = %p f2 = %p\n", f1, f2);
                printf(
            "B::fun1 = %p, B::fun2 = %p\n"&A::fun1, &A::fun2);
                delete p;
                system(
            "pause");
                
            }

            2.結(jié)果
            B::fun1
            B::fun2
            f1 = 004010AA f2 = 004010B4
            B::fun1 = 004010AA, B::fun2 = 004010B4

            3.解惑
              i. 如果對(duì)于為什么f  = A::funx 卻輸出的是B::funx?
              ii. 為什么A::funx = B::funx

             以上兩個(gè)問(wèn)題可以當(dāng)作是一個(gè),看看匯編就知道了,他們將生成一個(gè)虛函數(shù)的選擇函數(shù),短小的函數(shù)負(fù)責(zé)選對(duì)應(yīng)虛函數(shù)中的位置,根據(jù)對(duì)象的虛函數(shù)表而定,所以....

            4.匯編
              debug

            0040121E   .  C745 F0 AA104>mov     dword ptr [ebp-10], 004010AA
            00401225   .  C745 EC B4104>mov     dword ptr [ebp-14], 004010B4
            0040122C   .  8BF4          mov     esi, esp
            0040122E   .  8B4D E8       mov     ecx, [ebp
            -18]
            00401231   .  FF55 F0       call    [ebp-10]
            00401234   .  3BF4          cmp     esi, esp
            00401236   .  E8 A5870000   call    _chkesp
            0040123B   .  8BF4          mov     esi, esp
            0040123D   .  8B4D E8       mov     ecx, [ebp
            -18]
            00401240   .  FF55 EC       call    [ebp-14]
            00401243   .  3BF4          cmp     esi, esp
            00401245   .  E8 96870000   call    _chkesp
            0040124A   .  8B55 EC       mov     edx, [ebp
            -14]

            0040124D   .  52            push    edx                              ; /<%p>
            0040124E   .  8B45 F0       mov     eax, [ebp-10]                    ; |
            00401251   .  50            push    eax                              ; |<%p>
            00401252   .  68 48404300   push    00434048                         ; |format = "f1 = %p f2 = %p",LF,""
            00401257   .  E8 14820000   call    printf                           ; \printf
            0040125C   .  83C4 0C       add     esp, 0C
            0040125F   .  68 B4104000   push    004010B4                         ; /<%p> = Cplusplu.004010B4
            00401264   .  68 AA104000   push    004010AA                         ; |<%p> = Cplusplu.004010AA
            00401269   .  68 24404300   push    00434024                         ; |format = "B::fun1 = %p, B::fun2 = %p",LF,""
            0040126E   .  E8 FD810000   call    printf                           ; \printf

            00402300 > > \8B01          mov     eax, [ecx]                     // 第一個(gè)虛函數(shù)
            00402302   .  FF20          jmp     [eax]
            00402304      CC            int3
            00402305      CC            int3
            00402306      CC            int3
            00402307      CC            int3
            00402308      CC            int3
            00402309      CC            int3
            0040230A      CC            int3
            0040230B      CC            int3
            0040230C      CC            int3
            0040230D      CC            int3
            0040230E      CC            int3
            0040230F      CC            int3
            00402310 > >  8B01          mov     eax, [ecx]          // 第二個(gè)虛汗數(shù)
            00402312   .  FF60 04       jmp     [eax+4]



            release

            00401019  |> \33F6          xor     esi, esi
            0040101B  
            |>  8BCE          mov     ecx, esi
            0040101D  
            |.  E8 5E060000   call    00401680
            00401022  |.  8BCE          mov     ecx, esi
            00401024  |.  E8 67060000   call    00401690
            00401029  |.  68 90164000   push    00401690                         ;  Entry address
            0040102E  
            |.  68 80164000   push    00401680                         ;  Entry address
            00401033  |.  68 C4F04000   push    0040F0C4                         ;  ASCII "f1 = %p f2 = %p",LF
            00401038  |.  E8 2D310000   call    0040416A
            0040103D  
            |.  83C4 0C       add     esp, 0C
            00401040  |.  68 90164000   push    00401690                         ;  Entry address
            00401045  |.  68 80164000   push    00401680                         ;  Entry address
            0040104A  
            |.  68 A8F04000   push    0040F0A8                         ;  ASCII "B::fun1 = %p, B::fun2 = %p",LF
            0040104F  
            |.  E8 16310000   call    0040416A

            00401680   $  8B01          mov     eax, [ecx]
            00401682   .  FF20          jmp     [eax]
            00401684      CC            int3
            00401685      CC            int3
            00401686      CC            int3
            00401687      CC            int3
            00401688      CC            int3
            00401689      CC            int3
            0040168A      CC            int3
            0040168B      CC            int3
            0040168C      CC            int3
            0040168D      CC            int3
            0040168E      CC            int3
            0040168F      CC            int3
            00401690   $  8B01          mov     eax, [ecx]
            00401692   .  FF60 04       jmp     [eax+4]


            posted on 2008-03-08 18:12 margin 閱讀(304) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C/C++逆向工程
            <2008年10月>
            2829301234
            567891011
            12131415161718
            19202122232425
            2627282930311
            2345678

            常用鏈接

            留言簿

            隨筆檔案

            文章分類

            文章檔案

            收藏夾

            常去的壇子

            • CVC電腦病毒論壇
            • 很多人說(shuō)我是AV,我告訴他們:別瞧不起人,我們也能創(chuàng)造價(jià)值
            • 安全焦點(diǎn)
            • 黑客聚集的地方,一般是好酒最多的地方...
            • 看雪論壇
            • 國(guó)內(nèi)最強(qiáng)的加密解密論壇,成醉其中經(jīng)常夜不歸宿
            • 驅(qū)動(dòng)開(kāi)發(fā)論壇
            • 厭倦了啤的朋友們,來(lái)我們來(lái)整點(diǎn)白的...痛痛快快的BSOD也好過(guò)隔鞋瘙癢!

            我的朋友

            • Sen的blog
            • IDE方面資深的受害者...經(jīng)常為一個(gè)變量的定義找不著北的痛苦程序員(深表同情)
            • 老羅的blog
            • 良師益友,千年水牛,引擎猛男,分析怪獸,墨鏡酷哥,臺(tái)球高手....

            搜索

            •  

            最新評(píng)論

            国产亚洲精午夜久久久久久 | 久久99国产精品久久久| 久久久久久综合网天天| 精品国产乱码久久久久久人妻| 婷婷久久久亚洲欧洲日产国码AV| 国产精品女同久久久久电影院 | 日韩精品久久久久久久电影| 久久国内免费视频| 国产精品视频久久久| 天堂无码久久综合东京热| 狼狼综合久久久久综合网| 久久综合九色综合久99| 亚洲日韩欧美一区久久久久我 | 久久久久久久久久久免费精品| 中文字幕日本人妻久久久免费| 精品熟女少妇av免费久久| 精品久久久久中文字| 久久久噜噜噜久久熟女AA片| 久久人人爽人爽人人爽av| 色婷婷综合久久久久中文一区二区 | 99久久综合国产精品免费| 国产精品美女久久久| 欧美一区二区三区久久综合 | 亚洲狠狠久久综合一区77777| 综合久久国产九一剧情麻豆| 久久久久久国产a免费观看黄色大片| 狠狠色丁香久久综合婷婷| 精品国产VA久久久久久久冰| 99久久精品国产一区二区| 热综合一本伊人久久精品| 久久精品中文字幕久久| 人妻丰满AV无码久久不卡| 中文精品久久久久人妻不卡| 久久久久久久91精品免费观看| 久久精品无码一区二区三区日韩| 久久婷婷久久一区二区三区 | 国内精品伊人久久久久网站| 91久久香蕉国产熟女线看| 久久精品一区二区| 国产精品欧美久久久天天影视| 好属妞这里只有精品久久|