程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 從匯編看c++成員函數指針(三)

從匯編看c++成員函數指針(三)

編輯:C++入門知識

#include <cstdio>
      Left :       Right :       Bottom :  Left,         * bp = &* lp =* rp =* tp =
    (Top::*tgp1)() = &(Top::*tgp2)() = &(Left::*lgp1)() = &(Left::*lgp2)() = &(Left::*lgp3)() = &(Left::*lgp4)() = &(Right::*rgp1)() = &(Right::*rgp2)() = &(Right::*rgp5)() = &(Right::*rgp6)() = &(Bottom::*bgp1)() = &(Bottom::*bgp2)() = &(Bottom::*bgp3)() = &(Bottom::*bgp4)() = &(Bottom::*bgp5)() = &(Bottom::*bgp6)() = &(Bottom::*bgp7)() = &, , , , , , , , , , , , , , , , , , &, &, &, &, &, &, &, &, &, &, &, &, &, &, &, &, &->*->*->*->*->*->*->*


??_9Top@@$BA@AE PROC                    
        eax, DWORD PTR [ecx]
                            
        DWORD PTR [eax]

        eax, DWORD PTR [ecx]
                            
        DWORD PTR [eax+]

        eax, DWORD PTR [ecx]
                            
        DWORD PTR [eax+]

       

   :     (:*tgp1)() = &:get1
        DWORD PTR _tgp1$[ebp], OFFSET ??_9Top@@$BA@AE 



        DWORD PTR _tgp2$[ebp], OFFSET ??_9Top@@$B3AE 



        DWORD PTR $T4213[ebp], OFFSET ??_9Top@@$BA@AE 
        DWORD PTR $T4213[ebp+], 
        DWORD PTR $T4213[ebp+], 
        ecx, DWORD PTR $T4213[ebp]
        DWORD PTR _lgp1$[ebp], ecx
        edx, DWORD PTR $T4213[ebp+]
        DWORD PTR _lgp1$[ebp+], edx
        eax, DWORD PTR $T4213[ebp+]
        DWORD PTR _lgp1$[ebp+], eax


     
        DWORD PTR $T4214[ebp], OFFSET ??_9Top@@$B3AE 
        DWORD PTR $T4214[ebp+], 
        DWORD PTR $T4214[ebp+], 
        edx, DWORD PTR $T4214[ebp+    DWORD PTR _lgp2$[ebp+    eax, DWORD PTR $T4214[ebp+    DWORD PTR _lgp2$[ebp+
        
        DWORD PTR $T4215[ebp], OFFSET ??_9Top@@$BA@AE 
        DWORD PTR $T4215[ebp+], 
        DWORD PTR $T4215[ebp+], 
        edx, DWORD PTR $T4215[ebp+    DWORD PTR _lgp3$[ebp+    eax, DWORD PTR $T4215[ebp+    DWORD PTR _lgp3$[ebp+
         

        DWORD PTR $T4216[ebp], OFFSET ??_9Top@@$B3AE 
        DWORD PTR $T4216[ebp+], 
        DWORD PTR $T4216[ebp+], 
        edx, DWORD PTR $T4216[ebp+    DWORD PTR _lgp4$[ebp+    eax, DWORD PTR $T4216[ebp+    DWORD PTR _lgp4$[ebp+
       
        DWORD PTR $T4217[ebp], OFFSET ??_9Top@@$BA@AE 
        DWORD PTR $T4217[ebp+], 
        DWORD PTR $T4217[ebp+], 
        edx, DWORD PTR $T4217[ebp+    DWORD PTR _rgp1$[ebp+    eax, DWORD PTR $T4217[ebp+    DWORD PTR _rgp1$[ebp+
      
        DWORD PTR $T4218[ebp], OFFSET ??_9Top@@$B3AE 
        DWORD PTR $T4218[ebp+], 
        DWORD PTR $T4218[ebp+], 
        edx, DWORD PTR $T4218[ebp+    DWORD PTR _rgp2$[ebp+    eax, DWORD PTR $T4218[ebp+    DWORD PTR _rgp2$[ebp+
        
        DWORD PTR $T4219[ebp], OFFSET ??_9Top@@$BA@AE 
        DWORD PTR $T4219[ebp+], 
        DWORD PTR $T4219[ebp+], 
        edx, DWORD PTR $T4219[ebp+    DWORD PTR _rgp5$[ebp+    eax, DWORD PTR $T4219[ebp+    DWORD PTR _rgp5$[ebp+
     
        DWORD PTR $T4220[ebp], OFFSET ??_9Top@@$B3AE 
        DWORD PTR $T4220[ebp+], 
        DWORD PTR $T4220[ebp+], 
        edx, DWORD PTR $T4220[ebp+    DWORD PTR _rgp6$[ebp+    eax, DWORD PTR $T4220[ebp+    DWORD PTR _rgp6$[ebp+
     
        DWORD PTR $T4221[ebp], OFFSET ??_9Top@@$BA@AE 
        DWORD PTR $T4221[ebp+], 
        DWORD PTR $T4221[ebp+], 
        edx, DWORD PTR $T4221[ebp+    DWORD PTR _bgp1$[ebp+    eax, DWORD PTR $T4221[ebp+    DWORD PTR _bgp1$[ebp+
         
        DWORD PTR $T4222[ebp], OFFSET ??_9Top@@$B3AE 
        DWORD PTR $T4222[ebp+], 
        DWORD PTR $T4222[ebp+], 
        edx, DWORD PTR $T4222[ebp+    DWORD PTR _bgp2$[ebp+    eax, DWORD PTR $T4222[ebp+    DWORD PTR _bgp2$[ebp+
         
        DWORD PTR $T4223[ebp], OFFSET ??_9Top@@$BA@AE 
        DWORD PTR $T4223[ebp+], 
        DWORD PTR $T4223[ebp+], 
        edx, DWORD PTR $T4223[ebp+    DWORD PTR _bgp3$[ebp+    eax, DWORD PTR $T4223[ebp+    DWORD PTR _bgp3$[ebp+
          
        DWORD PTR $T4224[ebp], OFFSET ??_9Top@@$B3AE 
        DWORD PTR $T4224[ebp+], 
        DWORD PTR $T4224[ebp+], 
        edx, DWORD PTR $T4224[ebp+    DWORD PTR _bgp4$[ebp+    eax, DWORD PTR $T4224[ebp+    DWORD PTR _bgp4$[ebp+
        
        DWORD PTR $T4225[ebp], OFFSET ??_9Top@@$BA@AE 
        DWORD PTR $T4225[ebp+], 
        DWORD PTR $T4225[ebp+], 
        edx, DWORD PTR $T4225[ebp+    DWORD PTR _bgp5$[ebp+    eax, DWORD PTR $T4225[ebp+    DWORD PTR _bgp5$[ebp+
       
        DWORD PTR $T4226[ebp], OFFSET ??_9Top@@$B3AE 
        ecx, ecx
        SHORT $LN7@main
        DWORD PTR tv90[ebp], 
        SHORT $LN8@main
$
        DWORD PTR tv90[ebp], 
        edx, DWORD PTR tv90[ebp]
        DWORD PTR $T4226[ebp+], edx
        DWORD PTR $T4226[ebp+], 
        eax, DWORD PTR $T4226[ebp]
        DWORD PTR _bgp6$[ebp], eax
        ecx, DWORD PTR $T4226[ebp+]
        DWORD PTR _bgp6$[ebp+], ecx
        edx, DWORD PTR $T4226[ebp+]
        DWORD PTR _bgp6$[ebp+], edx


       
        DWORD PTR $T4229[ebp], OFFSET ??_9Bottom@@$B7AE 
        DWORD PTR $T4229[ebp+], 
        DWORD PTR $T4229[ebp+], 
        ecx, DWORD PTR $T4229[ebp+    DWORD PTR _bgp7$[ebp+    edx, DWORD PTR $T4229[ebp+    DWORD PTR _bgp7$[ebp+], edx

               

                             

           

 

  :     (bp->*bgp1)()
        edx, DWORD PTR _bp$[ebp]
        eax, DWORD PTR [edx+]
        ecx, DWORD PTR _bgp1$[ebp+]
        edx, DWORD PTR [eax+ecx]
                                
        eax, DWORD PTR _bp$[ebp]
        ecx, DWORD PTR [eax+edx+]
        ecx, DWORD PTR _bgp1$[ebp+]
                                    
        DWORD PTR _bgp1$[ebp]
                                 
                                 


       

        edx, DWORD PTR [ecx+    eax, DWORD PTR _bgp2$[ebp+    ecx, DWORD PTR [edx+ecx+    ecx, DWORD PTR _bgp2$[ebp+

        eax, DWORD PTR _bp$[ebp]
        ecx, DWORD PTR [eax+]
                              
        edx, DWORD PTR _bgp3$[ebp+]
        eax, DWORD PTR [ecx+edx]
                                
        ecx, DWORD PTR _bp$[ebp]
        ecx, DWORD PTR [ecx+eax+]
                                   
        ecx, DWORD PTR _bgp3$[ebp+]
                                    
        DWORD PTR _bgp3$[ebp]
                                 
                                 


    
        eax, DWORD PTR [edx+    ecx, DWORD PTR _bgp4$[ebp+    ecx, DWORD PTR [eax+edx+    ecx, DWORD PTR _bgp4$[ebp+
    
        edx, DWORD PTR [ecx+    eax, DWORD PTR _bgp5$[ebp+    ecx, DWORD PTR [edx+ecx+    ecx, DWORD PTR _bgp5$[ebp+
    
        ecx, DWORD PTR [eax+    edx, DWORD PTR _bgp6$[ebp+    ecx, DWORD PTR [ecx+eax+    ecx, DWORD PTR _bgp6$[ebp+
     
        eax, DWORD PTR [edx+    ecx, DWORD PTR _bgp7$[ebp+    ecx, DWORD PTR [eax+edx+    ecx, DWORD PTR _bgp7$[ebp+    DWORD PTR _bgp7$[ebp]

討論的一樣,包含虛擬繼承的時候,也可以將基類成員成員指針轉換為派生類成員函數指針,如可以bgp1 = lgp1,但是不能講派生類成員函數指針轉換為基類成員函數指針。

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved