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

2021-04-13 11:48:24 字數 1171 閱讀 2219

虛函式的呼叫如何能實現其「虛」?作為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++

**大有裨益!希望本文能對你有所幫助。任何問題或者指教,請

mailto:[email protected]。  

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

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

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

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

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

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