• <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)論

            久久天天躁狠狠躁夜夜不卡 | 久久精品无码一区二区日韩AV | 亚洲αv久久久噜噜噜噜噜| 久久久网中文字幕| 久久精品成人免费国产片小草| 久久精品国产69国产精品亚洲| 久久久女人与动物群交毛片| 亚洲国产精品无码久久一线| 亚洲日本va中文字幕久久| 久久久久国产精品人妻| 色综合久久中文字幕无码| 亚洲色欲久久久综合网| 久久精品欧美日韩精品| 精品一区二区久久久久久久网站| 99久久99这里只有免费的精品| 久久综合精品国产二区无码| 久久精品aⅴ无码中文字字幕重口| 欧美噜噜久久久XXX| 久久久91精品国产一区二区三区| 热re99久久精品国产99热| 久久se精品一区二区影院| 日本五月天婷久久网站| 亚洲中文字幕无码久久2017| 久久91亚洲人成电影网站| 久久高潮一级毛片免费| 久久夜色精品国产亚洲| 久久棈精品久久久久久噜噜| 国产高潮国产高潮久久久91 | 亚洲精品无码久久久影院相关影片| 香蕉久久夜色精品升级完成| 久久综合九色综合精品| 久久久国产精华液| 久久人人爽人人爽人人AV| 亚洲国产精品久久久久婷婷老年 | 欧美日韩成人精品久久久免费看| 久久精品国产99国产精品导航 | 久久综合一区二区无码| 国产精品99久久精品| 亚洲伊人久久综合影院| 亚洲伊人久久大香线蕉苏妲己 | 久久www免费人成看片|