VC 6中使用不同呼叫規範的函式在符號檔案裡的表示方式

weixin_34292959發表於2011-10-19

在以前老版本的C++編譯器裡,編譯器會為使用不同呼叫約定(Calling Convention)的函式生成不同的名稱,不僅是連線程式會遵從這個命名規則,偵錯程式也會遵守這個命名規則。因此在Visual Studio裡除錯使用老版本編譯器編譯出來的程式,在設定函式斷點的時候需要考慮到這個因素。

 

下面是VC裡面不同呼叫約定的函式命名規則:

呼叫約定

引數壓棧順序

清理堆疊

函式命名規則

stdcall

從右向左

被調函式負責清理堆疊

函式名加字首“_”,並且在函式名後面附加“@”和堆疊要求分配的位元組數。

 

示例:_TestMethod@4

Cdecl

從右向左

呼叫函式負責清理堆疊

函式名加字首“_”。

 

示例:_TestMethod

Fastcall

前兩個引數由ECXEDX傳遞,其他的從右向左壓棧

被調函式負責清理堆疊

函式名後附加“@”和堆疊要求分配的位元組數。

 

示例:TestMethod@4

Thiscall

This指標由ECX暫存器傳遞,其他的從右向左壓棧

被調函式負責清理堆疊

C++命令規則

 

相關文章