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

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>
            亚洲一区观看| 亚洲精品在线免费观看视频| 免费欧美在线视频| 一区二区三区日韩欧美| 欧美成人精品在线| 韩日视频一区| 欧美综合二区| 午夜伦欧美伦电影理论片| 国产精品久久久久影院亚瑟| 国产精品99久久99久久久二8| 欧美成人午夜激情在线| 久久久五月婷婷| 亚洲日韩欧美视频| 久久久www成人免费精品| 亚洲自拍偷拍麻豆| 国产精品自在欧美一区| 亚洲综合国产激情另类一区| 9i看片成人免费高清| 欧美日韩亚洲国产精品| 亚洲一区二区精品在线观看| 夜夜爽www精品| 国产精品裸体一区二区三区| 亚洲中午字幕| 亚洲欧美日韩人成在线播放| 国产婷婷精品| 欧美jizzhd精品欧美巨大免费| 久久久亚洲成人| 亚洲人成绝费网站色www| 亚洲日本视频| 嫩草国产精品入口| 中日韩美女免费视频网站在线观看| 日韩天天综合| 国产精品三区www17con| 久久久久久久综合色一本| 久久一区国产| 一区二区三区高清视频在线观看| 一区二区三区高清在线| 国产日韩欧美制服另类| 欧美69视频| 欧美午夜视频网站| 久久精品日韩| 欧美1区免费| 亚洲综合色丁香婷婷六月图片| 午夜欧美不卡精品aaaaa| 亚洲国产精品久久久久秋霞蜜臀| 最新亚洲激情| 国产一区二区| 欧美成人精品h版在线观看| 欧美日本中文字幕| 久久久久久久波多野高潮日日| 女人天堂亚洲aⅴ在线观看| 亚洲一区成人| 裸体一区二区| 欧美在线播放| 欧美人体xx| 久久久久久久尹人综合网亚洲| 欧美xart系列在线观看| 欧美中文字幕在线观看| 欧美日本中文字幕| 欧美高清在线一区| 国产亚洲综合精品| 亚洲免费高清| 91久久中文字幕| 欧美专区日韩专区| 亚洲欧美日韩中文视频| 欧美/亚洲一区| 久久久亚洲高清| 欧美色精品天天在线观看视频| 欧美α欧美αv大片| 国产欧美日韩视频在线观看| 亚洲美女免费精品视频在线观看| 亚洲第一狼人社区| 亚洲一区二区成人| 亚洲最新色图| 欧美激情在线播放| 欧美福利一区二区三区| 狠狠色综合网| 欧美精品电影| 免费毛片一区二区三区久久久| 国产精品永久免费视频| 亚洲精品偷拍| 亚洲国产高清自拍| 久久九九99视频| 久久久久久久久久久成人| 国产精品老牛| 亚洲深夜福利网站| 亚洲一区二区三区午夜| 欧美日韩一区二区三区在线视频| 亚洲高清在线播放| 亚洲人精品午夜| 欧美国产日韩精品免费观看| 欧美激情在线| 日韩视频在线一区| 欧美日本成人| 在线视频亚洲| 午夜在线精品偷拍| 国产精品一级在线| 欧美亚洲免费| 久久九九国产精品| 精品动漫3d一区二区三区| 久久精品亚洲一区| 欧美制服第一页| 韩国久久久久| 欧美v亚洲v综合ⅴ国产v| 亚洲国产精品专区久久| 亚洲天天影视| 国产欧美一区二区三区视频| 亚洲综合另类| 久久婷婷一区| 亚洲人在线视频| 欧美日产在线观看| 亚洲综合视频在线| 另类av导航| 亚洲精品乱码久久久久久| 欧美日韩一区二区三区在线视频| 亚洲欧美日韩国产综合在线| 欧美在线观看视频| 红桃视频国产一区| 欧美成人日韩| 亚洲午夜久久久久久尤物| 欧美在线视频播放| 在线不卡免费欧美| 欧美激情综合色| 亚洲欧美精品在线观看| 蜜桃视频一区| 一区二区三区精品在线| 国产精品免费aⅴ片在线观看| 午夜精品一区二区三区在线视| 久久一二三国产| 日韩视频一区二区三区在线播放免费观看 | 日韩午夜黄色| 国产精品视频一二| 欧美成人69av| 亚洲欧美日韩一区在线| 欧美国产第二页| 欧美一区二区三区四区夜夜大片| 亚洲二区三区四区| 国产精品久久91| 久久久久久久欧美精品| 一区二区三区你懂的| 女人色偷偷aa久久天堂| 亚洲欧美日韩精品| 亚洲日本无吗高清不卡| 亚洲电影有码| 国产精品青草久久久久福利99| 久久久久久久久蜜桃| 亚洲图片你懂的| 欧美激情欧美激情在线五月| 亚洲欧美色一区| 亚洲精品一区二区三区四区高清 | 在线观看日产精品| 欧美午夜片在线观看| 欧美成人精品一区| 久久激情五月婷婷| 亚洲专区一二三| 99re在线精品| 欧美激情欧美狂野欧美精品 | 亚洲欧美网站| 日韩视频免费大全中文字幕| 久久综合色88| 久久久久国产精品午夜一区| 亚洲一区日本| 亚洲视频中文字幕| 99精品视频免费| 亚洲精品小视频在线观看| 亚洲国产高清aⅴ视频| 黄色小说综合网站| 国产午夜精品一区理论片飘花| 欧美性色aⅴ视频一区日韩精品| 欧美激情va永久在线播放| 老司机成人网| 老司机精品视频网站| 久久久久久欧美| 久久久91精品国产一区二区精品| 午夜在线播放视频欧美| 亚洲天堂成人| 亚洲男人第一av网站| 亚洲摸下面视频| 欧美一区二区精美| 欧美在线视频二区| 久久久女女女女999久久| 久久精品99国产精品| 久久精品123| 美女精品在线| 欧美精品一区二区三区蜜臀| 欧美精品在线观看一区二区| 欧美日韩精品一区二区在线播放| 欧美日韩成人在线| 欧美日韩亚洲综合| 欧美日韩在线看| 国产精品色午夜在线观看| 国产欧美在线看| 尤物99国产成人精品视频| 91久久在线播放| 在线亚洲欧美视频| 欧美中文在线观看| 久久综合伊人| 亚洲精品国产欧美| 亚洲视频在线观看免费| 欧美亚洲免费电影|