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

Life is Good.

Enhance Tech and English
隨筆 - 65, 文章 - 20, 評論 - 21, 引用 - 0
數據加載中……

cdecl, stdcall, pascal,fastcall的區別和調用約定

調用約定           壓參數入棧順序     把參數彈出棧者         函數修飾名 
(Calling convention) 
--------------------------------------------------------------------------------------------------------
  __cdecl                 右->左             調用者                                 _function    
  __fastcall             右->左              被調用者                           @function@nnn     
  __stdcall             右->左               被調用者                           _function@nnn
  __pascal             左->右               被調用者                           _function@nnn
   
-----------------------------------------------------------------------------------------------------------

              
    
    
  _cdecl    
   
  按至左的順序壓參數入棧調用者把參數彈出棧。對于“C”函數或者變量,修飾名是在函數名前加下劃線。對于“C++”函數,有所不同。    
   
  如函數void   test(void)的修飾名是_test;對于不屬于一個類的“C++”全局函數,修飾名是?test@@ZAXXZ。    
   
  這是缺省調用約定。由于是調用者負責把參數彈出棧,所以可以給函數定義個數不定的參數,如printf函數。    
   
   
  _stdcall    
   
  按從至左的順序壓參數入棧被調用者把參數彈出棧。對于“C”函數或者變量,修飾名以下劃線為前綴,然后是函數名,然后是符號“@”及參數的字節數,如函數int   func(int   a,   double   b)的修飾名是_func@12。對于“C++”函數,則有所不同。    
   
  所有的Win32   API函數都遵循該約定。    

  _pascal  

   按從至右的順序壓參數入棧 ...其它的與_stdcall相同; 
    
    
  _fastcall    
   
  頭兩個DWORD類型或者占更少字節的參數被放入ECXEDX寄存器其他剩下的參數按從右到左的順序壓入棧。 由被調用者把參數彈出棧,對于“C”函數或者變量,修飾名以“@”為前綴,然后是函數名,接著是符號“@”及參數的字節數,如函數int   func(int   a,   double   b)的修飾名是@func@12。對于“C++”函數,有所不同。    
   
  未來的編譯器可能使用不同的寄存器來存放參數。    
   
   
  thiscall    
   
  僅僅應用于“C++”成員函數this指針存放于CX寄存器,參數從右到左壓棧。thiscall不是關鍵詞,因此不能被程序員指定。    
   
   
  naked   call    
   
  采用1-4的調用約定時,如果必要的話,進入函數時編譯器會產生代碼來保存ESI,EDI,EBX,EBP寄存器,退出函數時則產生代碼恢復這些寄存器的內容。naked   call不產生這樣的代碼。    
   
  naked   call不是類型修飾符,故必須和_declspec共同使用,如下:    
   
  __declspec(   naked   )   int   func(   formal_parameters   )    
   
  {    
   
  //   Function   body    
   
  }     
    
        
   

 便于更好理解, 看下面例子(函數調用的過程以匯編代碼表示):      
    
  void   cdecl       fun1(int   x,int   y);  
  void   stdcall     fun2(int   x,int   y);  
  void   pascal     fun3(int   x,int   y);   
    

    
  ****************************************  
   
  void   cdecl       fun1(int   x,int   y);  
   
  fun1(x,y);    
   
  調用   fun1   的匯編代碼  
   
  push   y  
  push   x  
  call   fun1  
  add     sp,sizeof(x)+sizeof(y)   ;跳過參數區(x,y)  
   
  fun1   的匯編代碼:  
   
  fun1   proc    
      push   bp  
      mov     bp,sp  
      ……  
      …  
      pop     bp  
      ret ;返回,但不跳過參數區  
  fun1   endp  
   
  ****************************************  
   
  void   stdcall   fun2(int   x,int   y);  
   
  fun2(x,y);    
   
  調用   fun2   的匯編代碼  
   
  push   y  
  push   x  
  call   fun2  
   
  fun2   的匯編代碼:  
   
  fun2   proc    
      push   bp  
      mov     bp,sp  
      ……  
      …  
      pop     bp  
      ret   sizeof(x)+sizeof(y)   ;返回并跳過參數區(x,y)      
  fun2   endp  
   
  *****************************************  
   
  void   pascal     fun3(int   x,int   y);  
   
  fun3(x,y);    
   
  調用   fun3   的匯編代碼  
   
  push   x  
  push   y  
  call   fun3  
   
  fun3   的匯編代碼:  
   
  fun3   proc    
      push   bp  
      mov     bp,sp  
      ……  
      …  
      pop     bp  
      ret   sizeof(x)+sizeof(y)   ;返回并跳過參數區(x,y)      
  fun3   endp 

posted on 2010-10-28 16:01 Mike Song 閱讀(187) 評論(0)  編輯 收藏 引用

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产亚洲一级高清| 欧美自拍偷拍午夜视频| 亚洲视频一区二区| 欧美一区二区播放| 久久久精品2019中文字幕神马| 国产精品精品视频| 欧美成人免费大片| 国产精品久久久久久亚洲毛片| 先锋影音久久久| 久久久精品日韩| 国产欧美69| 欧美性生交xxxxx久久久| 欧美1区视频| 亚洲视频一区二区在线观看 | 亚洲国产成人一区| 久久精品99国产精品酒店日本| 亚洲欧美日韩国产综合精品二区| 噜噜噜躁狠狠躁狠狠精品视频 | 香蕉亚洲视频| 欧美成人免费va影院高清| 亚洲影视综合| 欧美精品激情blacked18| 亚洲天堂网站在线观看视频| 欧美一区二区视频在线观看2020 | 国产精品午夜在线观看| 亚洲欧美视频在线| 久久野战av| 久久爱另类一区二区小说| 欧美色大人视频| 久久精品国产综合| 久久亚洲国产成人| 久久综合九九| 狠狠色香婷婷久久亚洲精品| 亚洲免费播放| 国产精品欧美经典| 亚洲精选在线观看| 欧美精品粉嫩高潮一区二区| 久久精品国产免费| 99riav国产精品| 欧美一区二区三区免费看| 亚洲精品在线视频观看| 亚洲视频网在线直播| 亚洲欧美日本另类| 亚洲一区二区三区中文字幕| 欧美视频网址| 亚洲激情网站免费观看| 欧美激情一区二区在线| 欧美成人精品不卡视频在线观看| 欧美午夜免费影院| 久久人体大胆视频| 国产精品av一区二区| 欧美电影打屁股sp| 国产亚洲欧美另类一区二区三区| 亚洲一区二区三区乱码aⅴ| 红桃视频欧美| 久久精品国产第一区二区三区最新章节| 亚洲美女毛片| 久久免费高清视频| 久久人人97超碰国产公开结果| 欧美午夜精品理论片a级按摩| 最新日韩在线| 欧美国产日韩视频| 久久久精品网| 国产日产欧美精品| 免费日韩成人| 欧美午夜电影一区| 日韩午夜视频在线观看| 亚洲少妇一区| 国产精品入口| 欧美在线黄色| 一区二区三区视频观看| 久久九九有精品国产23| 欧美成人视屏| 亚洲日本欧美天堂| 亚洲欧美www| 欧美精品自拍| 99国产精品久久久| 免费国产一区二区| 欧美一级片久久久久久久| 欧美成人官网二区| 日韩一二三区视频| 亚洲国产一区二区三区青草影视| 欧美成人a视频| 免费不卡欧美自拍视频| 国产精品国产自产拍高清av| 亚洲国产一区二区三区在线播| 欧美精品一区二区精品网| 久久精品一级爱片| 国产精品爽爽ⅴa在线观看| 亚洲欧洲一区二区三区久久| 亚洲综合三区| 亚洲精品国产视频| 国产精品亚洲一区| 欧美资源在线| 欧美一区二区三区在线观看视频| 亚洲伊人网站| 亚洲欧美日本日韩| 欧美精品一区在线发布| 欧美一区视频| 羞羞色国产精品| 亚洲黄页视频免费观看| 久久福利电影| 99re热这里只有精品免费视频| 亚洲电影在线看| 日韩小视频在线观看| 六月婷婷久久| 韩国一区二区三区在线观看| 欧美系列亚洲系列| 99re6这里只有精品视频在线观看| 老司机67194精品线观看| 国产综合色在线视频区| 欧美日韩午夜剧场| 国产精品99久久久久久久久 | 在线看不卡av| 欧美视频在线看| 亚洲人成人一区二区三区| 老司机精品导航| 亚洲娇小video精品| 亚洲激情视频在线| 亚洲一区二区影院| 国产精品无码永久免费888| 欧美美女喷水视频| 妖精视频成人观看www| 亚洲激情视频在线播放| 亚洲在线视频免费观看| 亚洲日本va午夜在线电影 | 欧美福利电影网| 欧美诱惑福利视频| 免费成人在线观看视频| 欧美国产日韩xxxxx| 麻豆国产精品va在线观看不卡| 欧美激情视频给我| 欧美va亚洲va国产综合| 99精品免费| 亚洲欧洲一区二区在线播放| 欧美日韩中文字幕在线| 欧美在线网址| 一本大道久久a久久精二百| 欧美日韩在线高清| 欧美日韩国产影院| 亚洲欧美日韩爽爽影院| 亚洲一二三区精品| 免费观看久久久4p| 麻豆精品传媒视频| 亚洲五月婷婷| 亚洲视频一起| 一区在线影院| 久久婷婷国产麻豆91天堂| 久久亚洲综合色| 一区二区三区av| 亚洲一区二区三区在线播放| 免费影视亚洲| 91久久久精品| 免费在线国产精品| 欧美激情久久久久| 久久久久亚洲综合| 欧美日韩在线一区二区| 亚洲欧美另类国产| 亚洲午夜小视频| 亚洲欧洲一区二区在线播放 | 亚洲一区二区少妇| 女同性一区二区三区人了人一 | 美日韩丰满少妇在线观看| 韩日成人在线| 亚洲国产精品嫩草影院| 国产酒店精品激情| 伊人久久成人| 国产精品视频成人| 精品av久久久久电影| 国产精品国产| 国产一区二区三区无遮挡| 欧美性猛交一区二区三区精品| 国产精品拍天天在线| 欧美人与性动交α欧美精品济南到| 亚洲深夜福利视频| 亚洲一区影音先锋| 久久久噜噜噜久久人人看| 亚洲成人在线视频播放| 久久精品夜色噜噜亚洲a∨ | 午夜免费电影一区在线观看| 亚洲电影免费观看高清完整版在线观看| 亚洲人成网站在线观看播放| 蜜桃av久久久亚洲精品| 亚洲国产日韩在线一区模特| 免费精品99久久国产综合精品| 亚洲国产欧美在线| 欧美激情第9页| 亚洲视频视频在线| 中文av字幕一区| 久久一区二区三区四区| 久久午夜视频| 中文亚洲视频在线| 亚洲一区精品电影| 欧美激情精品久久久| 欧美一区二区精品在线| 性亚洲最疯狂xxxx高清| 欧美精品国产一区| 欧美激情精品久久久久久免费印度| 国产人成一区二区三区影院| 国产精品色在线|