• <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 閱讀(300) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C/C++逆向工程
            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            常用鏈接

            留言簿

            隨筆檔案

            文章分類

            文章檔案

            收藏夾

            常去的壇子

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

            我的朋友

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

            搜索

            •  

            最新評(píng)論

            97久久精品人人澡人人爽| 久久人人青草97香蕉| 久久精品免费网站网| 欧美日韩精品久久久久 | 国产福利电影一区二区三区,免费久久久久久久精 | 国产亚洲欧美成人久久片| 精品久久久久久久中文字幕| 99久久香蕉国产线看观香| a级成人毛片久久| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 亚洲国产精品无码久久久秋霞2 | 久久这里有精品视频| 日韩人妻无码精品久久久不卡 | 国产一区二区久久久| 久久久久久免费一区二区三区| 亚洲国产成人久久综合一区77| 97久久久精品综合88久久| 女人高潮久久久叫人喷水| 国产一区二区精品久久岳| 久久棈精品久久久久久噜噜| 久久久久国产一级毛片高清板| 国产国产成人精品久久| 成人午夜精品无码区久久| 欧美午夜精品久久久久久浪潮| 青青草国产成人久久91网| 亚洲精品无码久久久久| 偷窥少妇久久久久久久久| 久久精品国产一区二区| 青青热久久综合网伊人| 久久99热只有频精品8| 伊人久久大香线蕉综合影院首页| 久久久久国色AV免费看图片| 99久久99久久精品国产| 青青青国产成人久久111网站| 久久久精品人妻一区二区三区蜜桃| 久久嫩草影院免费看夜色| 久久精品无码专区免费| 久久久WWW成人免费毛片| 久久久久久无码国产精品中文字幕 | 大伊人青草狠狠久久| 91精品国产综合久久精品|