C 虛函式呼叫的反彙編解析

2021-04-02 14:45:28 字數 1115 閱讀 7803

c++虛函式呼叫的反彙編解析

虛函式的呼叫如何能實現其「虛」?作為c++多型的表現手段,估計很多人對其實現機制感興趣。大約一般的教科書就說到這個c++強大機制的時候,就是教大家怎麼用,何時用,而不會去**一下這個虛函式的真正實現細節。(當然,因為不同的編譯器廠家,可能對虛函式有自己的實現,呵呵,這就算是虛函式對於編譯器的「多型」了:)。 作為編譯型語言,c++編譯的最後結果就是一堆彙編指令了(這裡不同於.net的clr)。今天,我就來揭開它的神秘面紗,從彙編的層面來看看虛函式到底怎麼實現的。讓大家對虛函式的實現不僅知其然,更知其所以然。pc + windows xp pro + visual c++6.0,文中所得出來的結果和反映的編譯器策略也只針對vc6.0的編譯器)

先看一段簡單**:

code segment:

line01: #include

line02:

line03: class base

line08: };

line09: 

line10: class derive : public base

line15: };

line16: 

line17: void test(base *p)

line20: 

line21: int __cdecl main(int argc, char* argv)    

程式的執行結果將是:

class base

那麼將base類的output函式宣告(

line05)更改為:

virtual void __stdcall output()

執行一下,看看結果。我可沒有使用物件或者指向類的指標去呼叫函式哦。

j這回你該知道虛函式是怎麼回事了吧?這裡介紹的都是基於微軟vc++ 6.0編譯器對虛函式的實現手段。編譯器實現c++所使用的方法和策略,都是可以從其反彙編語句中一**竟的。了解這些底層細節,將會對提高你的c/c++**大有裨益!希望本文能對你有所幫助

C 虛函式呼叫的反彙編解析

虛函式的呼叫如何能實現其 虛 作為c 多型的表現手段,估計很多人對其實現機制感興趣。大約一般的教科書就說到這個c 強大機制的時候,就是教大家怎麼用,何時用,而不會去 一下這個虛函式的真正實現細節。當然,因為不同的編譯器廠家,可能對虛函式有自己的實現,呵呵,這就算是虛函式對於編譯器的 多型 了 作為編...

C 虛函式呼叫的反彙編解析

虛函式的呼叫如何能實現其 虛 作為c 多型的表現手段,估計很多人對其實現機制感興趣。大約一般的教科書就說到這個c 強大機制的時候,就是教大家怎麼用,何時用,而不會去 一下這個虛函式的真正實現細節。當然,因為不同的編譯器廠家,可能對虛函式有自己的實現,呵呵,這就算是虛函式對於編譯器的 多型 了 作為編...

C 虛函式呼叫的反彙編解析

c 虛函式呼叫的反彙編解析 虛函式的呼叫如何能實現其 虛 作為c 多型的表現手段,估計很多人對其實現機制感興趣。大約一般的教科書就說到這個c 強大機制的時候,就是教大家怎麼用,何時用,而不會去 一下這個虛函式的真正實現細節。當然,因為不同的編譯器廠家,可能對虛函式有自己的實現,呵呵,這就算是虛函式對...