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

            用匯編調(diào)用成員函數(shù)

            成員函數(shù)的調(diào)用是編譯器內(nèi)部使用的 __thiscall 即需要this指針,
            所以我們調(diào)用成員函數(shù)必須滿(mǎn)足的條件是
            1 需要this指針,
            2 成員函數(shù)有固定的函數(shù)地址

            先看條件 1 ?
            this指針是在函數(shù)調(diào)用前用ECX寄存器傳入的,
            所以我們只需要提前講this指針賦值給ECX即可

            條件2
            成員函數(shù)是有固定的地址的,也就是說(shuō)我們可以直接調(diào)用,不過(guò)大多數(shù)情況下因?yàn)橐L(fǎng)問(wèn)成員變量,所以如果沒(méi)有this指針,會(huì)在訪(fǎng)問(wèn)時(shí)產(chǎn)生異常.對(duì)于不需要this指針的成員函數(shù)可以正常調(diào)用.
            如類(lèi) CTest

            class?CTest
            {
            public :

            ?CTest()?:?m_nData?(
            5 ){}

            ?
            int ?GetNum(){reutrn? 3 ;]

            ?
            int ?GetAmount(){return? 2 ? + ?m_nData;}
            private :
            ?
            int ?m_nData;
            };


            // 可以這樣調(diào)用GetNum
            return?((CTest
            * ) 0 ) -> GetNum();


            這兩個(gè)條件都可以滿(mǎn)足,所以代碼如下:
            typedef?int?(CTest::*GETAMOUNT)();

            void?Process(CTest
            &?t?,?GETAMOUNT?GetAmont)
            {
            ??
            int?nResult?=0;
            ??__asm{
            ?????mov?ecx,[t]??????;傳入this指針
            ?????
            call?GetAmont????;調(diào)用成員函數(shù)
            ?????mov?nResult,?eax?;返回值在EAX中
            ????????}
            ??cout
            <<nResult<<endl;
            }

            int?main(int?argc,?char*?argv[])
            {
            ??CTest?test;

            ??Process(test,?
            &CTest::GetAmount);????
            ??return?
            0;
            }????

            posted on 2007-03-12 23:05 修一居士 閱讀(2334) 評(píng)論(3)  編輯 收藏 引用

            評(píng)論

            # re: 用匯編調(diào)用成員函數(shù) 2007-03-23 13:36 shen126

            int GetNum(){reutrn 3 ;] --> int GetNum(){return 3 ;}  回復(fù)  更多評(píng)論   

            # re: 用匯編調(diào)用成員函數(shù) 2007-03-23 13:42 shen126

            void Process(CTest* t , GETAMOUNT GetAmont)
            ...
            ...
            ...
            30: __asm{
            31: mov ecx, t ;傳入this指針
            004113E5 8B 4D 08 mov ecx,dword ptr [t]
            32: call GetAmont ;調(diào)用成員函數(shù)
            004113E8 FF 55 0C call dword ptr [GetAmont]
            33: mov nResult, eax ;返回值在EAX中
            004113EB 89 45 F8 mov dword ptr [nResult],eax
            34: }


            為什么 “31: mov ecx, t ;傳入this指針” 翻譯的結(jié)果是:“004113E5 8B 4D 08 mov ecx,dword ptr [t]” 而不是“004113E5 8B 4D 08 mov ecx, t”?

            我是匯編初學(xué),有點(diǎn)不太理解[t]的含義,t是函數(shù)地址,而ecx不正是要接收一個(gè)函數(shù)地址嗎,為什么還要[]來(lái)解引用?
              回復(fù)  更多評(píng)論   

            # re: 用匯編調(diào)用成員函數(shù) 2007-03-29 13:32 南斗

            t是變量不是函數(shù)地址 []可有可無(wú)  回復(fù)  更多評(píng)論   


            只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            導(dǎo)航

            <2025年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            統(tǒng)計(jì)

            常用鏈接

            留言簿(3)

            隨筆檔案

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            97久久国产综合精品女不卡| 四虎国产精品免费久久5151| 国产精品久久久香蕉| 亚洲国产精品无码久久98| 国产麻豆精品久久一二三| 久久精品无码一区二区三区日韩 | 久久精品国产亚洲AV不卡| 一本色道久久88综合日韩精品 | 国产情侣久久久久aⅴ免费| 久久精品成人免费国产片小草| 久久久久亚洲av综合波多野结衣| 国产欧美久久久精品| 久久久无码精品亚洲日韩蜜臀浪潮| 国产亚洲婷婷香蕉久久精品| 午夜精品久久久久成人| 久久这里只有精品久久| 青草国产精品久久久久久| 久久久久亚洲爆乳少妇无| 久久综合丁香激情久久| 亚洲va国产va天堂va久久| 日韩精品久久久久久久电影| 国产成人无码精品久久久久免费 | 草草久久久无码国产专区| 久久亚洲精精品中文字幕| 欧美精品国产综合久久| 久久人人爽人人精品视频| 国产精品成人精品久久久| 久久99毛片免费观看不卡| 亚洲av日韩精品久久久久久a| 亚洲精品国产第一综合99久久| 很黄很污的网站久久mimi色| 久久综合狠狠色综合伊人| 66精品综合久久久久久久| 99re这里只有精品热久久| 久久不见久久见免费视频7| 久久久久久夜精品精品免费啦| 亚洲级αV无码毛片久久精品| 伊人久久大香线焦AV综合影院| 久久夜色精品国产亚洲| 亚洲第一极品精品无码久久| 久久综合久久自在自线精品自 |