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

從hello world說程序運行機制

開發 前端
學習任何一門編程語言,都會從hello world 開始。對于一門從未接觸過的語言,在短時間內我們都能用這種語言寫出它的hello world。然而,對于hello world 這個簡單程序的內部運行機制,我相信還有很多人都不是很清楚。

學習任何一門編程語言,都會從hello world 開始。對于一門從未接觸過的語言,在短時間內我們都能用這種語言寫出它的hello world。然而,對于hello world 這個簡單程序的內部運行機制,我相信還有很多人都不是很清楚。

hello world 這些信息是如何通顯示器過顯示的?

cpu執行的代碼和程序中我們寫的的代碼肯定不一樣,她是什么樣子的?又是如何從我們寫的代碼變成cpu能執行的代碼的?

程序運行時代碼是在什么地方?她們是如何組織的?

程序中的變量存儲在什么地方?

函數調用是怎樣是現的?

這篇文章將簡單的討論程序的運行機制

開發平臺隱藏的過程

每一種語言都有自己的開發平臺,我們的程序大多是也都是在這里誕生的。從程序源代碼到可執行文件的轉化過程其實是分很多步而且是很復雜的,只是而現在的開發平臺把所有的這些事情都自己承擔了,給我們帶來方便的同時她也影藏了大量的實現細節。所以大多程序員只負責編寫代碼,其它的復雜的轉換工作則由開發平臺默默完成。

按照我的理解,簡單 的說從源代碼到可執行文件的過程可分為以下幾個階段:

1、從源代碼到機器語言并將產生的機器語言按照一定的規律組織起來。我們暫且稱為文件A。

2、把文件A和運行A需要的文件B(如庫函數)鏈接起來,形成文件A+

3、把文件A+裝載進入內存,運行文件

(其實如果是看參考書或者其他資料的話可能不止這幾步,只是這里為了簡化我把它歸納為3步)

這些事形成可執行文件的關鍵步驟,缺一不可。現在看到被開發平臺“蒙蔽”了吧。下面的部分將撥開迷霧,還你開發平臺的真面目。

目標文件

在計算機領域有過一句經典的話:

“any problem in computer science can be sloved by another layer of indirecition”

“計算機科學領域的任何問題都可以通過增加一個中間層來解決”

比如說要實現從A到B的轉換,可以先把A轉換為文件A+,再把文件A+轉換為我們需要的文件B。(其實在波利亞的《how to slove it》里面對這種方法也有敘述。在解題的時候可以通過增加中間層來簡化問題)

那么從源代碼到可執行文件的過程可以這樣理解。從源代碼到可執行文件也是一樣的, 通過(不斷的)在他們之間增加中間層,來解決問題。

和上文說的, 先把源程序轉化為中間文件A,再把中間文件轉化為我們需要的目標文件。

在處理文件的時候就是按照這種思路來的。

其實上面說的文件A更專業的說法是:目標文件。她不是可執行程序,需要和其它的目標文件進行鏈接、裝載后才能執行。對于一個源程序, 開發平臺首先要做的就是把源程序翻譯成機器語言。其中很重要的一部就是編譯。相信很多人都知道,就是把源代碼翻譯成機器語言(其實就是一堆二進制代碼)。編譯知識很重要,卻不是本文的重點,有興趣的可自行google。

目標文件格式:

現在來看一下上面說的目標文件是如何組織的(也就是存放結構)。

起源:

想象一下如果是你來設計會如何組織這些二進制代碼?就像書桌上的物品要分類放置才整潔一樣,為了便于管理翻譯出來的二進制代碼也分類存放,把表示代碼的放在一起,表示數據的放在一起。這樣,二進制代碼就分為了不同的塊來存放。這樣的一個區域就是被稱為段(segment)的東西。

標準:

和計算機科學中的很多東西一樣,為了方便人們的交流、程序的兼容等問題。也為這種二進制的存放方式制訂了標準,于是COFF(common object file format)就誕生了。現在的windows、Linux、等主流操作系統下的目標文件格式和COFF大同小異,都可以認為是它的變種。

a.out:

a.out是目標文件的默認名字。也就是說,當編譯一個文件的時候,如果不對編譯后的目標文件重命名,編譯后就會產生一個名字為a.out的文件。

具體的為什么會用這個名字這里就不在深究了。有興趣的可以自己google。

下面的圖可以讓你更直觀的了解目標文件:

 

 

上圖是目標文件的典型結構,實際的情況可能會有所差別,但都是在這個基礎上衍生出來的。

ELF文件頭:即上圖中的***個段。其中的header是目標文件的頭部,里面包含了這個目標文件的一些基本信息。如該文件的版本、目標機器型號、程序入口地址等等。

文本段:里面的數據主要是程序中的代碼部分。

數據段:程序中的數據部分,比如說變量。

重定位段:

重定位段包括了文本重定位和數據重定位,里面包含了重定位信息。一般來說,代碼中都會存在引用了外部的函數,或者變量的情況。既然是引用,那么這些函數、變量并沒存在該目標文件內。在使用他們的時候, 就要給出他們的實際地址(這個過程發生在鏈接的時候)。正是這些重定位表,提供了尋找這些實際地址的信息。理解了上面之后,文本重定位和數據重定位也就不難理解了。

符號表:符號表包含了源代碼中所有的符號信息 。 包括每個變量名、函數名等等。里面記錄了每個符號的信息,比如說代碼中有“student”這個符號,對應的在符號表中就包括這個符號的信息。包括這個符號所在的段、它的屬性(讀寫權限)等相關信息。

其實符號表最初的來源可以說是在編譯的詞法分析階段。在做詞法分析的時候,就把代碼中的每個符號及其屬性都記錄在符號表中。

字符串表:和符號表差不多的功能,存放了一些字符串信息。

其中還有一點要說嗎的是:目標文件都是以二進制來存儲的,它本身就是二進制文件。

現實中的目標文件會比這個模型要復雜些,但是它的思路都是一樣的,就是按照類型來存儲,再加上一些描述目標文件信息的段和鏈接中需要的信息。

a.out剖分

Hello World

空口無憑,我們現在就來研究一下hello world編譯后形成的目標文件,這里用 C 來描述。

簡單的hellow world 源碼:

  1. /*hello.c*/  
  2. #include<stdio.h> 
  3. int main()  
  4. {  
  5.   int a=5;  
  6.   printf("hellow world \n");  
  7. }  

為了在數據段中也有數據可放,這里增加了“int a=5”。

如果在VC上的話,點擊運行便能看到結果。

為了能看清楚內部到底是如何處理的,我們使用GCC來編譯。

運行

gcc hello.c

再看我們的目錄下,就多了目標文件a.out。

 

 

現在我們想做的是看看a.out里到底有什么,可能有童鞋回想到用vim文本查看,當時我也是這么天真的認為。但a.out是何等東西,怎能這么簡單就暴露出來呢 。是的,vim不行。“我們遇到的問題大多是前人就已經遇到并且已經解決的",對,其中有一個很強悍的工具叫做objdump。有了它,我們就能徹底的去了解目標文件的各種細節,當然還有一個叫做readelf也很有用,這個在后面介紹。

這兩個工具一般Linux里面都會自帶有有,可以自行google

注:這里的代碼主要是在Linux下用GCC編譯,查看目標文件用的是Objdump、readelf。但是我會把所有的運行結果都上圖,所以之前沒有接觸過Linux的童鞋來看下面的內容也完全沒問題哦。我用的是ubuntu,感覺挺好~

下面是a.out的組織結構:(每段的起始地址、、大小等等)

查看目標文件的命令是 objdump -h a.out

 

 

就和上文中描述的目標文件的格式一樣,可以看出是分類存儲的。目標文件被分為了6段。

從左到右,***列(Idx Name)是段的名字,第二列(Size)是大小 ,VMA為虛擬地址,LMA為物理地址,File off是文件內的偏移。也就是這段相對于段中某一參考(一般是段起始)的距離。***的Algn是對段屬性的說明,暫時不用理會

“text”段:代碼段。

“data”段:也就是上面說的數據段,保存了源代碼中的數據,一般是以初始化的數據。

“bss”段:也是數據段,存放那些未初始化的數據,因為這些數據還未分配空間,所以單獨存放。

“rodata”段:只讀數據段,里面存放的數據是只讀的。

“cmment”存放的是編譯器版本信息。

剩下的兩段對我們的討論沒有實際意義,就不再介紹。認為他們包含了一些鏈接、編譯、裝在的信息就可。

注:

這里的目標文件格式只是列出實際情況中主要部分。實際情況還有一些表未列出。如果你也在用Linux,可以用objdump -X 列出更詳細的段內容。

深入a.out

上面部分通過實例說了目標文件中的典型的段,主要是段的信息,如大小 等相關的屬性。

那么這些段里面究竟有些什么東西呢,“text”段里到底存了什么東西,還是用我們的objdump。

objdump -s a.out 通過-s選項就可以查看目標文件的十六進制格式。

查看結果如下:

 

 

如上圖所示,列出了各段的十六進制表示形式。可以看出圖中共分為兩欄,左邊的一欄是十六進制的表示, 右邊則顯示相應的信息。

比較明顯的如“rodata”只讀數據段中就有 “hello world”。。汗,好像程序里的“hello”打錯了,后面多加了一個“w”,截圖麻煩,。原諒下哈。

你也可以查看“hellow world”的ASCII值,對應的十六進制就是里面的內容了。

“comment”上文中說的這個段包含了一些編譯器的版本信息,這個段后面的內容就是了:GCC編譯器,后面的是版本號。

a.out反匯編

編譯的過程總是先把源文先變為匯編形式,再翻譯為機器語言。(添加中間層嘛)看了這么多的a.out,再研究一下他的匯編形式是恨必要的

objdump -d a.out可以列出文件的匯編形式。不過這里只列出了主要部分,即main函數部分,其實在main函數執行的開始和main函數執行以后都還有多工作要做。

即初始化函數執行環境以及釋放函數占用的空間等。

 

 

上面的圖中,左邊是代碼的十六進制形式,左邊是匯編形式。對匯編熟悉的童鞋應該能看懂大部分,這里就不在多述。

a.out頭文件

在介紹目標文件格式的時候,提到過頭文件這個概念,里面包含了這個目標文件的一些基本信息。如該文件的版本、目標機器型號、程序入口地址等等。

下圖是文件頭的形式:

可以用readelf -h 來查看。(下圖中查看的是 hello.o,它是源文件hello.c編譯但未鏈接的文件。 這個和查看a.out 大部分是一樣的)

 

d

 

圖中分為兩欄,左邊一欄表示的是屬性,右邊是屬性值。***行常被稱為魔數。后面是一連串的數字,其中的具體含義就不多說了,可以自己去google。

接下來的是一些和目標文件相關的信息。由于和我們要討論的問題關系不大,這里就不展開討論了。

上面是內容用具體的實例說了目標文件內部的組織形式,目標文件只是產生可執行文件過程中的一個中間過程,對于程序是如何運行的還沒做討論,

目標文件是如何轉變為可執行文件以及可執行文件是如何執行的將在下面的部分中討論

對鏈接的簡單認識

鏈接通俗的說就是把幾個可執行文件。

如果程序A中引用了文件B中定義的函數,為了A中的函數能正常執行,就需要把B中的函數部分也放在A的源代碼中,那么將A和B合并成一個文件的過程就是鏈接了。

有專門的過程用來鏈接程序,稱為鏈接器。他將一些輸入的目標文件加工后合成一個輸出文件。這些目標文件中往往有相互的數據、函數引用。

上文中我們看過了hello world的反匯編形式,是一個還沒有經過鏈接的文件,也就是說當引用外部函數的時候是不知道其地址的:

如下圖:

 

 

上圖中,cal指令就是調用了printf()函數,因為這時候printf()函數并不在這個文件中,所以無法確定它的地址,在十六進制中就用“ff ff ff ”來表示它的地址。等經過鏈接以后,這個地址就會變為函數的實際地址,應為連接后這個函數已經被加載進入這個文件中了。

鏈接的分類:

按把A相關的數據或函數合并為一個文件的先后可以把鏈接分為靜態鏈接和動態鏈接。

靜態鏈接:

在程序執行之前就完成鏈接工作。也就是等鏈接完成后文件才能執行。但是這有一個明顯的缺點,比如說庫函數。如果文件A 和文件B 都需要用到某個庫函數,鏈接完成后他們連接后的文件中都有這個庫函數。當A和B同時執行時,內存中就存在該庫函數的兩份拷貝,這無疑浪費了存儲空間。當規模擴大的時候,這種浪費尤為明顯。靜態鏈接還有不容易升級等缺點。為了解決這些問題,現在的很多程序都用動態鏈接。

動態鏈接:和靜態鏈接不一樣,動態鏈接是在程序執行的時候才進行鏈接。也就是當程序加載執行的時候。還是上面的例子 ,如果A和B都用到了庫函數Fun(),A和B執行的時候內存中就只需要有Fun()的一個拷貝。

關于鏈接還有很多知識,以后會用專門的文章來談。這里就不展開講了。

對裝載的簡單解釋

我們知道,程序要運行是必然要把程序加載到內存中的。在過去的機器里都是把整個程序都加載進入物理內存中,現在一般都采用了虛擬存儲機制,即每個進程都有完整的地址空間,給人的感覺好像每個進程都能使用完成的內存。然后由一個內存管理器把虛擬地址映射到實際的物理內存地址。

按照上文的敘述, 程序的地址可以分為虛擬地址和實際地址。虛擬地址即她在她的虛擬內存空間中的地址,物理地址就是她被加載的實際地址。

 

 

在上文中查看段 的時候或許你已經注意到了,由于文件是未鏈接、未加載的,所以每個段的虛擬地址和物理地址都是0.

加載的過程可以這樣理解:先為程序中的各部分分配好虛擬地址,然后再建立虛擬地址到物理地址的映射。其實關鍵的部分就是虛擬地址到物理地址的映射過程。程序裝在完成之后,cpu的程序計數器pc就指向文件中的代碼起始位置,然后程序就按順序執行。

小結一下

寫這篇文章的目的在于梳理程序運行的機制,在一個可執行文件執行的背后都隱藏了什么。

從源代碼到可執行文件通常要經歷許多中間步驟,每一個中間步驟都生成一個中間文件。只是現在的集成開發環境都吧這些步驟影藏了,習慣于集成開發環境的我們也就逐漸的忽略了這些重要的技術內幕。這篇文章也只是介紹了一下這個過程的主線而已。其中的每一個細節展開來講都可足已用一篇文章來論述。

上面寫的多是我個人的理解和看法。有不足的地方、還望能不吝賜教。

原文:http://www.cnblogs.com/yanlingyin/archive/2012/03/05/2379199.html

【編輯推薦】

  1. 是什么讓程序員想死的心都有了?
  2. 宅男程序員給老婆的計算機課程之4:SQL vs NoSQL
  3. HTML ***PIs程序員指南
  4. 程序員學習一門新語言的二三事
  5. 為什么程序員都是夜貓子?
責任編輯:陳貽新 來源: 尹雁鈴的博客
相關推薦

2016-12-13 14:12:25

程序機制

2016-12-14 14:41:20

Hello World程序運行機制

2019-05-10 14:00:21

小程序運行機制前端

2010-03-15 15:18:23

Python運行

2015-11-20 11:20:54

js開發

2023-05-23 08:01:10

Netty網絡通信

2009-02-03 14:00:20

PHP運行PHP調用PHP原理

2009-12-11 10:52:37

PHP運行機制

2010-02-01 17:19:30

C++運行機制

2015-10-27 09:47:11

2019-10-11 09:00:00

JavaScriptEvent Loop前端

2023-05-26 08:01:01

FacebookVelox機制

2010-01-05 16:10:21

.NET Framew

2019-08-15 10:17:16

Webpack運行瀏覽器

2018-12-26 16:30:09

SQL Server內部運行機制數據庫

2017-06-26 08:55:52

2010-01-07 13:27:22

Linux驅動程序

2010-02-23 10:15:22

WCF運行機制

2011-06-08 17:59:43

Qt Creator

2009-10-22 17:10:04

CLR和JRE運行機制
點贊
收藏

51CTO技術棧公眾號

在线播放av网址| 99re视频在线观看| 色婷婷在线影院| 亚洲欧洲自拍| 久久青草国产手机看片福利盒子| 国产精品国语对白| 亚洲精品久久久久久国| 91欧美精品| 综合自拍亚洲综合图不卡区| 国产精品久久网站| 国产成人综合亚洲| 国产免费美女视频| 国产无遮挡裸体免费久久| 欧美丝袜美女中出在线| 亚洲砖区区免费| 精品国产无码一区二区| 亚洲欧美网站| 久久久成人av| 国产精品无码专区| 欧美亚洲福利| 亚洲一卡二卡三卡四卡| 日产精品久久久一区二区| 亚洲性生活大片| 亚洲性视频h| 精品日韩av一区二区| 久草在在线视频| 羞羞污视频在线观看| 99久久久无码国产精品| 国产va免费精品高清在线| 天天色天天综合| 老司机凹凸av亚洲导航| 欧美精品在欧美一区二区少妇| 日本一区午夜艳熟免费| 婷婷免费在线视频| 91丨porny丨国产| 成人午夜激情网| 69视频免费在线观看| 亚洲电影影音先锋| 一个人看的www久久| 日本不卡视频一区| 少妇精品视频一区二区免费看| 伊人一区二区三区| 先锋影音日韩| 免费在线国产| 成人高清视频免费观看| 国产精品中文在线| 国产精品视频一区在线观看| 国产精品xvideos88| 亚洲欧美中文字幕在线一区| 欧美熟妇精品一区二区| 一区二区三区日本视频| 色婷婷亚洲婷婷| 黄色大片中文字幕| 伊人电影在线观看| 国产精品久99| 婷婷四月色综合| 日本天堂影院在线视频| 成人动漫一区二区| 99久久99久久精品国产片| 国产农村妇女毛片精品| 国产精一品亚洲二区在线视频| 91免费视频国产| 国产精品高潮呻吟av| 久久黄色级2电影| 91在线观看免费高清| 国产色视频在线| 成人一区二区三区视频| 国产私拍一区| 欧美日韩国产综合视频| 国产无一区二区| 视频一区二区三| 欧美私人网站| 亚洲一区自拍偷拍| 黄色免费观看视频网站| 性欧美超级视频| 欧美日韩午夜在线视频| 四虎1515hh.com| 国产另类在线| 亚洲天堂网站在线观看视频| 国产主播av在线| 这里只有精品在线| 538国产精品一区二区免费视频 | 亚洲肉体裸体xxxx137| 亚洲欧美第一页| 国产又粗又长又硬| 国精品一区二区| 国产999精品视频| 91精品国产乱码久久| 国产91在线|亚洲| 精品无码久久久久国产| avtt亚洲| 亚洲成在线观看| 污污视频网站免费观看| 国产一区二区三区精品在线观看 | 国产伦精品一区三区精东| 欧美日韩xxxx| 久久99亚洲精品| 无码人妻熟妇av又粗又大| 国产麻豆成人传媒免费观看| 麻豆蜜桃91| 成码无人av片在线观看网站| 天天亚洲美女在线视频| 性生生活大片免费看视频| 国产精品香蕉| 久久中国妇女中文字幕| 国产精品21p| 国产伦精品一区二区三区视频青涩| 久久亚洲高清| 日韩精品分区| 欧美人体做爰大胆视频| 国产福利在线观看视频| 欧美成人一品| 国产精品美乳在线观看| 殴美一级特黄aaaaaa| 中文字幕制服丝袜成人av | 日韩欧美一区二区不卡| 婷婷色一区二区三区| 国模吧视频一区| 国产精品久久久久久久久粉嫩av | 国产一区二区三区在线观看视频| 欧美精品videos极品| 奇米一区二区三区av| 精品国产乱码一区二区三区四区 | 日韩av高清不卡| 欧美一级一区二区三区| 一区二区在线免费观看| 中文字幕22页| 国产尤物久久久| 欧美高跟鞋交xxxxxhd| 国产乱码77777777| 91免费观看在线| 精品少妇人妻av免费久久洗澡| 99视频有精品高清视频| 日韩亚洲精品视频| 中文字幕人妻一区二区在线视频| 久久久久久久久99精品| 亚洲午夜无码av毛片久久| 欧美精品中文字幕亚洲专区| 欧美激情在线狂野欧美精品| 国产乱码久久久| 中文字幕一区二区三区四区| 日韩不卡一二三| 日韩理论片av| 国产免费久久av| 免费看美女视频在线网站| 欧美三级视频在线观看| 三年中国中文观看免费播放| 久久成人在线| 免费看国产精品一二区视频| 亚洲校园激情春色| 亚洲欧美日韩精品久久亚洲区| 欧美啪啪小视频| ww亚洲ww在线观看国产| 美女福利视频在线| 国产不卡av一区二区| 日本欧美一二三区| 91网页在线观看| 欧美日产国产精品| 欧美爱爱小视频| 成人性色生活片免费看爆迷你毛片| 女人床在线观看| 老牛影视av一区二区在线观看| 韩剧1988免费观看全集| 三级av在线播放| 色妞www精品视频| 我不卡一区二区| 另类小说一区二区三区| avove在线观看| 99亚洲乱人伦aⅴ精品| 韩国福利视频一区| 欧美日韩国产中文字幕在线| 色系网站成人免费| 精品伦精品一区二区三区视频密桃| 久久精品国产精品亚洲综合| 51xx午夜影福利| 欧美综合精品| 国产精品美女无圣光视频| 在线视频观看国产| 日韩电影大全免费观看2023年上| 久久久成人免费视频| 国产精品久久久久久亚洲伦 | 国产成人a v| 日韩一区日韩二区| 亚洲精品国产成人av在线| 久久精品动漫| 成人免费看片视频在线观看| 久久久精品国产**网站| 国产精品久久久久aaaa九色| 在线中文字幕-区二区三区四区| 亚洲国产日韩欧美综合久久| 日本熟妇一区二区三区| 亚洲欧美日韩在线不卡| 免费无码一区二区三区| 麻豆精品久久久| 黄色大片中文字幕| 国产精品久久久久久久久妇女| 国产成人成网站在线播放青青 | 91成人在线免费观看| 中文字幕手机在线观看| 久久这里只有精品6| 91网址在线观看精品| 午夜在线观看免费一区| 免费日韩在线观看| 日韩成人免费| 久久国产精品免费一区| 蜜桃精品一区二区三区| 国产精品久久久久久亚洲调教| 成人免费一区二区三区牛牛| 中文字幕日韩欧美| 日韩私人影院| 日韩欧美国产小视频| 伊人亚洲综合网| 色综合久久88色综合天天6| 欧美国产日韩综合| 国产精品伦一区二区三级视频| 91精品国产自产| 丁香天五香天堂综合| 蜜桃福利午夜精品一区| 日韩电影免费在线观看网站| 欧美乱大交xxxxx潮喷l头像| 亚洲高清影视| 中文字幕一区二区三区乱码| 久久99国内| 精品亚洲欧美日韩| 9l亚洲国产成人精品一区二三| 国产在线拍偷自揄拍精品| 三级成人黄色影院| 91精品国产色综合久久不卡98| 91国内在线| 欧美成人免费在线视频| 日韩黄色影院| 中文字幕亚洲国产| 国产专区在线播放| 日韩av在线直播| 污污网站在线免费观看| 亚洲激情视频网站| 日韩一级片免费看| 亚洲国产精品电影| 日本wwwxxxx| 亚洲精品国产综合区久久久久久久| www.日本在线观看| 日韩你懂的在线播放| a天堂中文在线观看| 这里只有精品电影| 国产乱淫a∨片免费观看| 666欧美在线视频| 国产一区二区在线播放视频| 欧美巨大另类极品videosbest | 久草热8精品视频在线观看| 亚洲激情在线观看视频| 蜜臀国产一区二区三区在线播放| 国产自偷自偷免费一区 | 天天色综合成人网| 国产精品久久久免费视频| 天天色天天操综合| 亚洲第一网站在线观看| 一本久久综合亚洲鲁鲁五月天| 69视频免费在线观看| 欧美亚日韩国产aⅴ精品中极品| 日本黄色中文字幕| 精品婷婷伊人一区三区三| 91女人18毛片水多国产| 日韩欧美一级特黄在线播放| 熟妇高潮一区二区高潮| 亚洲欧洲日产国产网站| av在线日韩国产精品| 久久亚洲精品一区二区| 888av在线视频| 日本久久中文字幕| 日韩毛片免费看| 91网免费观看| 一本久久青青| 亚洲综合激情五月| 国产精品sm| av片中文字幕| 极品美女销魂一区二区三区免费| 日韩精品国产一区| 久久女同精品一区二区| 国产三级aaa| 亚洲777理论| 懂色av蜜臀av粉嫩av喷吹| 欧美一区二区三区啪啪| 午夜福利一区二区三区| 色偷偷综合社区| www在线看| 国产精品久久久久久av福利软件 | 福利所第一导航| 日韩欧美在线视频观看| 国产欧美日韩成人| 日韩精品中文字幕久久臀| aⅴ在线视频男人的天堂 | 国产一二三四在线| 色婷婷av一区二区三区大白胸| 99国产精品一区二区三区| 日韩精品在线观看一区| 二区三区四区高清视频在线观看| 456国产精品| 日韩欧洲国产| 日韩精品在在线一区二区中文| 欧美黄在线观看| 天天爱天天操天天干| 成人国产一区二区三区精品| av黄色免费在线观看| 欧美日韩亚洲网| av老司机久久| 中文字幕精品在线| 91制片在线观看| 91亚洲精品在线| 国产最新精品| 69堂免费视频| 国产98色在线|日韩| 99久久精品久久亚洲精品| 欧美视频中文字幕在线| 女人18毛片一区二区三区| 久久精品91久久久久久再现| 外国成人直播| 国语精品中文字幕| 伊人久久大香线| 中文字幕永久有效| 中文在线一区二区| av手机天堂网| 亚洲人成电影网站色| 综合另类专区| 精品久久久久久中文字幕动漫 | 中文字幕欧美一| 销魂美女一区二区| 精品视频在线导航| 2021天堂中文幕一二区在线观| 99久久伊人精品影院| 婷婷亚洲五月| 成人综合久久网| 中文字幕国产一区| 欧美性受xxx黑人xyx性爽| 亚洲欧美国产精品专区久久 | 在线一区免费| 中文字幕第一页在线视频| 中文字幕中文字幕在线一区| 夜夜爽8888| 色偷偷av亚洲男人的天堂| 久久亚洲人体| 中文字幕一区二区三区在线乱码 | 欧美日韩午夜剧场| 天天射天天色天天干| 97精品国产97久久久久久免费| 白嫩白嫩国产精品| 分分操这里只有精品| 成人福利视频网站| 在线观看国产亚洲| 亚洲精品网站在线播放gif| 高清av不卡| 亚洲免费精品视频| 国产一区二区在线影院| 清纯粉嫩极品夜夜嗨av| 精品国产成人在线影院| 看黄在线观看| 女人一区二区三区| 免费看黄色91| 久久福利免费视频| 精品国产制服丝袜高跟| 爱啪啪综合导航| 欧美不卡福利| 免费av成人在线| 欧美成欧美va| 亚洲精品久久久一区二区三区| 国产精品一区二区av影院萌芽| 日韩欧美亚洲在线| 国精品**一区二区三区在线蜜桃| 午夜免费激情视频| 亚洲精品v欧美精品v日韩精品| 国模套图日韩精品一区二区| 亚洲精品在线免费| 国产精品白丝jk黑袜喷水| 国产无精乱码一区二区三区| 亚洲免费一在线| 国产精品麻豆| 2022亚洲天堂| 国产精品久久看| 欧美77777| 国产精品劲爆视频| 欧美日本免费| 欧美做受xxxxxⅹ性视频| 欧美疯狂性受xxxxx喷水图片| 成年人视频免费在线播放| 欧美在线视频一区二区三区| 国产在线视频一区二区| 欧美精品二区三区| 日韩中文字幕精品| 久久久免费毛片| 天天干天天玩天天操| 亚洲成年人影院| 亚洲免费视频一区二区三区| 国产精品日韩二区| 麻豆精品国产91久久久久久| 亚洲 欧美 视频| 久久精品中文字幕免费mv| 亚洲黄页在线观看| 四虎国产精品免费| 欧美日韩中字一区| 美女搞黄视频在线观看| 成人午夜免费剧场|