日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】调用约定__cdecl、__stdcall和__fastcall的区别

發(fā)布時間:2023/12/10 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】调用约定__cdecl、__stdcall和__fastcall的区别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

什么是調(diào)用約定

函數(shù)的調(diào)用約定,顧名思義就是對函數(shù)調(diào)用的一個約束和規(guī)定(規(guī)范),描述了函數(shù)參數(shù)是怎么傳遞和由誰清除堆棧的。它決定以下內(nèi)容:(1)函數(shù)參數(shù)的壓棧順序,(2)由調(diào)用者還是被調(diào)用者把參數(shù)彈出棧,(3)以及產(chǎn)生函數(shù)修飾名的方法。

歷史背景

在微機(jī)出現(xiàn)之前,計算機(jī)廠商幾乎都會提供一份操作系統(tǒng)和為不同編程語言編寫的編譯器。平臺所使用的調(diào)用約定都是由廠商的軟件實(shí)現(xiàn)定義的。 在Apple Ⅱ出現(xiàn)之前的早期微機(jī)幾乎都是“裸機(jī)”,少有一份OS或編譯器的,即是IBM PC也是如此。IBM PC兼容機(jī)的唯一的硬件標(biāo)準(zhǔn)是由Intel處理器(8086, 80386)定義的,并由IBM分發(fā)出去。硬件擴(kuò)展和所有的軟件標(biāo)準(zhǔn)(BIOS調(diào)用約定)都開放有市場競爭。 一群獨(dú)立的軟件公司提供了操作系統(tǒng),不同語言的編譯器以及一些應(yīng)用軟件。基于不同的需求,歷史實(shí)踐和開發(fā)人員的創(chuàng)造力,這些公司都使用了各自不同的調(diào)用約定,往往差異很大。 在IBM兼容機(jī)市場洗牌后,微軟操作系統(tǒng)和編程工具(有不同的調(diào)用約定)占據(jù)了統(tǒng)治地位,此時位于第二層次的公司如Borland和Novell,以及開源項(xiàng)目如GCC,都還各自維護(hù)自己的標(biāo)準(zhǔn)。互操作性的規(guī)定最終被硬件供應(yīng)商和軟件產(chǎn)品所采納,簡化了選擇可行標(biāo)準(zhǔn)的問題。

調(diào)用者清理

在這些約定中,調(diào)用者自己清理堆棧上的參數(shù)(arguments),這樣就允許了可變參數(shù)列表的實(shí)現(xiàn),如printf()。

cdecl

cdecl(C declaration,即C聲明)是源起C語言的一種調(diào)用約定,也是C語言的事實(shí)上的標(biāo)準(zhǔn)。在x86架構(gòu)上,其內(nèi)容包括:

  • 函數(shù)實(shí)參在線程棧上按照從右至左的順序依次壓棧。
  • 函數(shù)結(jié)果保存在寄存器EAX/AX/AL中
  • 浮點(diǎn)型結(jié)果存放在寄存器ST0中
  • 編譯后的函數(shù)名前綴以一個下劃線字符
  • 調(diào)用者負(fù)責(zé)從線程棧中彈出實(shí)參(即清棧)
  • 8比特或者16比特長的整形實(shí)參提升為32比特長。
  • 受到函數(shù)調(diào)用影響的寄存器(volatile registers):EAX, ECX, EDX, ST0 - ST7, ES, GS
  • 不受函數(shù)調(diào)用影響的寄存器: EBX, EBP, ESP, EDI, ESI, CS, DS
  • RET指令從函數(shù)被調(diào)用者返回到調(diào)用者(實(shí)質(zhì)上是讀取寄存器EBP所指的線程棧之處保存的函數(shù)返回地址并加載到IP寄存器)
  • Visual C++規(guī)定函數(shù)返回值如果是POD值且長度如果不超過32比特,用寄存器EAX傳遞;長度在33-64比特范圍內(nèi),用寄存器EAX:EDX傳遞;長度超過64比特或者非POD值,則調(diào)用者為函數(shù)返回值預(yù)先分配一個空間,把該空間的地址作為隱式參數(shù)傳遞給被調(diào)函數(shù)。

    GCC的函數(shù)返回值都是由調(diào)用者分配空間,并把該空間的地址作為隱式參數(shù)傳遞給被調(diào)函數(shù),而不使用寄存器EAX。GCC自4.5版本開始,調(diào)用函數(shù)時,堆棧上的數(shù)據(jù)必須以16B對齊(之前的版本只需要4B對齊即可)。

    考慮下面的C代碼片段:

    int callee(int, int, int);int caller(void){register int ret;ret = callee(1, 2, 3);ret += 5;return ret;}

    在x86上, 會產(chǎn)生如下匯編代碼(AT&T 語法):

    .globl callercaller:pushl %ebpmovl %esp,%ebppushl $3pushl $2pushl $1call calleeaddl $12,%espaddl $5,%eaxleaveret

    在函數(shù)返回后,調(diào)用的函數(shù)清理了堆棧。 在cdecl的理解上存在一些不同,尤其是在如何返回值的問題上。結(jié)果,x86程序經(jīng)過不同OS平臺的不同編譯器編譯后,會有不兼容的情況,即使它們使用的都是“cdecl”規(guī)則并且不會使用系統(tǒng)調(diào)用。某些編譯器返回簡單的數(shù)據(jù)結(jié)構(gòu),長度大致占用兩個寄存器,放在寄存器對EAX:EDX中;大點(diǎn)的結(jié)構(gòu)和類對象需要異常處理器的一些特殊處理(如一個定義的構(gòu)造函數(shù),析構(gòu)函數(shù)或賦值),存放在內(nèi)存上。為了放置在內(nèi)存上,調(diào)用者需要分配一些內(nèi)存,并且讓一個指針指向這塊內(nèi)存,這個指針就作為隱藏的第一個參數(shù);被調(diào)用者使用這塊內(nèi)存并返回指針----返回時彈出隱藏的指針。 在Linux/GCC,浮點(diǎn)數(shù)值通過x87偽棧被推入堆棧。像這樣:

    sub esp, 8 ; 給double值一點(diǎn)空間fld [ebp + x] ; 加載double值到浮點(diǎn)堆棧上fstp [esp] ; 推入堆棧call functadd esp, 8

    使用這種方法確保能以正確的格式推入堆棧。 cdecl調(diào)用約定通常作為x86 C編譯器的默認(rèn)調(diào)用規(guī)則,許多編譯器也提供了自動切換調(diào)用約定的選項(xiàng)。如果需要手動指定調(diào)用規(guī)則為cdecl,編譯器可能會支持如下語法:

    return_type _cdecl funct();

    其中_cdecl修飾符需要在函數(shù)原型中給出,在函數(shù)聲明中會覆蓋掉其他的設(shè)置。

    syscall

    與cdecl類似,參數(shù)被從右到左推入堆棧中。EAX, ECX和EDX不會保留值。參數(shù)列表的大小被放置在AL寄存器中(?)。 syscall是32位OS/2 API的標(biāo)準(zhǔn)。

    optlink

    參數(shù)也是從右到左被推入堆棧。從最左邊開始的三個字符變元會被放置在EAX, EDX和ECX中,最多四個浮點(diǎn)變元會被傳入ST(0)到ST(3)中----雖然這四個參數(shù)的空間也會在參數(shù)列表的棧上保留。函數(shù)的返回值在EAX或ST(0)中。保留的寄存器有EBP, EBX, ESI和EDI。 optlink在IBM VisualAge編譯器中被使用。

    被調(diào)用者清理

    如果被調(diào)用者要清理?xiàng)I系膮?shù),需要在編譯階段知道棧上有多少字節(jié)要處理。因此,此類的調(diào)用約定并不能兼容于可變參數(shù)列表,如printf()。然而,這種調(diào)用約定也許會更有效率,因?yàn)樾枰舛褩5拇a不要在每次調(diào)用時都生成一遍。 使用此規(guī)則的函數(shù)容易在asm代碼被認(rèn)出,因?yàn)樗鼈儠诜祷厍敖舛褩!86 ret指令允許一個可選的16位參數(shù)說明棧字節(jié)數(shù),用來在返回給調(diào)用者之前解堆棧。代碼類似如下:

    ret 12

    pascal

    基于Pascal語言的調(diào)用約定,參數(shù)從左至右入棧(與cdecl相反)。被調(diào)用者負(fù)責(zé)在返回前清理堆棧。 此調(diào)用約定常見在如下16-bit 平臺的編譯器:OS/2 1.x,微軟Windows 3.x,以及Borland Delphi版本1.x。

    register

    Borland fastcall的別名。

    stdcall

    stdcall是由微軟創(chuàng)建的調(diào)用約定,是Windows API的標(biāo)準(zhǔn)調(diào)用約定。非微軟的編譯器并不總是支持該調(diào)用協(xié)議。GCC編譯器如下使用:

    int __attribute__((__stdcall__ )) func()

    stdcall是Pascal調(diào)用約定與cdecl調(diào)用約定的折衷:被調(diào)用者負(fù)責(zé)清理線程棧,參數(shù)從右往左入棧。其他各方面基本與cdecl相同。但是編譯后的函數(shù)名后綴以符號"@",后跟傳遞的函數(shù)參數(shù)所占的棧空間的字節(jié)長度。寄存器EAX, ECX和EDX被指定在函數(shù)中使用,返回值放置在EAX中。stdcall對于微軟Win32 API和Open Watcom C++是標(biāo)準(zhǔn)。

    微軟的編譯工具規(guī)定:PASCAL, WINAPI, APIENTRY, FORTRAN, CALLBACK, STDCALL, __far __pascal, __fortran, __stdcall均是指此種調(diào)用約定。

    fastcall

    此約定還未被標(biāo)準(zhǔn)化,不同編譯器的實(shí)現(xiàn)也不一致。

    Microsoft/GCC fastcall

    Microsoft或GCC的__fastcall約定(也即__msfastcall)把第一個(從左至右)不超過32比特的參數(shù)通過寄存器ECX/CX/CL傳遞,第二個不超過32比特的參數(shù)通過寄存器EDX/DX/DL,其他參數(shù)按照自右到左順序壓棧傳遞。

    Borland fastcall

    從左至右,傳入三個參數(shù)至EAX, EDX和ECX中。剩下的參數(shù)推入棧,也是從左至右。 在32位編譯器Embarcadero Delphi中,這是缺省調(diào)用約定,在編譯器中以register形式為人知。 在i386上的某些版本Linux也使用了此約定。

    調(diào)用者或被調(diào)用者清理

    thiscall

    在調(diào)用C++非靜態(tài)成員函數(shù)時使用此約定。基于所使用的編譯器和函數(shù)是否使用可變參數(shù),有兩個主流版本的thiscall。 對于GCC編譯器,thiscall幾乎與cdecl等同:調(diào)用者清理堆棧,參數(shù)從右到左傳遞。差別在于this指針,thiscall會在最后把this指針推入棧中,即相當(dāng)于在函數(shù)原型中是隱式的左數(shù)第一個參數(shù)。

    在微軟Visual C++編譯器中,this指針通過ECX寄存器傳遞,其余同cdecl約定。當(dāng)函數(shù)使用可變參數(shù),此時調(diào)用者負(fù)責(zé)清理堆棧(參考cdecl)。thiscall約定只在微軟Visual C++ 2005及其之后的版本被顯式指定。其他編譯器中,thiscall并不是一個關(guān)鍵字(反匯編器如IDA使用__thiscall)。

    Intel ABI

    根據(jù)Intel ABI,EAX、EDX及ECX可以自由在過程或函數(shù)中使用,不需要保留。

    x86-64調(diào)用約定

    x86-64調(diào)用約定得益于更多的寄存器可以用來傳參。而且,不兼容的調(diào)用約定也更少了,不過還是有2種主流的規(guī)則。

    微軟x64調(diào)用約定

    微軟x64調(diào)用約定使用RCX, RDX, R8, R9這四個寄存器傳遞頭四個整型或指針變量(從左到右),使用XMM0, XMM1, XMM2, XMM3來傳遞浮點(diǎn)變量。其他的參數(shù)直接入棧(從右至左)。整型返回值放置在RAX中,浮點(diǎn)返回值在XMM0中。少于64位的參數(shù)并沒有做零擴(kuò)展,此時高位充斥著垃圾。 在Windows x64環(huán)境下編譯代碼時,只有一種調(diào)用約定----就是上面描述的約定,也就是說,32位下的各種約定在64位下統(tǒng)一成一種了。 在微軟x64調(diào)用約定中,調(diào)用者的一個職責(zé)是在調(diào)用函數(shù)之前(無論實(shí)際的傳參使用多大空間),在棧上的函數(shù)返回地址之上(靠近棧頂)分配一個32字節(jié)的“影子空間”;并且在調(diào)用結(jié)束后從棧上彈掉此空間。影子空間是用來給RCX, RDX, R8和R9提供保存值的空間,即使是對于少于四個參數(shù)的函數(shù)也要分配這32個字節(jié)。

    例如, 一個函數(shù)擁有5個整型參數(shù),第一個到第四個放在寄存器中,第五個就被推到影子空間之外的棧頂。當(dāng)函數(shù)被調(diào)用,此棧用來組成返回值----影子空間32位+第五個參數(shù)。

    在x86-64體系下,Visual Studio 2008在XMM6和XMM7中(同樣的有XMM8到XMM15)存儲浮點(diǎn)數(shù)。結(jié)果對于用戶寫的匯編語言例程,必須保存XMM6和XMM7(x86不用保存這兩個寄存器),這也就是說,在x86和x86-64之間移植匯編例程時,需要注意在函數(shù)調(diào)用之前/之后,要保存/恢復(fù)XMM6和XMM7。

    System V AMD64 ABI

    此約定主要在Solaris,GNU/Linux,FreeBSD和其他非微軟OS上使用。頭六個整型參數(shù)放在寄存器RDI, RSI, RDX, RCX, R8和R9上;同時XMM0到XMM7用來放置浮點(diǎn)變元。對于系統(tǒng)調(diào)用,R10用來替代RCX。同微軟x64約定一樣,其他額外的參數(shù)推入棧,返回值保存在RAX中。 與微軟不同的是,不需要提供影子空間。在函數(shù)入口,返回值與棧上第七個整型參數(shù)相鄰。

    以上內(nèi)容來源中文維基:https://zh.wikipedia.org/zh-hans/X86%E8%B0%83%E7%94%A8%E7%BA%A6%E5%AE%9A

    ?

    我們知道函數(shù)由以下幾部分構(gòu)成:返回值類型 函數(shù)名(參數(shù)列表),如:?
    【code1】

    void function(); int add(int a, int b);

    以上是大家所熟知的構(gòu)成部分,其實(shí)函數(shù)的構(gòu)成還有一部分,那就是調(diào)用約定。如下:?
    【code2】

    void __cdecl function(); int __stdcall add(int a, int b);

    上面的__cdecl和__stdcall就是調(diào)用約定,其中__cdecl是C和C++默認(rèn)的調(diào)用約定,所以通常我們的代碼都如 【code1】中那樣定義,編譯器默認(rèn)會為我們使用__cdecl調(diào)用約定。常見的調(diào)用約定有__cdecl、__stdcall、fastcall,應(yīng)用最廣泛的是__cdecl和__stdcall,下面我們會詳細(xì)進(jìn)行講述。。還有一些不常見的,如 __pascal、__thiscall、__vectorcall。

    聲明和定義處調(diào)用約定必須要相同

    在VC++中,調(diào)用約定是函數(shù)類型的一部分,因此函數(shù)的聲明和定義處調(diào)用約定要相同,不能只在聲明處有調(diào)用約定,而定義處沒有或與聲明不同。如下:?
    【code3】 錯誤的使用一:

    int __stdcall add(int a, int b); int add(int a, int b) {return a + b; }

    報錯:

    error C2373: ‘a(chǎn)dd’: redefinition; different type modifiers?
    error C2440: ‘initializing’: cannot convert from ‘int (__stdcall *)(int,int)’ to ‘int’

    補(bǔ)充:

    int __cdecl add(int a, int b); int add(int a, int b) {return a + b; }

    以上就沒問題,因?yàn)槟J(rèn)是__cdecl。

    【code4】 錯誤的使用二:

    int add(int a, int b); int __stdcall add(int a, int b) {return a + b; }

    報錯:

    error C2373: ‘a(chǎn)dd’: redefinition; different type modifiers?
    error C2440: ‘initializing’: cannot convert from ‘int (__cdecl *)(int,int)’ to ‘int’

    【code5】 錯誤的使用三:

    int __stdcall add(int a, int b); int __cdecl add(int a, int b) {return a + b; }

    報錯:

    error C2373: ‘a(chǎn)dd’: redefinition; different type modifiers?
    error C2440: ‘initializing’: cannot convert from ‘int (__stdcall *)(int,int)’ to ‘int’

    【code6】 正確的用法:

    int __stdcall add(int a, int b); int __stdcall add(int a, int b) {return a + b; }

    函數(shù)的調(diào)用過程

    要深入理解函數(shù)調(diào)用約定,你須要了解函數(shù)的調(diào)用過程和調(diào)用細(xì)節(jié)。?
    假設(shè)函數(shù)A調(diào)用函數(shù)B,我們稱A函數(shù)為”調(diào)用者”,B函數(shù)為“被調(diào)用者”。如下面的代碼,ShowResult為調(diào)用者,add為被調(diào)用者。

    int add(int a, int b) {return a + b; }void ShowResult() {std::cout << add(5, 10) << std::endl; }

    函數(shù)調(diào)用過程可以這么描述:?
    (1)先將調(diào)用者(A)的堆棧的基址(ebp)入棧,以保存之前任務(wù)的信息。?
    (2)然后將調(diào)用者(A)的棧頂指針(esp)的值賦給ebp,作為新的基址(即被調(diào)用者B的棧底)。?
    (3)然后在這個基址(被調(diào)用者B的棧底)上開辟(一般用sub指令)相應(yīng)的空間用作被調(diào)用者B的棧空間。?
    (4)函數(shù)B返回后,從當(dāng)前棧幀的ebp即恢復(fù)為調(diào)用者A的棧頂(esp),使棧頂恢復(fù)函數(shù)B被調(diào)用前的位置;然后調(diào)用者A再從恢復(fù)后的棧頂可彈出之前的ebp值(可以這么做是因?yàn)檫@個值在函數(shù)調(diào)用前一步被壓入堆棧)。這樣,ebp和esp就都恢復(fù)了調(diào)用函數(shù)B前的位置,也就是棧恢復(fù)函數(shù)B調(diào)用前的狀態(tài)。?
    這個過程在AT&T匯編中通過兩條指令完成,即:?

    leaveret這兩條指令更直白點(diǎn)就相當(dāng)于:mov %ebp , %esppop %ebp

    ?

    __cdecl的特點(diǎn)

    __cdecl 是 C Declaration 的縮寫,表示 C 和 C++ 默認(rèn)的函數(shù)調(diào)用約定。是C/C++和MFCX的默認(rèn)調(diào)用約定。

    • 按從右至左的順序壓參數(shù)入棧、。
    • 由調(diào)用者把參數(shù)彈出棧。切記:對于傳送參數(shù)的內(nèi)存棧是由調(diào)用者來維護(hù)的,返回值在EAX中。因此對于像printf這樣可變參數(shù)的函數(shù)必須用這種約定。
    • 編譯器在編譯的時候?qū)@種調(diào)用規(guī)則的函數(shù)生成修飾名的時候,在輸出函數(shù)名前加上一個下劃線前綴,格式為_function。如函數(shù)int add(int a, int b)的修飾名是_add。

    (1).為了驗(yàn)證參數(shù)是從右至左的順序壓棧的,我們可以看下面這段代碼,Debug進(jìn)行單步調(diào)試,可以看到我們的調(diào)用棧會先進(jìn)入GetC(),再進(jìn)入GetB(),最后進(jìn)入GetA()。?

    (2).第二點(diǎn)“調(diào)用者把參數(shù)彈出棧”,這是編譯器的工作,暫時沒辦法驗(yàn)證。要深入了解這部分,需要學(xué)習(xí)匯編語言相關(guān)的知識。

    (3).函數(shù)的修飾名,這個可以通過對編譯出的dll使用VS的”dumpbin /exports?ProjectName.dll”命令進(jìn)行查看(后面章節(jié)會進(jìn)行詳細(xì)介紹),或直接打開.obj文件查找對應(yīng)的方法名(如搜索add)。

    從代碼和程序調(diào)試的層面考慮,參數(shù)的壓棧順序和棧的清理我們都不用太觀注,因?yàn)檫@是編譯器的決定的,我們改變不了。但第三點(diǎn)卻常常困擾我們,因?yàn)槿绻慌宄@點(diǎn),在多個庫之間(如dll、lib、exe)相互調(diào)用、依賴時常常出出現(xiàn)莫名其妙的錯誤。這個我在后面章節(jié)會進(jìn)行詳細(xì)介紹。

    __stdcall的特點(diǎn)

    __stdcall是Standard Call的縮寫,是C++的標(biāo)準(zhǔn)調(diào)用方式,當(dāng)然這是微軟定義的標(biāo)準(zhǔn),__stdcall通常用于Win32 API中(可查看WINAPI的定義)。?? microsoft的vc默認(rèn)的是__cdecl方式,而windows API則是__stdcall,如果用vc開發(fā)dll給其他語言用,則應(yīng)該指定__stdcall方式。堆棧由誰清除這個很重要,如果是要寫匯編函數(shù)給C調(diào)用,一定要小心堆棧的清除工作,如果是__cdecl方式的函數(shù),則函數(shù)本身(如果不用匯編寫)則不需要關(guān)心保存參數(shù)的堆棧的清除,但是如果是__stdcall的規(guī)則,一定要在函數(shù)退出(ret)前恢復(fù)堆棧。

    • 按從右至左的順序壓參數(shù)入棧。
    • 由被調(diào)用者把參數(shù)彈出棧。切記:函數(shù)自己在退出時清空堆棧,返回值在EAX中。
    • __stdcall調(diào)用約定在輸出函數(shù)名前加上一個下劃線前綴,后面加上一個“@”符號和其參數(shù)的字節(jié)數(shù),格式為_function@number。如函數(shù)int sub(int a, int b)的修飾名是_sub@8。

    __fastcall的特點(diǎn)

    __fastcall調(diào)用的主要特點(diǎn)就是快,因?yàn)樗峭ㄟ^寄存器來傳送參數(shù)的。

    • 實(shí)際上__fastcall用ECX和EDX傳送前兩個DWORD或更小的參數(shù),剩下的參數(shù)仍自右向左壓棧傳送,被調(diào)用的函數(shù)在返回前清理傳送參數(shù)的內(nèi)存棧。
    • __fastcall調(diào)用約定在輸出函數(shù)名前加上一個“@”符號,后面也是一個“@”符號和其參數(shù)的字節(jié)數(shù),格式為@function@number,如double multi(double a, double b)的修飾名是@multi@16。
    • __fastcall和__stdcall很象,唯一差別就是頭兩個參數(shù)通過寄存器傳送。注意通過寄存器傳送的兩個參數(shù)是從左向右的,即第1個參數(shù)進(jìn)ECX,第2個進(jìn)EDX,其他參數(shù)是從右向左的入棧,返回仍然通過EAX。

    __thiscall

    __thiscall是C++類成員函數(shù)缺省的調(diào)用約定,但它沒有顯示的聲明形式。因?yàn)樵贑++類中,成員函數(shù)調(diào)用還有一個this指針參數(shù),因此必須特殊處理,thiscall調(diào)用約定的特點(diǎn):

    • 參數(shù)入棧:參數(shù)從右向左入棧
    • this指針入棧:如果參數(shù)個數(shù)確定,this指針通過ecx傳遞給被調(diào)用者;如果參數(shù)個數(shù)不確定,this指針在所有參數(shù)壓棧后被壓入棧。
    • 棧恢復(fù):對參數(shù)個數(shù)不定的,調(diào)用者清理?xiàng)?#xff0c;否則函數(shù)自己清理?xiàng)!?/li>

    總結(jié)

    這里主要總結(jié)一下_cdecl、_stdcall、__fastcall三者之間的區(qū)別:

    要點(diǎn)__cdecl__stdcall__fastcall
    參數(shù)傳遞方式右->左右->左左邊開始的兩個不大于4字節(jié)(DWORD)的參數(shù)分別放在ECX和EDX寄存器,其余的參數(shù)自右向左壓棧傳送
    清理?xiàng)7?/td>調(diào)用者清理被調(diào)用函數(shù)清理被調(diào)用函數(shù)清理
    適用場合C/C++、MFC的默認(rèn)方式; 可變參數(shù)的時候使用;Win API要求速度快
    C編譯修飾約定_functionname_functionname@number@functionname@number

    以上內(nèi)容參考:https://blog.csdn.net/luoweifu/article/details/52425733#commentBox

    _cdecl 是C Declaration的縮寫,表示C語言默認(rèn)的函數(shù)調(diào)用方法:所有參數(shù)從右到左依次入棧,這些參數(shù)由調(diào)用者清除,稱為手動清棧。被調(diào)用函數(shù)無需要求調(diào)用者傳遞多少參數(shù),調(diào)用者傳遞過多或者過少的參數(shù),甚至完全不同的參數(shù)都不會產(chǎn)生編譯階段的錯誤。

    _stdcall 是Standard Call的縮寫,是C++的標(biāo)準(zhǔn)調(diào)用方式:所有參數(shù)從右到左依次入棧,如果是調(diào)用類成員的話,最后一個入棧的是this指針。這些堆棧中的參數(shù)由被調(diào)用的函數(shù)在返回后清除,使用的指令是 retn X,X表示參數(shù)占用的字節(jié)數(shù),CPU在ret之后自動彈出X個字節(jié)的堆棧空間。稱為自動清棧。函數(shù)在編譯的時候就必須確定參數(shù)個數(shù),并且調(diào)用者必須嚴(yán)格的控制參數(shù)的生成,不能多,不能少,否則返回后會出錯。

    PASCAL 是Pascal語言的函數(shù)調(diào)用方式,也可以在C/C++中使用,參數(shù)壓棧順序與前兩者相反。返回時的清棧方式忘記了。。。

    _fastcall 是編譯器指定的快速調(diào)用方式。由于大多數(shù)的函數(shù)參數(shù)個數(shù)很少,使用堆棧傳遞比較費(fèi)時。因此_fastcall通常規(guī)定將前兩個(或若干個)參數(shù)由寄存器傳遞,其余參數(shù)還是通過堆棧傳遞。不同編譯器編譯的程序規(guī)定的寄存器不同。返回方式和_stdcall相當(dāng)。

    _thiscall 是為了解決類成員調(diào)用中this指針傳遞而規(guī)定的。_thiscall要求把this指針放在特定寄存器中,該寄存器由編譯器決定。VC使用ecx,Borland的C++編譯器使用eax。返回方式和_stdcall相當(dāng)。

    _fastcall 和 _thiscall涉及的寄存器由編譯器決定,因此不能用作跨編譯器的接口。所以Windows上的COM對象接口都定義為_stdcall調(diào)用方式。

    C中不加說明默認(rèn)函數(shù)為_cdecl方式(C中也只能用這種方式),C++也一樣,但是默認(rèn)的調(diào)用方式可以在IDE環(huán)境中設(shè)置。

    帶有可變參數(shù)的函數(shù)必須且只能使用_cdecl方式,例如下面的函數(shù):
    int printf(char * fmtStr, ...);
    int scanf(char * fmtStr, ...);

    這兩個關(guān)鍵字看起來似乎很少和我們打交道,但是看了下面的定義(來自windef.h
    ),你一定會覺得驚訝:
    ???? #define CALLBACK???? __stdcall
    ???? #define WINAPI?????? __stdcall
    ???? #define WINAPIV????? __cdecl
    ???? #define APIENTRY???? WINAPI
    ???? #define APIPRIVATE?? __stdcall
    ???? #define PASCAL?????? __stdcall
    ???? #define cdecl _cdecl
    ???? #ifndef CDECL
    ???? #define CDECL _cdecl
    ???? #endif
    ????幾乎我們寫的每一個WINDOWS API函數(shù)都是__stdcall類型的,為什么??
    ???? 首先,我們談一下兩者之間的區(qū)別:
    ?????? WINDOWS的函數(shù)調(diào)用時需要用到棧(STACK,一種先入后出的存儲結(jié)構(gòu))。當(dāng)函數(shù)調(diào)用完成后,棧需要清除,這里就是問題的關(guān)鍵,如何清除??
    ?????? 如果我們的函數(shù)使用了_cdecl,那么棧的清除工作是由調(diào)用者,用COM的術(shù)語來講就是客戶來完成的。這樣帶來了一個棘手的問題,不同的編譯器產(chǎn)生棧的方式不盡相同,那么調(diào)用者能否正常的完成清除工作呢?答案是不能。
    ?????? 如果使用__stdcall,上面的問題就解決了,函數(shù)自己解決清除工作。所以,在跨(開發(fā))平臺的調(diào)用中,我們都使用__stdcall(雖然有時是以WINAPI的樣子出現(xiàn))。
    ? ? ? ?那么為什么還需要_cdecl呢?當(dāng)我們遇到這樣的函數(shù)如fprintf()它的參數(shù)是可變的,不定長的,被調(diào)用者事先無法知道參數(shù)的長度,事后的清除工作也無法正常的進(jìn)行,因此,這種情況我們只能使用_cdecl。
    ?????? 到這里我們有一個結(jié)論,如果你的程序中沒有涉及可變參數(shù),最好使用__stdcall關(guān)鍵字

    總結(jié)

    以上是生活随笔為你收集整理的【转】调用约定__cdecl、__stdcall和__fastcall的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    日批视频在线观看免费 | 狠狠狠色丁香综合久久天下网 | 欧美日韩中文视频 | 中文字幕精品久久 | 五月婷婷精品 | 久久极品| 欧美精品一二 | 在线观看亚洲电影 | 99视频精品免费视频 | 国产一区二区三区久久久 | 国产中文字幕一区 | 国产一级在线观看视频 | 国产精品福利视频 | 国产字幕在线看 | 国产精品美 | 日韩精品在线播放 | 天天干天天操天天做 | 国产丝袜一区二区三区 | 国产资源在线观看 | 国产1区在线 | 日韩精品一区二区三区免费视频观看 | 麻豆视传媒官网免费观看 | 在线a亚洲视频播放在线观看 | av电影免费在线看 | 深爱激情五月综合 | 亚洲永久国产精品 | 国际精品久久久 | 天天曰天天射 | 国产精品成人免费精品自在线观看 | 欧美aaa一级| 成人久久18免费 | 亚洲成av片人久久久 | japanese黑人亚洲人4k | 久久av中文字幕片 | 三上悠亚一区二区在线观看 | 亚洲精品在线观看中文字幕 | 五月天激情婷婷 | 久久蜜臀一区二区三区av | 午夜av日韩 | 精品国产一区二区三区久久影院 | 激情久久影院 | 亚洲精品视频免费观看 | 91爱爱电影 | 国产高清永久免费 | 日本精品视频免费观看 | 国产高清视频在线 | 久久99最新地址 | 狠狠色伊人亚洲综合成人 | www日韩高清 | 91精品国产欧美一区二区 | 热99在线| 99re中文字幕 | 日日夜操 | 亚洲激情 欧美激情 | a成人v在线 | 国产一区二区不卡视频 | 日日夜夜噜噜噜 | 久久男人中文字幕资源站 | 婷婷丁香社区 | 香蕉视频在线播放 | 免费看的av片 | 精品国产片 | 色网站在线免费观看 | 免费三级黄色片 | 国产在线免费 | 免费久久网 | 免费观看91视频 | 久视频在线 | 欧美日韩视频免费 | 精品嫩模福利一区二区蜜臀 | 欧美日比视频 | 欧美日韩中文字幕在线视频 | 首页av在线| 国产精品美女网站 | 视频国产在线 | 亚洲成人动漫在线观看 | 国产码电影 | 中文字幕亚洲高清 | 国产精品毛片久久蜜 | 成人网在线免费视频 | 又粗又长又大又爽又黄少妇毛片 | 制服丝袜一区二区 | av在线超碰 | 久久免费视频观看 | 国产小视频免费在线观看 | 国产精品一区二区三区四 | 欧美巨乳网 | 麻豆视频免费在线观看 | 激情欧美一区二区三区 | 午夜精品久久久久久久99 | 91中文字幕一区 | 狠狠狠干狠狠 | 丁香六月在线 | 亚洲 欧美变态 另类 综合 | 国产91精品看黄网站在线观看动漫 | 亚洲经典视频在线观看 | 中文字幕在线资源 | 欧美99热 | 美女视频黄免费网站 | 久久久久成| 精品久久五月天 | 97在线看片 | 高清色免费 | 天天爱天天爽 | 成人av视屏 | 天天操天天怕 | 欧美综合干 | 免费在线激情电影 | 天天久久综合 | 久久国产精品99国产 | 久久国产精品久久精品 | 99激情网 | 国产精品永久在线观看 | 麻豆91精品91久久久 | av免费播放| 狠狠做深爱婷婷综合一区 | 综合av在线 | 日韩亚洲国产中文字幕 | av久久在线| 欧美一区二区视频97 | wwwav视频 | 在线观看视频h | 免费观看一级一片 | 久久免费视频在线观看30 | 欧美一级日韩三级 | 国产最顶级的黄色片在线免费观看 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 天天操天天操天天操 | 久久久久久久毛片 | 国语久久 | 奇米网8888| 天天操天天射天天爱 | 欧美久久影院 | 在线国产能看的 | 欧美有色 | 国产999精品 | 五月综合激情婷婷 | 久99久在线 | 一区二区三区 中文字幕 | 97理论片| 91精品一区在线观看 | 国产一区二区三区免费在线观看 | 精品国产成人在线影院 | 欧美日韩亚洲精品在线 | 亚洲综合婷婷 | 国产精品毛片久久蜜 | 超碰人人91 | 国产一区二区三区免费观看视频 | 天天艹天天爽 | 日韩成人精品在线观看 | 亚洲人久久 | 激情五月婷婷网 | 国产福利不卡视频 | 日韩免费播放 | 不卡的av中文字幕 | 1024手机基地在线观看 | 高清av网站| 国产三级香港三韩国三级 | 中文不卡视频 | 久久99精品波多结衣一区 | 精品国产自在精品国产精野外直播 | 99精品区| 一区二区三区四区免费视频 | 91欧美日韩国产 | 极品嫩模被强到高潮呻吟91 | 久久艹综合| 国产成人91 | 国产精品com | 日本久久不卡视频 | 91视频下载 | 亚洲在线视频免费观看 | 正在播放 久久 | 在线你懂 | 久久婷婷视频 | 亚洲免费av电影 | 亚洲午夜精品在线观看 | 国产精品一区在线播放 | 欧美另类z0zx | 久久国产精彩视频 | 久久在线免费视频 | 97超碰资源网 | www免费 | 久久久久高清毛片一级 | 人人狠狠| 欧美日韩破处 | 在线天堂亚洲 | 欧美日本啪啪无遮挡网站 | 人人爱人人射 | 久久高清av | 综合色在线观看 | 日日夜夜精品免费观看 | 色com网| 99热精品久久 | 国产一区二区三区免费在线 | 精品久久久亚洲 | 国产精品综合久久久 | 国产精品九九九 | 国产美女网站在线观看 | 国产精品久久久久久久久久久久午夜 | 国产精品99久久久 | 国产国语在线 | 摸阴视频 | 六月丁香激情综合 | 亚洲精品动漫久久久久 | 天天综合成人网 | 日韩免费b | 亚洲国产精品影院 | 欧美精品久久久久a | 国产免费激情久久 | 午夜视频色 | 国产精品久久久久影院 | 午夜一级免费电影 | 精品国产乱码久久久久 | 国产精品免费看久久久8精臀av | 午夜在线观看一区 | 国产精品自产拍在线观看蜜 | 337p日本欧洲亚洲大胆裸体艺术 | 最新动作电影 | 日韩电影精品 | 狠狠色伊人亚洲综合网站色 | 国产精品久久99综合免费观看尤物 | 三级在线视频观看 | 亚洲一级片在线看 | 精品国产1区二区 | 成人在线视| 国产剧情一区在线 | 丁香六月五月婷婷 | 国产成人a亚洲精品 | 国产精品一区二区美女视频免费看 | 欧美精品久久久久久久免费 | 在线观看亚洲精品 | 色狠狠一区二区 | 国产最新在线视频 | av在线播放快速免费阴 | av 在线观看 | 日韩在线观看你懂得 | 国产精品免费久久久久影院仙踪林 | 欧美性色黄大片在线观看 | 97自拍超碰 | 久久久久欧美精品999 | 国产精品 国内视频 | 久草视频首页 | 日韩影片在线观看 | 国内精品久久久久影院男同志 | 天天狠狠干| 网站在线观看你们懂的 | 四虎成人在线 | 五月天久久激情 | 在线成人性视频 | 久久久69| 久久夜夜爽 | 黄色在线成人 | 激情久久一区二区三区 | 性色在线视频 | 四虎天堂| av播放在线 | 久草网视频在线观看 | 久久观看最新视频 | 免费一级特黄录像 | 久久这里只有精品9 | 人人草在线视频 | 天天干,夜夜爽 | 中文字幕资源在线 | 国产女人免费看a级丨片 | 夜夜爱av| 美女视频a美女大全免费下载蜜臀 | 最近中文字幕完整视频高清1 | 亚洲另类视频 | 国产精品视频永久免费播放 | 国产手机视频精品 | 一区二区三区久久精品 | 中文在线字幕观看电影 | www.超碰97.com | 中文字幕日本电影 | 亚洲一区二区观看 | 国产精品久久久久久久妇 | 国产亚洲日本 | 中文字幕精品www乱入免费视频 | 国产精品12345 | 亚洲天堂精品视频在线观看 | 人人爽人人爽人人爽人人爽 | 最近中文字幕在线播放 | 狠狠狠色丁香综合久久天下网 | 国产成人777777 | 久久久久久久久久久久亚洲 | 亚洲国产中文字幕在线观看 | 中文字幕在线观 | 999视频网 | 国产精品久久久久av福利动漫 | 日韩欧美高清在线观看 | 色资源在线观看 | 超碰在线97国产 | 国产爽视频 | 久久免费看片 | 成人免费大片黄在线播放 | 免费成人看片 | 亚洲美女精品区人人人人 | 91精品免费在线观看 | 4438全国亚洲精品在线观看视频 | 久久经典国产视频 | 日韩动漫免费观看高清完整版在线观看 | 天天干天天操天天射 | 久久综合欧美精品亚洲一区 | 精品一区二区在线免费观看 | 天堂在线视频中文网 | 日本久久久影视 | 一二三区在线 | 少妇搡bbb| 天天操天天是 | 成人网在线免费视频 | 三级a视频 | 欧美久久影院 | 四虎成人精品 | 国产 av 日韩| 99久久激情| 久久福利精品 | 亚洲成人蜜桃 | 成人免费观看视频大全 | 日日草天天草 | 日韩在线三区 | 亚洲a在线观看 | 久久综合网色—综合色88 | 一级黄色在线免费观看 | 手机在线观看国产精品 | 91丨精品丨蝌蚪丨白丝jk | 国产欧美最新羞羞视频在线观看 | 成人全视频免费观看在线看 | 婷婷色综合 | 九九激情视频 | 免费在线观看视频a | 久久成人在线视频 | 97超碰人人 | wwwwww黄| 蜜臀av在线一区二区三区 | 波多野结衣一区二区 | 狠狠色狠狠色综合日日92 | 日本精品久久 | 精品一区二区在线观看 | 五月天六月婷婷 | 国产精品久久久久亚洲影视 | 片网址| 欧美在线观看视频 | 日韩高清免费无专码区 | 久久国产精品99久久久久久进口 | 免费国产一区二区视频 | 国产精品免费不 | 国产精品一区二区在线观看 | 美女久久视频 | 九九免费在线观看视频 | 亚洲午夜精品久久久 | 国产v视频| 少妇bbb搡bbbb搡bbbb | 欧美一区日韩精品 | 久久综合影院 | 亚洲精品视频国产 | 日本久久成人中文字幕电影 | 成人av网址大全 | 成人免费观看av | 国产精品久久久久aaaa | 日韩欧美在线综合网 | 欧美国产日韩一区 | 成人三级av | 伊人五月天.com| 正在播放五月婷婷狠狠干 | 夜夜操狠狠干 | 色婷婷播放 | 国产亚洲成av人片在线观看桃 | 国产视频手机在线 | 国产成人亚洲精品自产在线 | 国产精品乱码久久久久 | 欧美精品乱码久久久久 | 精品免费久久久久久 | 欧美国产日韩一区二区三区 | 国产精品一区久久久久 | av在线日韩| 国产成人精品一区在线 | 久久精品一区八戒影视 | 日韩专区在线 | 久久综合狠狠狠色97 | 美女免费视频观看网站 | 91精品国产麻豆国产自产影视 | 中文字幕在线播出 | 日韩三区在线 | 精品主播网红福利资源观看 | 国产亚洲精品无 | 成人av亚洲 | 国产在线中文字幕 | 成年人视频在线免费观看 | 天天干天天操天天拍 | 91麻豆精品久久久久久 | 综合网天天 | av大片网址| 不卡国产在线 | 天天天天色综合 | 免费福利视频网站 | 中文字幕在线观看你懂的 | japanesexxx乱女另类 | 日韩久久精品一区二区三区下载 | 免费看片黄色 | 亚洲在线看 | 天天色天天操天天爽 | 欧美精品国产综合久久 | 在线观看国产一区二区 | 国产高清av免费在线观看 | 天天操天天色天天 | 不卡精品视频 | 在线免费视频你懂的 | 午夜av剧场 | 五月开心六月婷婷 | 国产午夜小视频 | 中文字幕永久在线 | 亚洲午夜精品一区 | 97在线影视 | 69国产盗摄一区二区三区五区 | 中文字幕在线播放日韩 | 久久五月天婷婷 | 探花系列在线 | 亚洲精品tv | 久久精品96 | 日韩欧美一区二区三区在线 | 国产精品女人久久久久久 | 中文在线免费一区三区 | 日韩视频一区二区三区在线播放免费观看 | 欧美最爽乱淫视频播放 | 亚洲乱码久久 | 在线视频欧美精品 | 日日干av | 久草在线费播放视频 | 日韩精品一区二区免费视频 | 久久久久久免费视频 | 久草在线看片 | 亚洲精品高清视频在线观看 | 天堂资源在线观看视频 | 婷婷性综合 | 亚洲精品欧美成人 | 日韩va亚洲va欧美va久久 | 久久精品在线免费观看 | 亚洲精品在线资源 | 久久综合之合合综合久久 | 亚洲少妇影院 | 在线观看岛国av | 中文字幕久久精品亚洲乱码 | 91桃色在线播放 | 亚洲最快最全在线视频 | 国产精品欧美久久久久无广告 | 国产成人在线观看免费 | 久久国产精品成人免费浪潮 | 99精品久久久 | 欧美日韩国产高清视频 | 香蕉影视在线观看 | 国产婷婷视频在线 | 天天色天天干天天色 | 美女福利视频在线 | 国产成人精品一区二区三区网站观看 | h网站免费在线观看 | 日韩精品一区二区三区中文字幕 | 久久久久久久久黄色 | 精品国产一区二区三区四区在线观看 | 在线www色 | 中文字幕一区二区三区乱码不卡 | 国产精品麻豆一区二区三区 | 狠狠狠狠狠操 | 在线日韩视频 | 91中文字幕在线视频 | 久久婷婷视频 | 国产拍揄自揄精品视频麻豆 | v片在线播放| 精品视频9999| 搡bbbb搡bbb视频 | 色视频成人在线观看免 | 欧美在线视频精品 | 黄av免费在线观看 | 婷婷六月天丁香 | 成人天堂网 | 中文字幕在线观看不卡 | 香蕉视频亚洲 | 国产高清av免费在线观看 | 久草在线免费播放 | 欧美日韩国产精品爽爽 | 91福利社在线观看 | 久久精品视频4 | 免费 在线 中文 日本 | 天堂入口网站 | 蜜臀久久99精品久久久无需会员 | 久久久久久久久久久黄色 | www.夜夜| 在线成人国产 | 最近中文国产在线视频 | 国产 日韩 欧美 自拍 | 超碰大片| 亚洲欧美成人综合 | 亚洲视频精品在线 | 91视频在线自拍 | 久久精品国产免费看久久精品 | 四虎亚洲精品 | 久久久久亚洲精品 | 精品一区二区三区久久久 | 国产一区高清在线 | 亚洲成av人片在线观看无 | 亚洲欧美国内爽妇网 | 成人免费观看网站 | 国产亚洲精品久久久久动 | 精品在线亚洲视频 | 亚洲精品午夜一区人人爽 | 三级黄色在线观看 | 99在线热播精品免费 | 午夜免费久久看 | 日韩色一区二区三区 | 国产亚洲精品久久久久久久久久 | 草久在线 | 粉嫩av一区二区三区四区 | 九九视频在线播放 | 国产在线观看污片 | 韩国三级在线一区 | 日韩免费在线视频观看 | 天天射一射| 国产精品手机视频 | 天天干天天射天天操 | 国产精品久久久久久欧美 | a级国产乱理论片在线观看 特级毛片在线观看 | 韩日电影在线免费看 | 亚洲一区美女视频在线观看免费 | 91九色在线视频 | 色偷偷人人澡久久超碰69 | 日日麻批40分钟视频免费观看 | 五月综合激情婷婷 | 国产又粗又猛又色又黄网站 | 超碰av在线| 丁香视频 | 免费看片日韩 | 日韩高清一区在线 | 国产伦理久久精品久久久久_ | 九九在线视频 | 三级黄色在线观看 | 天天看天天干天天操 | 国产精品大片在线观看 | 国产成人精品久久亚洲高清不卡 | 日韩精品一区二区在线观看视频 | 在线中文字幕视频 | 国产精品第72页 | 久久网站av| 美女久久久久 | 成人在线免费小视频 | 亚洲首页 | 久久久这里有精品 | 国产91精品一区二区麻豆网站 | 黄色大片视频网站 | 精品久久久成人 | 日韩午夜精品 | 久久久久久久久久久久亚洲 | 精品视频久久 | 久久国产精品电影 | 欧美日韩国产在线观看 | 日本中文字幕网 | 91av电影在线观看 | 日韩精品综合在线 | 99免费在线视频 | 色在线观看网站 | 亚洲成免费 | 亚洲精品日韩在线观看 | 日本精品久久久一区二区三区 | 97人人视频 | 99久久精品免费看国产麻豆 | 免费午夜av| 人人dvd| 天天色天天搞 | 91视频观看免费 | 狠狠综合 | 亚洲精品高清在线 | 最近中文字幕视频完整版 | 四虎4hu永久免费 | 日韩理论影院 | 午夜电影久久久 | 国内久久精品视频 | 亚洲乱码久久 | 99爱这里只有精品 | 欧美激情xxxx | 一级一片免费观看 | 永久免费视频国产 | 国产视频精品视频 | 狠狠狠色丁香综合久久天下网 | www久久| 欧美一级视频免费 | 亚洲精品国产精品久久99 | 亚洲男男gaygay无套同网址 | 亚洲精品免费视频 | 国产福利中文字幕 | 美女视频黄是免费的 | 久久一区91 | 久久精品婷婷 | 国产视频 亚洲精品 | 国产在线观看中文字幕 | 探花视频网站 | 久久久国产毛片 | 中文字幕 在线看 | 99久久精品日本一区二区免费 | 精品国产乱码久久久久 | 中文字幕视频三区 | 狠狠88综合久久久久综合网 | 中文字幕在线日亚洲9 | 日本成人免费在线观看 | 少妇搡bbb| 狠狠色丁香婷婷综合久小说久 | 91视频国产免费 | 亚洲精品国产精品乱码不99热 | 国产成人99久久亚洲综合精品 | 国产精品久久久久久久久久不蜜月 | 玖玖在线精品 | 探花视频在线观看 | av免费电影在线 | 九九久久电影 | 国产资源网 | 天天操天天摸天天爽 | 三级av在线播放 | 国产精品正在播放 | 成人性生爱a∨ | 国产视频资源在线观看 | 亚洲经典精品 | 成年人在线观看视频免费 | 久久久久免费网 | 国产一区黄色 | 成人app在线免费观看 | 免费日韩高清 | 一区二区三区视频网站 | 国产九九九九九 | 日韩免费一二三区 | 亚洲成人网在线 | 区一区二区三区中文字幕 | 国产专区在线 | 亚洲成人av在线播放 | 天天爱天天操天天射 | 亚洲国产精品500在线观看 | 国产精品a久久久久 | 成人黄色电影在线播放 | av永久网址 | 欧美激情综合五月色丁香小说 | 人人搞人人爽 | 免费人人干 | 人人舔人人爱 | 免费91麻豆精品国产自产在线观看 | 国产69久久久欧美一级 | 夜夜操狠狠干 | 久久新| 2018亚洲男人天堂 | 国产日韩视频在线观看 | 国产视频精品在线 | 91精品视频免费观看 | 国产精品久久久久亚洲影视 | 98精品国产自产在线观看 | 美女黄频 | 六月丁香社区 | 欧美日韩精品在线视频 | 国产 欧美 在线 | 婷婷丁香综合 | 91久久人澡人人添人人爽欧美 | 国产999精品久久久 免费a网站 | 日日夜夜操操操操 | 国产成人精品999在线观看 | 黄色性av | 亚洲激情六月 | 国产黄色片久久久 | 午夜三级影院 | 色在线高清 | 草久视频在线观看 | 免费久久视频 | 天天操夜夜摸 | 视频一区亚洲 | 三级av在线免费观看 | 激情综合六月 | 日本精品一二区 | 久久伦理影院 | 欧美日韩另类在线观看 | 亚洲资源在线观看 | 亚洲国产一区二区精品专区 | 免费国产黄线在线观看视频 | 久久成人免费 | 99国产精品一区 | 黄色www| 国产一区二区在线观看视频 | 黄色免费看片网站 | 96久久欧美麻豆网站 | 9幺看片| 日韩av不卡在线播放 | 超级碰99 | 91福利视频久久久久 | 精品福利视频在线观看 | 婷婷丁香六月 | 91亚洲国产成人久久精品网站 | 亚洲日本精品视频 | 91精品国产入口 | 欧美久久久久久久久久久久 | 久久久免费播放 | av在线直接看 | 国产精品久久久久久久电影 | 欧美一区成人 | 五月开心六月婷婷 | 久久国产一区二区 | 亚洲国产大片 | 国产精品永久免费 | 激情图片区 | 日本韩国欧美在线观看 | 99精品国产99久久久久久97 | 久久久资源 | 欧美午夜精品久久久久久孕妇 | 五月综合 | 国产精品一区二区免费视频 | 午夜10000 | 在线视频黄| 成人中文字幕+乱码+中文字幕 | 久久综合中文字幕 | 在线国产激情视频 | 色婷婷狠狠五月综合天色拍 | 午夜精品久久久久久久99热影院 | 国产亚洲欧美精品久久久久久 | 一区二区三区在线观看免费视频 | 日韩视频一二三区 | 日韩av不卡在线观看 | 精品99久久久久久 | 韩国三级一区 | 中文字幕日韩伦理 | 欧美日韩国产精品爽爽 | 久久久久久久久久久影院 | av中文字幕免费在线观看 | 视频国产一区二区三区 | 不卡视频在线 | 久久精品视频观看 | 国产视频日韩 | 欧美另类调教 | 天天色影院| 91九色成人蝌蚪首页 | 国产一区成人 | 日韩欧美视频免费看 | 日本婷婷色 | 欧美久久久久久 | 91福利视频在线 | 最新极品jizzhd欧美 | 手机看片 | 嫩草av在线 | 久久精品欧美一区 | 99热这里只有精品久久 | 黄色a三级| 日本一区二区高清不卡 | 亚洲黄色大片 | 三级午夜片| 国产在线精品一区二区 | 最近免费观看的电影完整版 | 国产一区在线精品 | 午夜电影久久久 | 久草视频在线免费看 | 香蕉视频网址 | 制服丝袜在线91 | 97视频在线观看网址 | 伊甸园永久入口www 99热 精品在线 | 96av视频 | 在线成人免费 | 黄色av大片 | 日韩一区二区久久 | 992tv成人免费看片 | 亚洲综合成人av | 久久精品毛片 | www.xxxx欧美| 97手机电影网 | 国产精品成人av在线 | 婷婷色在线资源 | 99免费在线观看视频 | 天天射射天天 | 日本视频高清 | 国产一级免费片 | 欧美一级xxxx | 韩国一区二区三区在线观看 | 久久久久国产成人精品亚洲午夜 | 天天爽天天爽 | 久草精品在线观看 | 激情网色 | 成人丁香花 | 91中文视频 | 黄色大片av | av黄色国产| 成人丁香花 | 久久免费视频在线观看 | 俺要去色综合狠狠 | 五月黄色 | 中文在线字幕免费观 | 欧美一区二区三区四区夜夜大片 | 日韩免费av片| 在线观看免费91 | 国产精品毛片一区视频播 | 天天操天天操天天操天天操天天操天天操 | av解说在线观看 | 免费进去里的视频 | 99久久99 | 久久激五月天综合精品 | 国产免费久久精品 | 国产中文字幕久久 | www.综合网.com | 日韩av午夜在线观看 | 色丁香久久 | 中文字幕av网站 | 欧美性大战久久久久 | 播五月婷婷| 日日干综合| 在线观看视频97 | 欧美va天堂va视频va在线 | 成 人 黄 色 视频免费播放 | 国产精久久 | 免费视频一区二区 | 国产男女爽爽爽免费视频 | 91成人精品国产刺激国语对白 | 日韩成人免费在线电影 | 日韩av有码在线 | 欧美日本三级 | 亚洲综合视频网 | 一区二区三区日韩视频在线观看 | 天天曰天天曰 | 麻豆视频免费网站 | 国产最顶级的黄色片在线免费观看 | 日韩av在线免费播放 | 天天爽夜夜爽精品视频婷婷 | 久久免费视频一区 | 欧美激情视频一区二区三区 | 黄色a一级片 | 天天干天天碰 | 久久国产精品免费一区二区三区 | 天堂在线成人 | 天天干天天射天天爽 | 久久综合九色综合久久久精品综合 | 1024手机在线看 | 麻豆精品国产传媒 | 日韩精品一区二区三区外面 | 日韩电影中文字幕在线 | 91精品在线观看入口 | 色姑娘综合网 | 色婷婷国产精品一区在线观看 | 五月激情婷婷丁香 | 亚洲美女精品视频 | 五月天综合激情 | 久久免费在线观看 | 天天色天天干天天色 | 国产精品免费成人 | 亚洲成人av在线电影 | 国产成人99久久亚洲综合精品 | 亚洲天堂网视频 | 日韩视频一 | 91精品啪在线观看国产 | 在线观看黄网站 | 人九九精品 | 欧美精品在线观看免费 | 麻豆免费观看视频 | 亚洲电影黄色 | 黄色小说网站在线 | 狠狠色噜噜狠狠狠狠2021天天 | 免费av片在线 | 97在线观看免费视频 | 久久免费看毛片 | 91精品久久香蕉国产线看观看 | 91视频这里只有精品 | 欧美一级大片在线观看 | 久久国产精品成人免费浪潮 | 免费aa大片| 精品国产一区二区三区在线观看 | 四川bbb搡bbb爽爽视频 | 国产91在线观 | 粉嫩av一区二区三区四区在线观看 | 午夜精品视频免费在线观看 | 黄色最新网址 | 亚洲视频久久久久 | 99久久超碰中文字幕伊人 | 久久精品国产一区二区 | 欧美在线视频免费 | 天天色天天艹 | 欧美精品久久久久久久免费 | 97在线观 | 日韩精品不卡在线 | 黄色网免费| 91免费观看视频网站 | 国产精品视频免费看 | 欧美另类成人 | 久久久久日本精品一区二区三区 | 99精品免费久久久久久日本 | 亚洲综合小说电影qvod | 免费在线一区二区 | 人人网av | 亚洲久草在线 | 天堂视频中文在线 | 最新日韩电影 | 在线观看国产永久免费视频 | 国产做a爱一级久久 | 久久精品在线 | 毛片无卡免费无播放器 | 国产精品99久久99久久久二8 | 国产精品久久久久久久久久久免费看 | 18久久久久久 | 色婷婷国产精品一区在线观看 | 成年人免费观看国产 | 亚洲免费小视频 | 亚洲精品免费在线观看视频 | 午夜在线免费观看 | 久久精品欧美一区二区三区麻豆 | 麻豆久久一区 | 黄色av免费在线 | 91精品国产乱码在线观看 | 国产一级二级三级在线观看 | 在线观看成人av | 国产成人99久久亚洲综合精品 | 91麻豆精品一区二区三区 | 日日夜夜爱 | 国产精品毛片一区视频播 | 国产群p视频 | 久久人人97超碰国产公开结果 | 亚洲欧美婷婷六月色综合 | 又长又大又黑又粗欧美 | 一区二区三区精品久久久 | 天天人人| 成人av免费播放 | 成人毛片在线视频 | 国产人成看黄久久久久久久久 | 超碰在线人人艹 | 久久综合久色欧美综合狠狠 | 成年人在线播放视频 | 久99久中文字幕在线 | 超碰av在线免费观看 | 亚洲精品无 | 五月天久久久久久 | 亚洲国产97在线精品一区 | 成人免费观看视频大全 | 精品在线免费观看 | 国产视频手机在线 | 午夜国产在线 | 久久综合九色综合欧美狠狠 | 99精品欧美一区二区蜜桃免费 | 日韩电影在线看 | 亚洲永久字幕 | 麻豆视频91 | 亚洲成a人片在线观看网站口工 | 超碰97人人在线 | 亚洲综合色网站 | 亚洲午夜精品一区二区三区电影院 | 色天天久久 | 开心激情五月网 | 丰满少妇麻豆av | av电影中文字幕 | 欧美一区二视频在线免费观看 | 91麻豆精品国产91久久久更新时间 | 日本韩国精品一区二区在线观看 | 热久久99这里有精品 | 五月婷婷六月丁香激情 | 91福利社区在线观看 | 日日干夜夜骑 | a天堂最新版中文在线地址 久久99久久精品国产 | 国产婷婷vvvv激情久 | 99在线观看 | 天堂资源在线观看视频 | 97精品国产97久久久久久免费 | 三级黄色三级 | 日韩精品在线视频 | 99精品久久99久久久久 | 亚洲资源在线 | 麻豆av一区二区三区在线观看 | 99热播精品| 亚洲精品美女视频 | 96av视频 | 五月婷婷视频在线观看 | 国内精品国产三级国产aⅴ久 | 麻豆视频免费在线播放 | 久久亚洲综合国产精品99麻豆的功能介绍 | 青春草视频在线播放 | 美女久久99| 男女全黄一级一级高潮免费看 | 国产精品免费视频网站 | 色狠狠婷婷 | 久草在线视频免费资源观看 | 中文字幕精品一区二区三区电影 | 丁香花在线观看免费完整版视频 | 天天色天天射天天操 | 日本三级中文字幕在线观看 | 亚洲激情视频 | 69国产盗摄一区二区三区五区 | 久久亚洲免费 | 欧美成人性战久久 | 亚洲精品国偷自产在线91正片 | 999久久a精品合区久久久 | 色播五月激情综合网 | 国产婷婷久久 | 玖玖在线观看视频 | 日韩网站中文字幕 | 91最新地址永久入口 | 亚洲精品88欧美一区二区 | 日韩av图片 | 欧美视频二区 | 综合网色| 亚洲国产剧情 | 草莓视频在线观看免费观看 | 亚洲黄色在线免费观看 | 日韩在线视频免费播放 | 97超碰人人澡人人爱学生 | 九九免费精品视频在线观看 | 国产精品高清免费在线观看 | 在线观看黄色av |