青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天下

記錄修行的印記

函數(shù)調(diào)用、調(diào)用約定和名字約定

函數(shù)調(diào)用、調(diào)用約定和名字約定

調(diào)用約定:
__cdecl __fastcall與 __stdcall,三者都是調(diào)用約定(Calling convention),它決定以下內(nèi)容:
1)函數(shù)參數(shù)的壓棧順序,
2)由調(diào)用者還是被調(diào)用者把參數(shù)彈出棧
3)以及產(chǎn)生函數(shù)修飾名的方法
    
__cdecl
__cdecl調(diào)用約定又稱為C調(diào)用約定,是 C
/C++ 語言缺省的調(diào)用約定。參數(shù)按照從右至左的方式入棧,函數(shù)本身不清理棧,此工作由調(diào)用者負(fù)責(zé),返回值在EAX中。
對于 C,__cdecl 命名約定使用前面帶下劃線 (_) 的函數(shù)名;不執(zhí)行任何大小寫轉(zhuǎn)換。對于C
++,除非聲明為 extern "C",否則 C++ 函數(shù)將使用不同的名稱修飾方案。    


__stdcall 
__stdcall調(diào)用約定參數(shù)按照從右至左的方式入棧,函數(shù)自身清理堆棧,返回值在EAX中。    
對于 C,__stdcall 命名約定使用前面帶下劃線 (_) 的函數(shù)名,后跟“at”符 (@) 和函數(shù)的參數(shù)大小(以字節(jié)為單位)。不執(zhí)行任何大小寫轉(zhuǎn)換。編譯器使用下列命名約定模板:
_functionname@number

__fastcall
顧名思義,__fastcall 的特點就是快,因為它通過 CPU 寄存器來傳遞參數(shù)。他用 ECX 和 EDX 傳送前兩個雙字(DWORD)或更小的參數(shù),剩下的參數(shù)按照從右至左的方式入棧,函數(shù)自身清理堆棧,返回值在 EAX 中。

__thiscall
這是 C
++ 語言特有的一種調(diào)用方式,用于類成員函數(shù)的調(diào)用約定。如果參數(shù)確定,this 指針存放于 ECX 寄存器,函數(shù)自身清理堆棧;如果參數(shù)不確定,this指針在所有參數(shù)入棧后再入棧,調(diào)用者清理棧。__thiscall 不是關(guān)鍵字,程序員不能使用。參數(shù)按照從右至左的方式入棧。

名字修飾約定:
1、修飾名(Decoration name):"C"或者"C++"函數(shù)在內(nèi)部(編譯和鏈接)通過修飾名識別
2、C編譯時函數(shù)名修飾約定規(guī)則:
__stdcall調(diào)用約定在輸出函數(shù)名前加上一個下劃線前綴,后面加上一個
"@"符號和其參數(shù)的字節(jié)數(shù),格式為_functionname@number,例如:function(int a, int b),其修飾名為:_function@8
__cdecl調(diào)用約定僅在輸出函數(shù)名前加上一個下劃線前綴,格式為_functionname。
__fastcall調(diào)用約定在輸出函數(shù)名前加上一個
"@"符號,后面也是一個"@"符號和其參數(shù)的字節(jié)數(shù),格式為@functionname@number。

3、C++編譯時函數(shù)名修飾約定規(guī)則:
__stdcall調(diào)用約定:
1)、以"?"標(biāo)識函數(shù)名的開始,后跟函數(shù)名;
2)、函數(shù)名后面以"@@YG"標(biāo)識參數(shù)表的開始,后跟參數(shù)表;
3)、參數(shù)表以代號表示:
X
--void ,
D
--char,
E
--unsigned char,
F
--short
H
--int
I
--unsigned int
J
--long,
K
--unsigned long,
M
--float,
N
--double
_N
--bool
PA
--表示指針,后面的代號表明指針類型,如果相同類型的指針連續(xù)出現(xiàn),以"0"代替,一個"0"代表一次重復(fù);
4)、參數(shù)表的第一項為該函數(shù)的返回值類型,其后依次為參數(shù)的數(shù)據(jù)類型,指針標(biāo)識在其所指數(shù)據(jù)類型前;
5)、參數(shù)表后以"@Z"標(biāo)識整個名字的結(jié)束,如果該函數(shù)無參數(shù),則以"Z"標(biāo)識結(jié)束。
其格式為
"?functionname@@YG*****@Z""?functionname@@YG*XZ",例如
int Test1(char *var1,unsigned long)----"?Test1@@YGHPADK@Z"
void Test2()-----?Test2@@YGXXZ”

__cdecl調(diào)用約定:
規(guī)則同上面的_stdcall調(diào)用約定,只是參數(shù)表的開始標(biāo)識由上面的
"@@YG"變?yōu)?/span>"@@YA"。
__fastcall調(diào)用約定:
規(guī)則同上面的_stdcall調(diào)用約定,只是參數(shù)表的開始標(biāo)識由上面的
"@@YG"變?yōu)?/span>"@@YI"。
VC
++對函數(shù)的省缺聲明是"__cedcl",將只能被C/C++調(diào)用.



堆棧    
棧:棧是向低地址擴(kuò)展的數(shù)據(jù)結(jié)構(gòu),是一塊連續(xù)的內(nèi)存的區(qū)域。
棧又稱堆棧,是用戶存放程序臨時創(chuàng)建的局部變量,也就是函數(shù)括弧“{}”中定義的變量(但不包括static聲明的變量,)。除此以外,在函數(shù)被調(diào)用時,其參數(shù)也會被壓入發(fā)起調(diào)用的進(jìn)程棧中,并且待到調(diào)用結(jié)束后,函數(shù)的返回值也會被存放回棧中。由于棧的先進(jìn)后出特點,所以棧特別方便用來保存
/恢復(fù)調(diào)用現(xiàn)場。從這個意義上,可以把堆??闯梢粋€寄存、交換臨時數(shù)據(jù)的內(nèi)存區(qū)。  
  
??臻g都是在運(yùn)行時動態(tài)的分配的。
函數(shù)堆棧在運(yùn)行時動態(tài)分配,原因有二:
一、無法在編譯時候確定函數(shù)運(yùn)行時所需的堆棧大?。?br />二、節(jié)省空間

函數(shù)名就是一個指針,指向函數(shù)入口地址,也就是一個代碼段的地址。
在內(nèi)存中,數(shù)據(jù)和指令,堆棧分別在不同的地址段,數(shù)據(jù)段存儲的是程序的數(shù)據(jù),代碼段存儲的是程序的指令,棧段是函數(shù)調(diào)用是保存參數(shù)和調(diào)用是上下文數(shù)據(jù)的內(nèi)存區(qū)。棧由系統(tǒng)自動分配.

函數(shù)名就指向一個代碼段的地址。對數(shù)據(jù)段的內(nèi)存地址進(jìn)行復(fù)引用操作(
*a),得到內(nèi)存中數(shù)據(jù)的值。如果對一個代碼段內(nèi)存地址進(jìn)行復(fù)引用操作,沒用什么實際意義,不可能返回一個指令。

在標(biāo)準(zhǔn)c文檔(WG14 N1124)里這樣描述 
A function designator 
is an expression that has function type. Except when it is the
operand of the 
sizeof operator or the unary & operator, a function designator with
type 
"function returning type" is converted to an expression that has type "pointer to
function returning type".

也就是說函數(shù)類型表達(dá)式(如
*pf)會被自動轉(zhuǎn)化成函數(shù)指針. 這樣你加多少個*都沒有關(guān)系. 

另外對一個函數(shù)指針pf, (
*pf)() 和 pf() 都已成為合法的用法 (k&R 不支持 pf())。

C99 的文檔里也提到這一點:

Pointers to functions may be used either 
as (*pf)() or as pf(). The latter construct, not
sanctioned 
in K&R, appears in some present versions of C, is unambiguous, invalidates no old
code, and can be an important shorthand. The shorthand 
is useful for packages that present only
one external name, which designates a structure full of pointers to objects and functions: member
functions can be called 
as graphics.open(file) instead of
(
*graphics.open)(file).

說的是這樣子可以方便調(diào)用結(jié)構(gòu)里的函數(shù)。
   

posted on 2011-10-24 17:36 天下 閱讀(623) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

<2012年10月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

導(dǎo)航

統(tǒng)計

常用鏈接

留言簿(4)

隨筆分類(378)

隨筆檔案(329)

鏈接

最新隨筆

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲精品一二三| 欧美日韩国产另类不卡| 欧美国产日韩精品| 乱中年女人伦av一区二区| 久久中文久久字幕| 久久亚洲一区二区三区四区| 久久精品成人一区二区三区| 久久免费精品视频| 蜜臀av性久久久久蜜臀aⅴ四虎| 蜜桃av噜噜一区| 欧美国产第二页| 欧美va日韩va| 美女日韩在线中文字幕| 久久亚洲欧洲| 国产综合一区二区| 国产日韩精品入口| 久久精品99国产精品日本| 亚洲深夜福利网站| 中文久久精品| 一区二区三区四区蜜桃| 亚洲精品一区二区网址| 国产午夜精品视频免费不卡69堂| 国产精品伦一区| 国产精品护士白丝一区av| 亚洲欧洲久久| 亚洲国产黄色片| 日韩亚洲欧美成人一区| 狠狠做深爱婷婷久久综合一区 | 欧美大片第1页| 日韩视频精品在线| 欧美体内谢she精2性欧美| 麻豆亚洲精品| 欧美1区3d| 国产精品自在欧美一区| 国产精品午夜久久| 91久久国产综合久久91精品网站| 国产日本欧美视频| 亚洲人在线视频| 在线观看成人一级片| 亚洲最黄网站| 亚洲影院高清在线| 国产精品v欧美精品v日本精品动漫| 激情成人在线视频| 亚洲黄色尤物视频| 久久成人一区二区| 鲁大师影院一区二区三区| 一区二区日韩欧美| 欧美呦呦网站| 欧美日产国产成人免费图片| 欧美视频一区二| 欧美日韩亚洲一区二区| 精品成人免费| 99视频日韩| 亚洲国产精品一区二区www| 99精品国产高清一区二区| 久久久精品动漫| 欧美成人国产一区二区| 亚洲国产视频一区| 亚洲综合成人婷婷小说| 午夜精品www| 老司机精品导航| 免费在线国产精品| 欧美一区二区三区免费在线看 | 亚洲视频中文字幕| 亚洲高清一区二| 久久亚洲一区二区| 欧美日本成人| 一本色道久久88综合日韩精品| 亚洲综合欧美日韩| 亚洲蜜桃精久久久久久久| 亚洲欧美日韩中文在线制服| 国产精品久久久久久久久久免费看| 国产日产欧产精品推荐色 | 免费成人毛片| 在线精品福利| 羞羞漫画18久久大片| 亚洲一区在线观看视频| 猫咪成人在线观看| 99精品国产热久久91蜜凸| 久久成人免费电影| 午夜日韩在线观看| 欧美日韩免费观看一区三区| 亚洲一卡二卡三卡四卡五卡| 久久一区精品| 欧美日韩a区| 亚洲精品久久久久久一区二区| 最新国产精品拍自在线播放| 久久夜色精品国产噜噜av| 亚洲麻豆av| 久久另类ts人妖一区二区| 久久福利精品| 国产一区二区三区黄| 亚洲免费观看高清在线观看| 亚洲少妇最新在线视频| 欧美日韩一区二区三区在线| 欧美与黑人午夜性猛交久久久| 亚洲精品影视在线观看| 国产目拍亚洲精品99久久精品| 亚洲男人影院| 久久综合久久综合这里只有精品| 国内久久婷婷综合| 亚洲精品乱码视频| 欧美日韩国产美女| 裸体女人亚洲精品一区| 久久激情五月激情| 亚洲一区二区在线观看视频| 99在线|亚洲一区二区| 国产日韩亚洲欧美| 国产精品色在线| 欧美国产精品日韩| 国产精品专区一| 亚洲伊人一本大道中文字幕| 亚洲综合欧美日韩| 国产精品成人v| 亚洲色无码播放| 午夜精品久久一牛影视| 国产亚洲人成a一在线v站| 国产精品电影在线观看| 中文欧美日韩| 久久夜色精品国产噜噜av| 国产欧美日韩综合一区在线播放| 久久人人97超碰精品888| 久久久精品动漫| 亚洲综合精品一区二区| 裸体女人亚洲精品一区| 亚洲国产导航| 欧美成人在线免费视频| 性做久久久久久久久| 午夜精品偷拍| 激情综合久久| 亚洲剧情一区二区| 国产色综合网| 亚洲精品午夜精品| 亚洲美女视频网| 国产一区二区三区av电影| 香蕉成人久久| 亚洲区一区二| 欧美国产日本高清在线| 精品成人国产在线观看男人呻吟| 久久aⅴ国产欧美74aaa| 国产精品乱人伦一区二区 | 亚洲大胆美女视频| 久久久爽爽爽美女图片| 一区二区视频欧美| 一本色道综合亚洲| 欧美人与性禽动交情品| 在线一区二区视频| 午夜精品久久久久久久男人的天堂| 亚洲伦理一区| 久久久久久久综合| 欧美激情一二区| 国产一区二区三区久久| 久久综合综合久久综合| 亚洲欧美日韩国产一区| 国产在线拍揄自揄视频不卡99 | 国产一区二区剧情av在线| 国产麻豆精品久久一二三| 国内精品嫩模av私拍在线观看| 欧美一区二区三区在线看| 日韩亚洲一区二区| 欧美日韩精品免费看| 欧美激情亚洲| 亚洲一区在线视频| 欧美噜噜久久久xxx| 亚洲图片在区色| 一区二区三区导航| 国产亚洲成av人在线观看导航 | 国产一区二区激情| 久久精品夜色噜噜亚洲a∨ | 国产精品久久毛片a| 久久久久88色偷偷免费| 亚洲一区二区三区四区视频| 国产日本欧美一区二区| 在线亚洲一区二区| 美女精品一区| 在线日韩欧美| 国产精品久久二区二区| 一区二区三区欧美在线| 免费亚洲电影在线观看| 激情久久一区| 国产精品自拍一区| 亚洲欧美一区二区三区久久| 亚洲国产日韩一级| 日韩视频在线一区二区三区| 国产日韩亚洲欧美综合| 欧美一区二区三区在线| 在线亚洲一区二区| 久久国产加勒比精品无码| 一区二区三区欧美在线观看| 欧美日韩三级| 欧美精品一区二区三区很污很色的 | 一本色道久久综合一区| 牛牛影视久久网| 91久久精品一区| 亚洲国产精品第一区二区| 欧美成人视屏| 美女脱光内衣内裤视频久久影院 | 久久激情五月丁香伊人| 亚洲一区二区久久| 国产欧美一区二区三区在线看蜜臀|