精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

詳解CLR中Jit編譯發(fā)生的過程

開發(fā) 后端
這里將介紹CLR中Jit編譯發(fā)生的過程,通過筆者深入的探討,希望能對大家了解Jit的發(fā)生過程是怎么樣的有所了解。
理解在CLR中Jit編譯發(fā)生的過程,了解這個首先要從CLR談起。CLR(公共語言運行時,Common Language Runtime)和Java虛擬機一樣也是一個運行時環(huán)境,它負(fù)責(zé)資源管理(內(nèi)存分配和垃圾收集),并保證應(yīng)用和底層操作系統(tǒng)之間必要的分離。

CLR是如何找到托管代碼的入口方法并對其Jit的呢?Jit編譯的發(fā)生過程是怎么樣的呢?Jit編譯器和Metadata表又有什么關(guān)系呢?本文試圖尋找出答案,在此之前,不妨先了解一下CLR Header的大致結(jié)構(gòu)。

以如下代碼為例:

  1. Example  
  2. using System;  
  3.  
  4. namespace CLRTesing  
  5. {  
  6. class Program  
  7. {  
  8. static void Main(string[] args)  
  9. {  
  10. System.Console.WriteLine("Hello World!");  
  11. Console.ReadKey();  
  12.  
  13. new P().Display();  
  14.  
  15.  
  16. }  
  17.  
  18. Program()  
  19. {  
  20. Console.WriteLine("Constructor.");  
  21. Console.ReadKey();  
  22. }  
  23.  
  24. static Program()  
  25. {  
  26. Console.WriteLine("Static constructor.");  
  27. Console.ReadKey();  
  28. }  
  29. }  
  30.  
  31. class P  
  32. {  
  33. public void Display()  
  34. {  
  35. System.Console.WriteLine("P!");  
  36. Console.ReadKey();  
  37.  
  38. new Q().Display();  
  39. Console.ReadKey();  
  40. }  
  41. }  
  42.  
  43. class Q  
  44. {  
  45. public void Display()  
  46. {  
  47. System.Console.WriteLine("Q!");  
  48. Console.ReadKey();  
  49. }  
  50. }  

編譯后通過dumpbin工具的到其CLR Header,如圖所示:

dumpbin工具

從圖中可以看到,CLR Header由以下幾個部分組成:

1、CB:表示CLR Header的大小,單位是byte;

2、Run time version:運行時版本,包含兩部分MajorRuntimeVersion和MinorRuntimeVersion;

3、Metadata Directory:指出Metadata table的RVA和其大小;

4、Flag:這個標(biāo)識主要是供加載器使用,flag值為0x00000001表示當(dāng)前runtime image僅由IL代碼組成并且對CPU沒有特殊要求;值為0x00000002表示image只能被加載到32位機中,值為0x00010000表示運行時和jit編譯器需要追蹤方法的調(diào)試信息;

5、EntryPointToken:Metadata 表中標(biāo)記為EntryPoint的方法的MethodDef;

6、Resources Directory:CLR的資源,也就是托管資源的RVA和大小,注意與PE文件中存儲Win32資源的section不同;

7、StrongNameSignature Directory:PE文件中供CLR加載器使用的哈希值所處RVA和大小;

8、CodeManagerTable Directory:Code Manager 表的RVA和其大小;

9、VTableFixups Directory:由非托管C++類型中虛方法的指針組成的數(shù)組;

10、ExportAddressTableJumps Directory:跳轉(zhuǎn)地址表的RVA和大小;

11、ManagedNativeHeader Directory:一般情況下為0。

以上結(jié)構(gòu)可以從CorHdr.h文件中看出,如果裝的是Visual Studio 2005,這個文件在\Microsoft Visual Studio 8\SDK\v2.0\include\。

查看托管PE文件的工具有很多,不用很復(fù)雜的,就園子里的大牛Anders Liu寫的CliPeViwer就很好用,用Reflector可以偷窺其代碼哦。

那么在上面這個結(jié)構(gòu)中我最關(guān)心的是Metadata directory和EntryPointToken,Metadata directory存提供了原數(shù)據(jù)所在內(nèi)存地址的范圍,EntryPointToken告訴我們在原數(shù)據(jù)表中哪個token標(biāo)識的方法是入口方法,這里一定是方法,所以這個token是以6開頭的一個數(shù)。

回到主題,我們從CLR已經(jīng)被載入內(nèi)存、mscorwks.dll中的_CorExeMain2方法接管主線程開始說起:

1、_CorExeMain2方法會調(diào)用System Domain中的SystemDomain::ExecuteMainMethod方法,然后由此方法再去調(diào)用其它方法(具體什么方法參見深入了解CLR的加載過程一文中的第8步), 通過MetaData表提供的接口查找包含.entrypoint的類型,接著返回入口方法(在C#中這個入口方法一定是Main方法)的一個MethodDesc類型的實例;獲取MethodDesc類型實例的這個過程我認(rèn)為是:CLR通過讀取MetaData表,定位入口方法所屬的類型,將包含該類型的Module載入,然后建立這個類型的EECLASS(EECLASS結(jié)構(gòu)中包含重要信息有:指向當(dāng)前類型父類的指針、指向方法表的指針、實例字段和靜態(tài)字段等)和這個類型所包含方法的Method Table(方法表由一個個Method Descripter組成,具體到內(nèi)存中就是指向若干MethodDesc類型實例的地址),通過EEClass::FindMethod方法找到并返回入口方法的MethodDesc類型實例。

MethodDesc這個類型很有意思,它有兩個重要的部分,一個部分叫做m_CodeOrIL,用來存儲編譯好的MSIL在內(nèi)存中的地址,初值為ffffffffffffffff,另一個部分叫做Stub,如果當(dāng)前代碼沒有被編譯為本地CPU指令,那么通過這個Stub會觸發(fā)對Jit編譯器的調(diào)用。

執(zhí)行上述代碼,

[[5737]]

用Windbg 查看,如下:

  1. Windbg1  
  2. 0:000> !name2ee *!CLRTesing.Program  
  3. Module: 790c2000 (mscorlib.dll)  
  4. --------------------------------------  
  5. Module: 00a72c3c (Hello.exe)  
  6. Token: 0x02000002  
  7. MethodTable: 00a73048  
  8. EEClass: 00a7129c  
  9. Name: CLRTesing.Program  
  10.  
  11. 0:000> !name2ee *!CLRTesing.P  
  12. Module: 790c2000 (mscorlib.dll)  
  13. --------------------------------------  
  14. Module: 00a72c3c (Hello.exe)  
  15. Token: 0x02000003  
  16. MethodTable:   
  17. EEClass:   
  18. Name: CLRTesing.P  
  19.  
  20. 0:000> !dumpmt -md 00a73048  
  21. EEClass: 00a7129c  
  22. Module: 00a72c3c  
  23. Name: CLRTesing.Program  
  24. mdToken: 02000002(D:\test\Hello\bin\Debug\Hello.exe)  
  25. BaseSize: 0xc  
  26. ComponentSize: 0x0  
  27. Number of IFaces in IFaceMap: 0  
  28. Slots in VTable: 7  
  29. --------------------------------------  
  30. MethodDesc Table  
  31.  Entry MethodDescJIT Name  
  32. 79371278 7914b928 PreJIT System.Object.ToString()  
  33. 7936b3b0 7914b930 PreJIT System.Object.Equals(System.Object)  
  34. 7936b3d0 7914b948 PreJIT System.Object.GetHashCode()  
  35. 793624d0 7914b950 PreJIT System.Object.Finalize()  
  36. 00a7c011 00a73030 NONE CLRTesing.Program.Main(System.String[])  
  37. 00a7c015 00a73038 NONE CLRTesing.Program..ctor()  
  38. 00da0070 00a73040JIT CLRTesing.Program..cctor() 

CLRTesing.Program類型的靜態(tài)構(gòu)造函數(shù)執(zhí)行時,入口方法Main和CLRTesing.Program的實例構(gòu)造函數(shù)還沒有被Jit,Main方法中引用到的CLRTesing.P類型也沒有被加載,所以它的Method Table和EEClass結(jié)構(gòu)也沒有建立起來。

#p#

2、在Windbg中detach debuggee,隨便敲一個字符讓程序繼續(xù)運行;接著,入口方法Main開始執(zhí)行,

入口方法Main開始執(zhí)行

因為Main方法第一次執(zhí)行,所以通過Stub,Jit編譯器會被喚起,由于Main方法引用了CLRTesing.P類型,那么在執(zhí)行前會將CLRTesing.P類型載入,并建立Method Table和其EEClass結(jié)構(gòu),當(dāng)然這個建立過程也要去查找MetaData表,我認(rèn)為這個過程是這樣的:

Main方法被調(diào)用,由于它沒有被Jit過,CLR會通過Main方法的MethodDesc結(jié)構(gòu)的Stub對Jit編譯器進行調(diào)用,CLR通過MetaData表的接口找到Main方法對應(yīng)的Token,如下:

Jit編譯

我們可以看到Main方法的RVA是0x00002050,于是去PE文件的.Text section中的Raw Data中查找image base+RVA這個位置處的IL代碼,接著Jit編譯器會對這段IL代碼進行驗證,驗證過程通過調(diào)用CheckIL方法來實現(xiàn),這個方法的簽名可以是這樣的:

  1. CHECK CheckIL(RVA il);  
  2. CHECK CheckIL(RVA il, COUNT_T size); 

驗證結(jié)束后把這段IL代碼編譯成本地CPU指令,將編譯后后的CPU指令存到內(nèi)存并修改Main方法的MethodDesc結(jié)構(gòu)中m_CodeOrIL和Stub的值,讓它們指向這個新的內(nèi)存地址,當(dāng)這個方法被再次調(diào)用的時候就會直接通過這個地址訪問到本地CPU指令而不會觸發(fā)第二次編譯。對于這個過程大家的看法呢?用Windbg查看各對象情況:

  1. Windbg2  
  2. 0:000> !name2ee *!CLRTesing.Program  
  3. Module: 790c2000 (mscorlib.dll)  
  4. --------------------------------------  
  5. Module: 00a72c3c (Hello.exe)  
  6. Token: 0x02000002  
  7. MethodTable: 00a73048  
  8. EEClass: 00a7129c  
  9. Name: CLRTesing.Program  
  10.  
  11. 0:000> !name2ee *!CLRTesing.P  
  12. Module: 790c2000 (mscorlib.dll)  
  13. --------------------------------------  
  14. Module: 00a72c3c (Hello.exe)  
  15. Token: 0x02000003  
  16. MethodTable: 00a730b8  
  17. EEClass: 00a71730  
  18. Name: CLRTesing.P  
  19.  
  20. 0:000> !name2ee *!CLRTesing.Q  
  21. Module: 790c2000 (mscorlib.dll)  
  22. --------------------------------------  
  23. Module: 00a72c3c (Hello.exe)  
  24. Token: 0x02000004  
  25. MethodTable:   
  26. EEClass:   
  27. Name: CLRTesing.Q  
  28.  
  29. 0:000> !dumpmt -md 00a73048  
  30. EEClass: 00a7129c  
  31. Module: 00a72c3c  
  32. Name: CLRTesing.Program  
  33. mdToken: 02000002(D:\test\Hello\bin\Debug\Hello.exe)  
  34. BaseSize: 0xc  
  35. ComponentSize: 0x0  
  36. Number of IFaces in IFaceMap: 0  
  37. Slots in VTable: 7  
  38. --------------------------------------  
  39. MethodDesc Table  
  40.  Entry MethodDescJIT Name  
  41. 79371278 7914b928 PreJIT System.Object.ToString()  
  42. 7936b3b0 7914b930 PreJIT System.Object.Equals(System.Object)  
  43. 7936b3d0 7914b948 PreJIT System.Object.GetHashCode()  
  44. 793624d0 7914b950 PreJIT System.Object.Finalize()  
  45. 00da00b0 00a73030JIT CLRTesing.Program.Main(System.String[])  
  46. 00a7c015 00a73038 NONE CLRTesing.Program..ctor()  
  47. 00da0070 00a73040JIT CLRTesing.Program..cctor()  
  48.  
  49. 0:000> !dumpmt -md 00a730b8  
  50. EEClass: 00a71730  
  51. Module: 00a72c3c  
  52. Name: CLRTesing.P  
  53. mdToken: 02000003(D:\test\Hello\bin\Debug\Hello.exe)  
  54. BaseSize: 0xc  
  55. ComponentSize: 0x0  
  56. Number of IFaces in IFaceMap: 0  
  57. Slots in VTable: 6  
  58. --------------------------------------  
  59. MethodDesc Table  
  60.  Entry MethodDescJIT Name  
  61. 79371278 7914b928 PreJIT System.Object.ToString()  
  62. 7936b3b0 7914b930 PreJIT System.Object.Equals(System.Object)  
  63. 7936b3d0 7914b948 PreJIT System.Object.GetHashCode()  
  64. 793624d0 7914b950 PreJIT System.Object.Finalize()  
  65. 00a7c04c 00a730a8 NONE CLRTesing.P.Display()  
  66. 00a7c058 00a730b0 NONE CLRTesing.P..ctor() 

我們可以發(fā)現(xiàn)Main方法已經(jīng)被Jit,且它引用的CLRTesing.P類型的相關(guān)結(jié)構(gòu)也已經(jīng)建立起來了,而CLRTesing.P類型的Display方法所引用的CLRTesing.Q類型沒有被載入。

總結(jié)一下,Jit編譯針對的對象總是方法,不論是入口方法還是其他方法的Jit過程都類似上述過程,Metadata這這里的作用不言而喻,可以說沒有Metadata的支持就無法進行Jit,我覺得Meatadata在Jit編譯期間的作用至少有三個:

1、Jit編譯器通過查找Metadata來找到入口方法;

2、Jit編譯器通過查找Metadata來定位待編譯方法并利用其RVA找到存儲于PE文件中的IL代碼在內(nèi)存中的實際地址;

3、Jit編譯器在找到IL代碼并準(zhǔn)備編譯為本地CPU指令前所進行的IL代碼驗證同樣會用到Metadata,例如,驗證方法的合法性需要去核實方法參數(shù)數(shù)量是正確的、傳給方法的每個參數(shù)是否都有正確的類型、方法返回值是否正確等等。

文中是一些我通過Shared Source Common Language Infrastructure(SSCLI)看到的和感覺到的東西,希望能給大家理解Jit提供一點幫助,如果有錯誤的地方也請大家指出,大家一起學(xué)習(xí)。

最后要說明的是,SSCLI里東西僅作為理解CLR使用,與MS真正實現(xiàn)CLR的過程可能不一樣。最后,大家在看SSCLI的時候可以使用Source Insight,個人感覺還挺好用。

 SSCLI的下載地址是:http://www.microsoft.com/downloads/details.aspx?FamilyId=8C09FD61-3F26-4555-AE17-3121B4F51D4D&displaylang=en。

本文來自Leo Zhang博客園文章《深入了解Jit編譯發(fā)生的過程

【編輯推薦】

  1. C#treeview遞歸操作數(shù)據(jù)庫淺析
  2. C#遞歸樹實現(xiàn)實例簡析
  3. C#打開記事本實現(xiàn)實例解析
  4. C#調(diào)用記事本實例淺析
  5. C#日期格式化方法簡析
責(zé)任編輯:彭凡 來源: 博客園
相關(guān)推薦

2009-10-23 09:36:25

.Net Compac

2009-08-24 11:36:27

CLR加載過程

2023-10-31 11:46:32

編譯器托管CLR

2022-05-18 07:58:21

Linux程序編譯代碼

2020-11-09 14:41:58

iOS 14.2蘋果JIT

2009-09-18 10:40:05

CLR存儲過程

2024-11-27 16:25:54

JVMJIT編譯機制

2009-10-22 13:02:47

SQL CLR存儲過程

2009-10-22 18:06:31

CLR存儲過程

2009-09-18 14:09:57

SQL CLR存儲過程

2009-10-22 14:05:55

CLR存儲過程

2009-09-17 19:19:17

CLR存儲過程

2011-08-17 17:29:32

Windows編譯MySQL

2009-09-18 10:55:17

CLR存儲過程

2009-10-19 14:25:16

靜態(tài)構(gòu)造函數(shù)

2009-03-11 10:29:23

代碼契約.NETCLR

2011-05-03 10:31:59

噴墨打印機注墨誤區(qū)

2009-10-22 15:09:40

CLR存儲過程

2009-05-15 09:33:52

開發(fā)線程沖突lock

2022-04-10 10:57:06

eBPFJIT即時編譯
點贊
收藏

51CTO技術(shù)棧公眾號

亚洲精品一区中文字幕乱码| 亚洲激情在线播放| 国产美女久久久| 日韩精品一区二区亚洲av性色| 久久久久久爱| 午夜精品福利一区二区三区av| 免费观看成人在线| 国产精品久久久午夜夜伦鲁鲁| 国内视频精品| 一区二区亚洲精品国产| 国产sm在线观看| 日韩免费小视频| 亚洲国产精品一区二区久久 | 青青艹在线观看| 一区二区蜜桃| 在线观看精品自拍私拍| 无码人妻精品一区二区三| 性高爱久久久久久久久| 一区二区国产视频| 亚洲精品中文综合第一页| 免费观看国产视频| 久久爱另类一区二区小说| 久久久久久伊人| 黑人操日本美女| 日韩最新在线| 亚洲成成品网站| 天天看片天天操| 欧美大片免费| 午夜精品福利一区二区三区av| 中文字幕精品一区日韩| 欧美孕妇孕交| 盗摄精品av一区二区三区| 国产精品情侣自拍| 国产成人啪精品午夜在线观看| 欧美电影三区| 在线观看欧美www| 午夜男人的天堂| 天堂va在线高清一区| 欧美视频你懂的| 亚洲熟妇无码另类久久久| 3d玉蒲团在线观看| 亚洲欧美日韩在线不卡| 亚洲一区二区高清视频| 福利视频在线看| 国产午夜精品美女毛片视频| 免费看成人午夜电影| 偷拍精品一区二区三区| 成人av电影在线| 国产99在线免费| 一区二区三区黄色片| 麻豆91精品91久久久的内涵| 国产精品69精品一区二区三区| 久久亚洲精品国产| 欧美日韩综合| 欧美精品videos| 豆国产97在线 | 亚洲| 国模一区二区三区| 久久久久久九九九| 久久黄色免费网站| 伊人久久亚洲影院| 国内精品视频久久| 波多野结衣国产| 香蕉国产精品偷在线观看不卡| 97超级碰碰人国产在线观看| 日本va欧美va国产激情| 久久成人亚洲| 国产成人精品在线观看| 综合久久中文字幕| 国产乱一区二区| 国产v亚洲v天堂无码| 欧美视频xxx| 久久先锋影音av| 亚洲人成网站在线播放2019| 麻豆传媒视频在线观看| 一区二区三区免费在线观看| 国产96在线 | 亚洲| 自拍偷拍亚洲视频| 欧美日韩一区二区在线视频| 一级黄色高清视频| 黑人久久a级毛片免费观看| 亚洲国产成人精品女人久久久 | 成人毛片在线免费观看| av中文字幕亚洲| 日本在线观看一区二区三区| 在线激情小视频| 亚洲国产精品久久久久秋霞影院 | 日韩精品视频在线观看免费| 99久久人妻无码精品系列| 99久久综合狠狠综合久久aⅴ| 不卡中文字幕av| 久草手机在线观看| 久草这里只有精品视频| 国产精品9999久久久久仙踪林| 亚洲 美腿 欧美 偷拍| 欧美激情一区二区在线| 国产一区二区三区在线免费| 欧美极品videos大乳护士| 欧美日韩一区二区欧美激情| 91精品人妻一区二区三区蜜桃2| 加勒比色综合久久久久久久久| 国产亚洲精品久久久久久777| 麻豆视频在线免费看| 国产精品三上| 亚洲精品日韩激情在线电影| 青青草超碰在线| 一区二区视频免费在线观看| 久久综合伊人77777麻豆最新章节| 麻豆国产精品| 一区二区三欧美| 国产精品第一页在线观看| 蜜臀精品一区二区三区在线观看 | 国产高清在线观看视频| 久久久高清一区二区三区| 日本中文字幕一级片| 欧美日韩精品一区二区三区视频| 精品三级av在线| 四虎地址8848| 天堂av在线一区| 国产区欧美区日韩区| 在线观看免费黄视频| 精品高清美女精品国产区| 91人妻一区二区三区| 欧美色婷婷久久99精品红桃| 97精品在线观看| 国产特黄一级片| 久久精品亚洲国产奇米99| 国产亚洲黄色片| 深夜福利一区二区三区| 久久精品99久久久久久久久| 久久国产香蕉视频| 久久久精品人体av艺术| 久久综合色视频| 国产伦精品一区二区三区免费优势| 日韩资源在线观看| 日本欧美www| 国产亚洲一区二区三区| 波多野结衣50连登视频| 美女av一区| 久久久久久中文字幕| 亚洲AV无码乱码国产精品牛牛| 中文字幕制服丝袜成人av | 电影一区电影二区| 亚洲欧美制服中文字幕| 青青青国产在线| 91理论电影在线观看| 日本精品一区在线观看| 嫩草国产精品入口| 91精品国产高清久久久久久| 日韩在线视频免费| 欧美日韩国产一中文字不卡| 日韩精品一区二区三区高清免费| 黄色av成人| 狠狠久久综合婷婷不卡| 国产中文在线播放| 日韩成人av一区| 国产精品va无码一区二区三区| 91尤物视频在线观看| 欧美日韩在线一| 国产一区二区区别| 国产精品久久久久久久久久久久久久 | 久久美女艺术照精彩视频福利播放 | 国产视频一区三区| 免费在线观看一区二区| 日韩高清成人| 超碰91人人草人人干| 国产91免费看| 福利视频第一区| 亚洲综合欧美综合| 精品一区二区三区的国产在线播放 | 香蕉综合视频| 亚洲aⅴ男人的天堂在线观看| 在线欧美三级| 亚洲精品日韩久久久| 国产无遮挡又黄又爽又色视频| 国产精品久久久久久久久免费相片 | 久久久精品国产99久久精品芒果| 男女男精品视频站| 你懂的国产精品永久在线| 国产综合动作在线观看| 成人va天堂| 久色乳综合思思在线视频| 国产91绿帽单男绿奴| 色妞www精品视频| 999精品视频在线观看播放| 成人综合婷婷国产精品久久| 成人三级视频在线播放| 97国产精品| 精品九九九九| 宅男噜噜噜66国产精品免费| 韩国一区二区电影| 青青影院在线观看| 亚洲激情视频网| 91国偷自产中文字幕久久| 亚洲第一福利视频在线| 美国一级黄色录像| av一二三不卡影片| 九九九九九伊人| 国产欧美激情| 久久免费一级片| 精品欧美久久| 久久爱av电影| 九九99久久精品在免费线bt| 茄子视频成人在线| 日本一本在线免费福利| 国产一区二区三区在线观看视频 | 国产情侣一区在线| 欧美一级片免费在线| 91福利国产在线观看菠萝蜜| 亚洲最新视频在线| 婷婷五月综合久久中文字幕| 51精品秘密在线观看| 无码人妻av一区二区三区波多野| 一区二区三区成人| 69夜色精品国产69乱| 久久精品人人做人人爽人人| 激情小说欧美色图| 激情综合网天天干| 中文久久久久久| 久久xxxx精品视频| 免费在线观看亚洲视频| 国产专区一区| 手机在线视频你懂的| 欧美综合在线视频观看| 欧美精品一区在线| 精品欠久久久中文字幕加勒比| 亚洲一区二区在线| 91麻豆精品| 国产拍精品一二三| a成人v在线| 国产精品第二页| 三上悠亚亚洲一区| 欧美孕妇毛茸茸xxxx| 高潮在线视频| 97香蕉超级碰碰久久免费软件| 日本高清成人vr专区| 成人97在线观看视频| 老司机在线看片网av| 最新日韩中文字幕| a天堂中文在线88| 一个人看的www久久| 超碰在线国产| 中文字幕精品久久| 日本中文在线观看| 超碰97人人做人人爱少妇| a毛片在线观看| 免费不卡欧美自拍视频| 日本理论片午伦夜理片在线观看| 欧美裸体男粗大视频在线观看 | 78色国产精品| 超碰国产一区| 国产精品69av| 祥仔av免费一区二区三区四区| 91精品国产综合久久香蕉最新版| 免费一区二区三区四区| 成人福利在线观看| 精品国产亚洲日本| 粉嫩av免费一区二区三区| 久久综合五月婷婷| 品久久久久久久久久96高清| 成人午夜av| 欧美日韩中文字幕在线播放| 狠狠入ady亚洲精品经典电影| 午夜精品久久久久久久无码| 男人的天堂亚洲| 色悠悠久久综合网| 国产精品一区二区免费不卡| 超碰caoprom| 久久精品视频免费观看| 美国精品一区二区| 一区二区国产视频| 东京热一区二区三区四区| 欧美在线观看视频一区二区 | 中文网丁香综合网| 欧美99在线视频观看| www.av中文字幕| 日本少妇一区二区| 少妇愉情理伦片bd| 99久精品国产| 中文字幕第69页| 亚洲一区二区综合| 看黄色一级大片| 欧美一级高清片| 日本福利片高清在线观看| 色天天综合狠狠色| 成人观看网址| 成人久久久久久| 欧美激情15p| 一区二区免费在线视频| 亚洲免费大片| 亚洲精品mv在线观看| 99re热视频精品| 手机在线中文字幕| 精品久久久久久中文字幕| 亚洲一区二区人妻| 亚洲精品久久久久中文字幕欢迎你 | 黄色av网址在线| 中文字幕亚洲欧美一区二区三区| 污污视频在线看| 国产精品久久婷婷六月丁香| 成人性生交大片免费看中文视频 | 在线播放麻豆| 97精品视频在线播放| 国产美女视频一区二区| 日本黑人久久| 国产欧美短视频| 亚洲一区二区三区三州| 中文字幕av不卡| 久久黄色精品视频| 欧美精品一区二区三区四区| 无遮挡动作视频在线观看免费入口| 91国产中文字幕| 视频成人永久免费视频| 成人手机视频在线| 日韩av一区二| 中文字幕5566| 亚洲一区二区三区三| 91丨九色丨丰满| 在线播放国产精品| 综合毛片免费视频| 国产精品一区二区三区观看| 性欧美欧美巨大69| 一本岛在线视频| 久久久精品天堂| 中文字幕在线看人| 亚洲黄色在线看| 9999热视频在线观看| 亚洲一区二区三区在线视频 | 国产乱码一区二区| 在线观看不卡av| 日韩a**中文字幕| 日本成人三级| 日精品一区二区| 好吊视频在线观看| 91久久一区二区| 国产乱视频在线观看| 国产精品福利网站| 精品国产一区探花在线观看| 国产视频在线视频| 国产情人综合久久777777| 久久永久免费视频| 亚洲天堂网站在线观看视频| 日韩电影av| 日韩欧美精品一区二区三区经典| 可以免费看不卡的av网站| 巨胸大乳www视频免费观看| 欧美日韩一区二区精品| 日韩a在线看| 日韩av电影手机在线| 自拍自偷一区二区三区| 精品一卡二卡三卡| 欧美激情在线一区二区三区| 青青艹在线观看| 日韩亚洲欧美成人| 精品国模一区二区三区欧美| 国产精品久久久影院| 国产精品一区二区免费不卡| 国产亚洲欧美久久久久| 亚洲精品福利视频| 欧美日韩视频网站| 亚洲成人18| 国产精品影视天天线| 亚洲精品午夜久久久久久久| 日韩电影中文字幕在线观看| 日韩电影av| 国产精品无码乱伦| 成人白浆超碰人人人人| 国产高潮久久久| 国产一区二区三区在线观看视频 | 中文字幕a级片| 精品国产依人香蕉在线精品| 伊人久久影院| 成人免费观看视频在线观看| 国产精品九色蝌蚪自拍| 国产黄频在线观看| 55夜色66夜色国产精品视频| 日韩av在线播放网址| 极品白嫩少妇无套内谢| 懂色av中文一区二区三区天美| 成年网站在线| 国产精品18毛片一区二区| 日韩av中文字幕一区二区 | 成年在线电影| 国产精品成人一区二区三区| 手机精品视频在线观看| 久久久久久视频| 日韩福利视频在线观看| www.成人| 免费无码av片在线观看| 亚洲欧美综合另类在线卡通| 手机看片福利在线| 91精品国产综合久久久久久蜜臀 | 成人亚洲视频在线观看| 亚洲色图视频网| 青草久久伊人| 99久久精品无码一区二区毛片| 久久国产日韩| 免费一级全黄少妇性色生活片| 国产一区二区激情| 噜噜噜狠狠夜夜躁精品仙踪林| 亚洲第一天堂久久|