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

Linux程序編譯過程的來龍去脈

系統(tǒng) Linux
本文將介紹如何將高層的C/C++語言編寫的程序轉換成為處理器能夠執(zhí)行的二進制代碼的過程。

 [[376957]]

大家肯定都知道計算機程序設計語言通常分為機器語言、匯編語言和高級語言三類。高級語言需要通過翻譯成機器語言才能執(zhí)行,而翻譯的方式分為兩種,一種是編譯型,另一種是解釋型,因此我們基本上將高級語言分為兩大類,一種是編譯型語言,例如C,C++,Java,另一種是解釋型語言,例如Python、Ruby、MATLAB 、JavaScript。

本文將介紹如何將高層的C/C++語言編寫的程序轉換成為處理器能夠執(zhí)行的二進制代碼的過程,包括四個步驟:

  •  預處理(Preprocessing)
  •  編譯(Compilation)
  •  匯編(Assembly)
  •  鏈接(Linking)

GCC 工具鏈介紹

通常所說的GCC是GUN Compiler Collection的簡稱,是Linux系統(tǒng)上常用的編譯工具。GCC工具鏈軟件包括GCC、Binutils、C運行庫等。

GCC

GCC(GNU C Compiler)是編譯工具。本文所要介紹的將C/C++語言編寫的程序轉換成為處理器能夠執(zhí)行的二進制代碼的過程即由編譯器完成。

Binutils

一組二進制程序處理工具,包括:addr2line、ar、objcopy、objdump、as、ld、ldd、readelf、size等。這一組工具是開發(fā)和調試不可缺少的工具,分別簡介如下:

  • addr2line:用來將程序地址轉換成其所對應的程序源文件及所對應的代碼行,也可以得到所對應的函數。該工具將幫助調試器在調試的過程中定位對應的源代碼位置。
  •  as:主要用于匯編,有關匯編的詳細介紹請參見后文。
  •  ld:主要用于鏈接,有關鏈接的詳細介紹請參見后文。
  •  ar:主要用于創(chuàng)建靜態(tài)庫。為了便于初學者理解,在此介紹動態(tài)庫與靜態(tài)庫的概念:
    •  如果要將多個.o目標文件生成一個庫文件,則存在兩種類型的庫,一種是靜態(tài)庫,另一種是動態(tài)庫。
    •  在windows中靜態(tài)庫是以 .lib 為后綴的文件,共享庫是以 .dll 為后綴的文件。在linux中靜態(tài)庫是以.a為后綴的文件,共享庫是以.so為后綴的文件。
    •  靜態(tài)庫和動態(tài)庫的不同點在于代碼被載入的時刻不同。靜態(tài)庫的代碼在編譯過程中已經被載入可執(zhí)行程序,因此體積較大。共享庫的代碼是在可執(zhí)行程序運行時才載入內存的,在編譯過程中僅簡單的引用,因此代碼體積較小。在Linux系統(tǒng)中,可以用ldd命令查看一個可執(zhí)行程序依賴的共享庫。
    •  如果一個系統(tǒng)中存在多個需要同時運行的程序且這些程序之間存在共享庫,那么采用動態(tài)庫的形式將更節(jié)省內存。
  •  ldd:可以用于查看一個可執(zhí)行程序依賴的共享庫。
  •  objcopy:將一種對象文件翻譯成另一種格式,譬如將.bin轉換成.elf、或者將.elf轉換成.bin等。
  •  objdump:主要的作用是反匯編。有關反匯編的詳細介紹,請參見后文。
  •  readelf:顯示有關ELF文件的信息,請參見后文了解更多信息。
  •  size:列出可執(zhí)行文件每個部分的尺寸和總尺寸,代碼段、數據段、總大小等,請參見后文了解使用size的具體使用實例。

C運行庫

C語言標準主要由兩部分組成:一部分描述C的語法,另一部分描述C標準庫。C標準庫定義了一組標準頭文件,每個頭文件中包含一些相關的函數、變量、類型聲明和宏定義,譬如常見的printf函數便是一個C標準庫函數,其原型定義在stdio頭文件中。

C語言標準僅僅定義了C標準庫函數原型,并沒有提供實現(xiàn)。因此,C語言編譯器通常需要一個C運行時庫(C Run Time Libray,CRT)的支持。C運行時庫又常簡稱為C運行庫。與C語言類似,C++也定義了自己的標準,同時提供相關支持庫,稱為C++運行時庫。

準備工作

由于GCC工具鏈主要是在Linux環(huán)境中進行使用,因此本文也將以Linux系統(tǒng)作為工作環(huán)境。為了能夠演示編譯的整個過程,本節(jié)先準備一個C語言編寫的簡單Hello程序作為示例,其源代碼如下所示: 

  1. #include <stdio.h>   
  2. //此程序很簡單,僅僅打印一個Hello World的字符串。  
  3. int main(void)  
  4.    printf("Hello World! \n");  
  5.   return 0;  

編譯過程

1.預處理

預處理的過程主要包括以下過程:

  • 將所有的#define刪除,并且展開所有的宏定義,并且處理所有的條件預編譯指令,比如#if #ifdef #elif #else #endif等。
  •  處理#include預編譯指令,將被包含的文件插入到該預編譯指令的位置。
  •  刪除所有注釋“//”和“/* */”。
  •  添加行號和文件標識,以便編譯時產生調試用的行號及編譯錯誤警告行號。
  •  保留所有的#pragma編譯器指令,后續(xù)編譯過程需要使用它們。
  •  使用gcc進行預處理的命令如下: 
  1. $ gcc -E hello.c -o hello.i // 將源文件hello.c文件預處理生成hello.i  
  2.                         // GCC的選項-E使GCC在進行完預處理后即停止 

hello.i文件可以作為普通文本文件打開進行查看,其代碼片段如下所示: 

  1. // hello.i代碼片段  
  2. extern void funlockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));  
  3. # 942 "/usr/include/stdio.h" 3 4  
  4. # 2 "hello.c" 2  
  5. # 3 "hello.c"  
  6. int  
  7. main(void)  
  8.  
  9.   printf("Hello World!" "\n");  
  10.   return 0;  

2.編譯

編譯過程就是對預處理完的文件進行一系列的詞法分析,語法分析,語義分析及優(yōu)化后生成相應的匯編代碼。

使用gcc進行編譯的命令如下: 

  1. $ gcc -S hello.i -o hello.s // 將預處理生成的hello.i文件編譯生成匯編程序hello.s  
  2.                         // GCC的選項-S使GCC在執(zhí)行完編譯后停止,生成匯編程序 

上述命令生成的匯編程序hello.s的代碼片段如下所示,其全部為匯編代碼。 

  1. // hello.s代碼片段  
  2. main:  
  3. .LFB0:  
  4.     .cfi_startproc  
  5.     pushq   %rbp  
  6.     .cfi_def_cfa_offset 16  
  7.     .cfi_offset 6, -16  
  8.     movq    %rsp, %rbp  
  9.     .cfi_def_cfa_register 6  
  10.     movl    $.LC0, %edi  
  11.     call    puts  
  12.     movl    $0, %eax  
  13.     popq    %rbp  
  14.     .cfi_def_cfa 7, 8  
  15.     ret  
  16.     .cfi_endproc 

3.匯編

匯編過程調用對匯編代碼進行處理,生成處理器能識別的指令,保存在后綴為.o的目標文件中。由于每一個匯編語句幾乎都對應一條處理器指令,因此,匯編相對于編譯過程比較簡單,通過調用Binutils中的匯編器as根據匯編指令和處理器指令的對照表一一翻譯即可。

當程序由多個源代碼文件構成時,每個文件都要先完成匯編工作,生成.o目標文件后,才能進入下一步的鏈接工作。注意:目標文件已經是最終程序的某一部分了,但是在鏈接之前還不能執(zhí)行。

使用gcc進行匯編的命令如下: 

  1. $ gcc -c hello.s -o hello.o // 將編譯生成的hello.s文件匯編生成目標文件hello.o  
  2.                         // GCC的選項-c使GCC在執(zhí)行完匯編后停止,生成目標文件  
  3. //或者直接調用as進行匯編  
  4. $ as -c hello.s -o hello.o //使用Binutils中的as將hello.s文件匯編生成目標文件 

注意:hello.o目標文件為ELF(Executable and Linkable Format)格式的可重定向文件。

4.鏈接

鏈接也分為靜態(tài)鏈接和動態(tài)鏈接,其要點如下:

  •  靜態(tài)鏈接是指在編譯階段直接把靜態(tài)庫加入到可執(zhí)行文件中去,這樣可執(zhí)行文件會比較大。鏈接器將函數的代碼從其所在地(不同的目標文件或靜態(tài)鏈接庫中)拷貝到最終的可執(zhí)行程序中。為創(chuàng)建可執(zhí)行文件,鏈接器必須要完成的主要任務是:符號解析(把目標文件中符號的定義和引用聯(lián)系起來)和重定位(把符號定義和內存地址對應起來然后修改所有對符號的引用)。
  •  動態(tài)鏈接則是指鏈接階段僅僅只加入一些描述信息,而程序執(zhí)行時再從系統(tǒng)中把相應動態(tài)庫加載到內存中去。
    •  在Linux系統(tǒng)中,gcc編譯鏈接時的動態(tài)庫搜索路徑的順序通常為:首先從gcc命令的參數-L指定的路徑尋找;再從環(huán)境變量LIBRARY_PATH指定的路徑尋址;再從默認路徑/lib、/usr/lib、/usr/local/lib尋找。
    •   在Linux系統(tǒng)中,執(zhí)行二進制文件時的動態(tài)庫搜索路徑的順序通常為:首先搜索編譯目標代碼時指定的動態(tài)庫搜索路徑;再從環(huán)境變量LD_LIBRARY_PATH指定的路徑尋址;再從配置文件/etc/ld.so.conf中指定的動態(tài)庫搜索路徑;再從默認路徑/lib、/usr/lib尋找。
    •   在Linux系統(tǒng)中,可以用ldd命令查看一個可執(zhí)行程序依賴的共享庫。

由于鏈接動態(tài)庫和靜態(tài)庫的路徑可能有重合,所以如果在路徑中有同名的靜態(tài)庫文件和動態(tài)庫文件,比如libtest.a和libtest.so,gcc鏈接時默認優(yōu)先選擇動態(tài)庫,會鏈接libtest.so,如果要讓gcc選擇鏈接libtest.a則可以指定gcc選項-static,該選項會強制使用靜態(tài)庫進行鏈接。以Hello World為例:

  •  如果使用命令“gcc hello.c -o hello”則會使用動態(tài)庫進行鏈接,生成的ELF可執(zhí)行文件的大小(使用Binutils的size命令查看)和鏈接的動態(tài)庫(使用Binutils的ldd命令查看)如下所示:   
  1. $ gcc hello.c -o hello  
  2.     $ size hello  //使用size查看大小  
  3.        text    data     bss     dec     hex filename  
  4.        1183     552       8    1743     6cf     hello  
  5.     $ ldd hello //可以看出該可執(zhí)行文件鏈接了很多其他動態(tài)庫,主要是Linux的glibc動態(tài)庫  
  6.             linux-vdso.so.1 =>  (0x00007fffefd7c000)  
  7.             libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fadcdd82000)  
  8.             /lib64/ld-linux-x86-64.so.2 (0x00007fadce14c000) 
  •  如果使用命令“gcc -static hello.c -o hello”則會使用靜態(tài)庫進行鏈接,生成的ELF可執(zhí)行文件的大小(使用Binutils的size命令查看)和鏈接的動態(tài)庫(使用Binutils的ldd命令查看)如下所示: 
  1. $ gcc -static hello.c -o hello  
  2.   $ size hello //使用size查看大小  
  3.        text    data     bss     dec     hex filename  
  4.    823726    7284    6360  837370   cc6fa     hello //可以看出text的代碼尺寸變得極大  
  5.   $ ldd hello  
  6.          not a dynamic executable //說明沒有鏈接動態(tài)庫 

鏈接器鏈接后生成的最終文件為ELF格式可執(zhí)行文件,一個ELF可執(zhí)行文件通常被鏈接為不同的段,常見的段譬如.text、.data、.rodata、.bss等段。

分析ELF文件

1.ELF文件的段

ELF文件格式如下圖所示,位于ELF Header和Section Header Table之間的都是段(Section)。一個典型的ELF文件包含下面幾個段:

  •  .text:已編譯程序的指令代碼段。
  •  .rodata:ro代表read only,即只讀數據(譬如常數const)。
  •  .data:已初始化的C程序全局變量和靜態(tài)局部變量。
  •  .bss:未初始化的C程序全局變量和靜態(tài)局部變量。
  •  .debug:調試符號表,調試器用此段的信息幫助調試。

可以使用readelf -S查看其各個section的信息如下: 

  1. $ readelf -S hello  
  2. There are 31 section headers, starting at offset 0x19d8:  
  3. Section Headers:  
  4.   [Nr] Name              Type             Address           Offset  
  5.        Size              EntSize          Flags  Link  Info  Align  
  6.   [ 0]                   NULL             0000000000000000  00000000  
  7.        0000000000000000  0000000000000000           0     0     0  
  8. ……  
  9.   [11] .init             PROGBITS         00000000004003c8  000003c8  
  10.        000000000000001a  0000000000000000  AX       0     0     4  
  11. ……  
  12.   [14] .text             PROGBITS         0000000000400430  00000430  
  13.        0000000000000182  0000000000000000  AX       0     0     16  
  14.   [15] .fini             PROGBITS         00000000004005b4  000005b4  
  15. …… 

2.反匯編ELF

由于ELF文件無法被當做普通文本文件打開,如果希望直接查看一個ELF文件包含的指令和數據,需要使用反匯編的方法。

使用objdump -D對其進行反匯編如下: 

  1. $ objdump -D hello  
  2. ……  
  3. 0000000000400526 <main>:  // main標簽的PC地址  
  4. //PC地址:指令編碼                  指令的匯編格式  
  5.   400526:    55                          push   %rbp   
  6.   400527:    48 89 e5                mov    %rsp,%rbp  
  7.   40052a:    bf c4 05 40 00          mov    $0x4005c4,%edi  
  8.   40052f:    e8 cc fe ff ff          callq  400400 <puts@plt>  
  9.   400534:    b8 00 00 00 00          mov    $0x0,%eax  
  10.   400539:    5d                      pop    %rbp  
  11.   40053a:    c3                          retq    
  12.   40053b:    0f 1f 44 00 00          nopl   0x0(%rax,%rax,1)  
  13. …… 

使用objdump -S將其反匯編并且將其C語言源代碼混合顯示出來: 

  1. $ gcc -o hello -g hello.c //要加上-g選項  
  2. $ objdump -S hello  
  3. ……  
  4. 0000000000400526 <main> 
  5. #include <stdio.h>  
  6. int  
  7. main(void)  
  8.  
  9.   400526:    55                          push   %rbp  
  10.   400527:    48 89 e5                mov    %rsp,%rbp  
  11.   printf("Hello World!" "\n");  
  12.   40052a:    bf c4 05 40 00          mov    $0x4005c4,%edi  
  13.   40052f:    e8 cc fe ff ff          callq  400400 <puts@plt>  
  14.   return 0;  
  15.   400534:    b8 00 00 00 00          mov    $0x0,%eax  
  16.  
  17.   400539:    5d                          pop    %rbp  
  18.   40053a:    c3                          retq     
  19.   40053b:    0f 1f 44 00 00          nopl   0x0(%rax,%rax,1)  
  20. ……  

 

責任編輯:龐桂玉 來源: 良許Linux
相關推薦

2022-06-09 09:20:40

Linux語言編寫代碼

2022-05-18 07:58:21

Linux程序編譯代碼

2009-10-16 09:45:41

Linux內核操作系統(tǒng)

2022-06-28 18:32:45

物聯(lián)網IoT

2009-06-26 08:44:57

2018-01-09 04:59:59

VLANTag網絡技術

2011-01-06 11:36:00

linuxGCC編譯器

2017-12-28 14:51:01

AndroidView焦點

2019-10-31 08:36:59

線程內存操作系統(tǒng)

2022-08-02 09:02:17

虛擬內存操作系統(tǒng)

2021-05-13 10:12:55

Kubernetes 微服務軟件開發(fā)

2009-10-20 14:58:15

Javascript事

2020-04-12 22:23:45

Kubernetes容器網絡

2011-08-30 16:26:34

Hadoop

2018-02-24 13:21:02

2019-08-02 08:59:21

Token認證服務器

2009-09-16 13:05:32

C#組件開發(fā)

2020-04-15 22:18:55

架構負載均衡分布式

2010-06-09 11:17:34

openSUSE Mp

2010-09-16 17:53:12

Java編譯
點贊
收藏

51CTO技術棧公眾號

亚洲欧洲三级电影| 国产日韩欧美三级| 欧美一级高清大全免费观看| 激情六月天婷婷| 成人毛片在线精品国产| 亚洲一卡久久| 久久久精品免费| 少妇一级淫免费观看| 福利一区二区免费视频| 日韩美女久久久| 久久资源av| 91无套直看片红桃| 国产精品最新自拍| 欧美成人合集magnet| 泷泽萝拉在线播放| 午夜视频一区二区在线观看| 色一情一乱一乱一91av| 免费的av在线| www.亚洲免费| 不卡一区二区在线| 国产在线视频91| 久久国产视频一区| 禁久久精品乱码| 日韩一级裸体免费视频| 国产精品成人一区二区三区电影毛片| 精品国产18久久久久久二百| 色欧美日韩亚洲| 国产欧美日韩网站| av在线app| 久久久久久久综合日本| 国产精品日韩欧美一区二区| 91av久久久| 全部av―极品视觉盛宴亚洲| 久久久久久久久久婷婷| 亚洲一级生活片| 久久国产成人午夜av影院宅| 国产丝袜高跟一区| 无码人妻久久一区二区三区蜜桃| 玖玖精品在线| 欧美亚洲精品一区| 青青草av网站| 色老头在线一区二区三区| 亚洲一区二区欧美| 黄色特一级视频| 亚洲第一图区| 一区二区三区日韩| 99re8这里只有精品| 99精品老司机免费视频| 国产片一区二区| 欧洲精品久久| 国产二区视频在线观看| 久久久一区二区| 欧洲国产精品| av中文在线| 国产精品福利在线播放| 亚洲午夜精品一区二区| 日韩美女网站| 国产精品丝袜久久久久久app| 日韩精品一区二区三区外面| 国产高清一区在线观看| 国产精品午夜在线| 在线无限看免费粉色视频| 免费大片在线观看www| 亚洲丝袜精品丝袜在线| 久久久天堂国产精品| 日韩激情av| 黄色一区二区三区| 日韩免费毛片视频| 78精品国产综合久久香蕉| 欧美日韩和欧美的一区二区| 国产一区二区在线观看免费视频| 亚洲日日夜夜| 精品国产免费视频| 特级西西人体wwwww| 综合国产视频| 久久精品国产96久久久香蕉| 天天干中文字幕| 国产欧美另类| 国产日韩欧美夫妻视频在线观看| 国产精品视频无码| 波多野结衣视频一区| 欧美亚洲爱爱另类综合| 日本a在线播放| 一区二区三区在线免费播放| 国产免费黄色av| 国外成人福利视频| 精品免费一区二区三区| 老牛影视av老牛影视av| 天天超碰亚洲| 午夜精品久久久久久久99热| 无码一区二区三区在线观看| 另类欧美日韩国产在线| 国产91视觉| 国内在线免费高清视频| 亚洲免费大片在线观看| 日韩欧美国产综合在线| 精品久久久网| 亚洲国产精品va在线观看黑人| 欧美大波大乳巨大乳| 欧美激情性爽国产精品17p| 91精品国产91久久久久久久久 | 在线中文一区| 欧美在线视频一区| 国产av无码专区亚洲av| 久久精品一区四区| 国产午夜精品视频一区二区三区| 亚洲私拍视频| 日韩一区二区免费电影| 日本理论中文字幕| 亚洲激情黄色| 91精品在线观| 国产高清视频在线| 黑人狂躁日本妞一区二区三区 | 久久激情视频久久| 国产嫩bbwbbw高潮| 岛国精品一区二区| 亚洲最新在线| 日韩成人av电影| 精品乱人伦一区二区三区| 91ts人妖另类精品系列| 久久综合九色综合欧美狠狠| 国产精品免费在线播放| 超碰porn在线| 欧美日韩国产成人在线免费| 在线 丝袜 欧美 日韩 制服| 国内精品美女在线观看| 91免费在线视频| 懂色一区二区三区| 欧美日韩在线免费观看| 一级黄色免费视频| 欧美激情四色| 91在线观看免费观看| 午夜小视频在线| 欧美在线播放高清精品| 亚洲av无码一区二区二三区| 亚洲国产高清一区| 成人免费在线看片| 免费在线看污片| 日韩欧美一级二级三级| 日韩欧美123区| 激情综合网最新| 日韩欧美精品在线不卡| 成人日韩在线观看| 亚洲天堂网站在线观看视频| 国产伦精品一区二区三区视频网站| 成人av在线播放网址| 免费看黄在线看| 粉嫩久久久久久久极品| 久久久久久久久综合| 丁香花免费高清完整在线播放| 亚洲精品国产成人久久av盗摄| 久久久久久久久久毛片| 亚洲大全视频| 99久久一区三区四区免费| 污污影院在线观看| 精品国偷自产国产一区| 日本三级午夜理伦三级三| 大美女一区二区三区| 欧美日韩性生活片| 蜜桃一区二区三区| 国产成人精品免费久久久久| 国产香蕉在线| 欧美乱熟臀69xxxxxx| 在线观看亚洲网站| 粉嫩绯色av一区二区在线观看| 黄色三级中文字幕| 另类春色校园亚洲| 日本在线精品视频| 日韩大片在线永久免费观看网站| 欧美精品xxxxbbbb| 激情四射综合网| 99久久国产综合色|国产精品| 黄色免费观看视频网站| 日韩电影在线视频| 91网免费观看| 亚洲黄色中文字幕| 日韩中文字幕网址| 午夜精品一二三区| 色婷婷亚洲精品| 992在线观看| 成人午夜视频在线| 天天天干夜夜夜操| 午夜精品影院| 秋霞毛片久久久久久久久| 欧美一级做一级爱a做片性| 欧美激情视频一区二区| 黄色国产在线| 欧美大片一区二区| 亚洲精品91天天久久人人| 亚洲色图.com| 日韩av在线看免费观看| 国产一区美女在线| 欧美牲交a欧美牲交aⅴ免费下载| 99久久婷婷这里只有精品| 国产视频精品网| 国产精品成人国产| 91精品国产色综合久久不卡98口| 午夜视频在线观看免费视频| 亚洲精品97久久| 国产精品一区二区av白丝下载| 亚洲超碰97人人做人人爱| 岛国片在线免费观看| 成人18视频日本| 永久免费黄色片| 久久亚洲综合| 久久国产精品网| 国产精品成人a在线观看| 欧美日韩国产不卡在线看| 日本一区二区三区视频在线看 | 国产精品亚洲lv粉色| 日韩欧美精品在线观看| 久久久国产成人| 国产精品国产三级国产| 蜜桃传媒一区二区亚洲av| 粉嫩嫩av羞羞动漫久久久| 亚洲77777| 久久精品1区| 国产欧美日韩小视频| 91精品国产91久久综合| 亚洲v国产v在线观看| 在线日韩一区| 久久精品美女| 久久夜色电影| 成人av资源| 精品国产乱码一区二区三区 | 中文字幕网址在线| 欧美性极品xxxx娇小| 日本天堂网在线观看| 亚洲免费观看高清| 国产激情无码一区二区三区| 国产欧美日韩综合精品一区二区| 久久久久国产精品区片区无码| 成人综合婷婷国产精品久久蜜臀| 午夜影院免费观看视频| 久久精品av麻豆的观看方式| 欧美三级理论片| 日韩av电影天堂| 久草综合在线观看| 欧美一级播放| 人妻有码中文字幕| 新67194成人永久网站| 18禁免费观看网站| 国产一级久久| 黄色片久久久久| 日韩二区三区在线观看| 日韩视频免费在线播放| 日本中文字幕一区| 亚洲国产精品三区| 另类专区欧美蜜桃臀第一页| 国产三级精品三级在线| 国内不卡的二区三区中文字幕| www.com污| 国产精品亚洲综合一区在线观看| 毛片毛片毛片毛片毛| 国产一区二区伦理| 国产精九九网站漫画| 成人av网站免费| 四虎影成人精品a片| 国产日产亚洲精品系列| 国产精品综合激情| 亚洲欧美国产毛片在线| 久久久久人妻一区精品色欧美| 午夜精品久久久久久久99樱桃| 草久视频在线观看| 欧美午夜在线一二页| 91精品国产乱码久久久| 日韩片之四级片| 国产精品国产高清国产| 国产一区二区三区精品久久久| 日本在线人成| 欧美精品激情在线| 女生影院久久| 成人精品一区二区三区电影免费 | 日本欧洲国产一区二区| 久久看人人摘| 2018中文字幕第一页| 午夜亚洲激情| 四季av一区二区三区| 成人精品高清在线| 天天躁夜夜躁狠狠是什么心态| 亚洲欧洲精品天堂一级| 久久久精品视频免费| 91福利视频网站| www.黄色一片| 亚洲欧美中文日韩v在线观看| 麻豆传媒视频在线| 91精品国产777在线观看| 日韩城人网站| 久久99精品久久久久久青青日本| 久久亚洲成人| 你懂的av在线| 国产专区欧美精品| 亚洲成人网在线播放| 亚洲精品高清在线| 国产女主播喷水视频在线观看| 日韩亚洲欧美成人一区| 久青草国产在线| 欧美理论片在线观看| 色婷婷综合久久久中字幕精品久久| 7777精品久久久大香线蕉小说| 婷婷综合电影| 久久这里只有精品8| 免费亚洲电影在线| 亚洲男人在线天堂| 亚洲精品中文字幕乱码三区| 国产免费www| 亚洲激情在线视频| 青草青在线视频| 国产精品极品尤物在线观看| 大香伊人久久精品一区二区| 一区二区三区四区五区精品| 亚洲欧美大片| 男女性杂交内射妇女bbwxz| 中文字幕在线不卡一区| 国产精品久久久久久久久夜色| 精品伦理精品一区| 午夜伦理在线视频| 91亚洲精品久久久久久久久久久久| 精品理论电影| 日韩a在线播放| 白白色 亚洲乱淫| 欧美成人一区二区三区高清| 欧美日韩在线综合| 国产高清免费av在线| 欧亚精品中文字幕| 亚洲人和日本人hd| 缅甸午夜性猛交xxxx| 高清国产一区二区| 欧美另类视频在线观看| 欧美一区二区三区四区久久| 99青草视频在线播放视| 国产精品香蕉在线观看| 欧洲激情综合| 毛葺葺老太做受视频| 久久久久9999亚洲精品| 日韩不卡视频在线| 日韩精品免费看| 美女的胸无遮挡在线观看| 国产综合 伊人色| 中日韩男男gay无套| 加勒比精品视频| 精品国产精品自拍| 香蕉久久国产av一区二区| 97**国产露脸精品国产| 秋霞蜜臀av久久电影网免费| 国产最新免费视频| 国产日韩欧美综合在线| 日韩国产成人在线| 最近2019免费中文字幕视频三| 日韩精品免费观看视频| 亚洲女人毛片| 国产在线视频精品一区| 欧美性猛交xxxxx少妇| 精品国产乱码久久久久久图片| cao在线视频| 免费成人av网站| 喷白浆一区二区| 国产人与禽zoz0性伦| 欧美一级在线观看| wwww亚洲| 欧美一区二区高清在线观看| 日本欧美韩国一区三区| 天海翼在线视频| 精品国产亚洲在线| 亚洲妇女成熟| 亚洲欧美日韩国产yyy| 国产原创一区二区| 精品无码久久久久| 亚洲欧洲黄色网| 在线高清欧美| 免费一级特黄特色毛片久久看| 久久欧美一区二区| 国产精品乱码久久久| 久久久在线观看| 久久综合亚洲| 伊人免费视频二| 精品欧美国产一区二区三区| av基地在线| 国产精品 日韩| 日韩国产欧美在线播放| 国产午夜手机精彩视频| 亚洲精品久久久久中文字幕二区 | 精品国产乱码久久久久久浪潮| 成人免费无遮挡| 黄色www在线观看| 91免费观看视频在线| 91成年人视频| 欧美一乱一性一交一视频| 91综合久久一区二区| 亚洲天堂av网站| 欧美日韩国产精品自在自线| 九色porny自拍视频在线播放 | 国产一区亚洲| 欧美日韩生活片| 亚洲国产精彩中文乱码av在线播放| 男人亚洲天堂| 777米奇影视第四色| 一区二区三区四区激情| 日本美女在线中文版| 国内精品视频在线播放|