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

Linux程序編譯過程詳解

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

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

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

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

GCC 工具鏈介紹

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

GCC

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

Binutils

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

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

C運行庫

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

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

準備工作

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

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

編譯過程

1.預處理

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

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

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

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

2.編譯

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

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

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

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

// hello.s代碼片段
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl $.LC0, %edi
call puts
movl $0, %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc

3.匯編

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

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

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

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

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

4.鏈接

鏈接也分為靜態鏈接和動態鏈接,其要點如下:

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

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

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

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

分析ELF文件

1.ELF文件的段

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

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

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

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

2.反匯編ELF

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

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

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

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

$ gcc -o hello -g hello.c //要加上-g選項
$ objdump -S hello
……
0000000000400526 <main>:
#include <stdio.h>
int
main(void)
{
400526: 55 push %rbp
400527: 48 89 e5 mov %rsp,%rbp
printf("Hello World!" "\n");
40052a: bf c4 05 40 00 mov $0x4005c4,%edi
40052f: e8 cc fe ff ff callq 400400 <puts@plt>
return 0;
400534: b8 00 00 00 00 mov $0x0,%eax
}
400539: 5d pop %rbp
40053a: c3 retq
40053b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
……
責任編輯:龐桂玉 來源: 馬哥Linux運維
相關推薦

2022-06-09 09:20:40

Linux語言編寫代碼

2021-01-19 11:40:40

Linux代碼程序編譯

2010-05-26 12:28:04

Linux內存監控

2009-10-16 09:45:41

Linux內核操作系統

2009-09-03 14:26:17

Jit編譯

2011-06-28 13:27:13

ARM Linux

2011-01-06 11:36:00

linuxGCC編譯器

2011-07-28 15:47:20

IOS 程序 測試

2011-08-17 17:29:32

Windows編譯MySQL

2011-01-07 10:55:42

linux源碼過程

2011-07-01 13:31:29

Ubuntu Linux QVFB

2009-12-03 09:49:25

Linux系統引導程序

2011-06-29 10:18:20

LINUX QT ARM

2010-06-23 10:25:40

Linux Bash命

2011-06-28 13:38:15

Arm linux QT

2011-07-05 10:44:51

Qt Sqlite 靜態編譯

2010-09-16 17:53:12

Java編譯

2020-11-26 10:33:44

MySQL存儲函數

2021-09-28 15:03:06

Linux內核arm

2013-05-28 11:04:42

Android開發Android編譯源碼編譯
點贊
收藏

51CTO技術棧公眾號

亚洲欧美日韩久久| 久久不射2019中文字幕| 日韩美女在线视频| 免费av观看网址| 户外极限露出调教在线视频| 麻豆国产一区二区| 久久久久久久久电影| 久久精品国产亚洲AV熟女| 国产成人福利夜色影视| 亚洲午夜精品在线| 亚洲 国产 欧美一区| 精品国产伦一区二区三| 一本一本久久| 久久中国妇女中文字幕| 在线免费观看成年人视频| 全球中文成人在线| 黑人巨大精品欧美一区免费视频| 日韩精品欧美在线| 国产裸体无遮挡| 亚洲专区免费| 欧美久久精品午夜青青大伊人| 国产精品伦子伦| 国产精品777777在线播放| 日韩欧美一区二区三区久久| 男人日女人的bb| 五月婷婷综合久久| 国产精品一区二区三区99| 国产91九色视频| 日韩精品乱码久久久久久| 欧美国产美女| 伊人久久久久久久久久久| 日本在线不卡一区二区| 精品久久免费| 欧美日韩国产一二三| 国产性xxxx18免费观看视频| 丁香高清在线观看完整电影视频| 18成人在线视频| 少妇免费毛片久久久久久久久| 婷婷五月综合久久中文字幕| 国产成人一区二区精品非洲| 91精品国产综合久久男男| 波多野结衣视频免费观看| 99成人免费视频| 久久久久久av| 久草资源在线视频| 欧美99在线视频观看| 丝袜亚洲另类欧美重口| 国产又粗又黄又猛| 激情综合网站| 中国china体内裑精亚洲片| 免费看污黄网站在线观看| 国产一区二区三区不卡av| 精品国精品自拍自在线| 秘密基地免费观看完整版中文 | 免费黄色av网址| 自拍偷拍亚洲图片| 51精品视频一区二区三区| 欧洲一区二区三区在线| 亚洲精品国产精品国自产| 国产精品久久久久久久龚玥菲 | 678五月天丁香亚洲综合网| 另类图片亚洲另类| www.黄色在线| 日韩免费看片| 久久人体大胆视频| 亚洲一级生活片| 欧美精品综合| 91精品91久久久久久| 国产精品xxxx喷水欧美| 亚洲欧美日韩精品一区二区| 国产精品第2页| 中文字幕在线播放av| 精品一区二区三区免费| 91日本在线观看| 亚洲精品视频91| 99久精品国产| 午夜精品亚洲一区二区三区嫩草 | 久久6免费高清热精品| 超碰手机在线观看| 亚洲茄子视频| 国产69精品久久久久久| 国产精品欧美综合| 国产激情一区二区三区桃花岛亚洲| 国产偷国产偷亚洲高清97cao| 亚洲欧洲成人在线| 亚洲国产精品国自产拍av| 色乱码一区二区三区熟女| www.综合网.com| 色香色香欲天天天影视综合网| 日韩精品视频一二三| 精品中文字幕一区二区三区| 精品国产99国产精品| 国产熟妇搡bbbb搡bbbb| 偷拍欧美精品| 78色国产精品| 97精品人妻一区二区三区| www.66久久| 亚洲一区3d动漫同人无遮挡| 九色91在线| 在线观看免费视频综合| 女教师高潮黄又色视频| 免费不卡中文字幕在线| 另类天堂视频在线观看| 无码人妻精品一区二区蜜桃色欲| 久草这里只有精品视频| 免费观看成人在线| av大片在线| 欧美主播一区二区三区| 在线观看亚洲免费视频| 精品一区不卡| 91精品成人久久| 99精品免费观看| 国产亚洲美州欧州综合国| 欧美乱做爰xxxⅹ久久久| 高清欧美日韩| 亚洲欧美日韩第一区| 免费看一级一片| 青青国产91久久久久久| 久久综合中文色婷婷| 在线免费av导航| 欧美日韩精品福利| 久久久久亚洲av无码a片| 99视频精品免费观看| 7777精品伊久久久大香线蕉语言| 国产裸舞福利在线视频合集| 婷婷丁香激情综合| 国产成人精品一区二区三区在线观看 | 国产精品99久久久久久久| av片在线免费观看| 日韩欧美在线视频观看| 亚洲激情 欧美| 欧美日韩亚洲一区| 91九色国产视频| 香蕉视频免费在线播放| 欧美视频一区二区三区在线观看| 中文字幕丰满孑伦无码专区| 91久久夜色精品国产九色| 不卡的av一区| 污视频免费在线观看| 欧美精品电影在线播放| www.黄色com| 久久99这里只有精品| 亚洲一区二区三区在线观看视频| 国产精品久久激情| 69国产精品视频免费观看| av在线播放不卡| 国产av国片精品| 国产精品白丝av嫩草影院| 久久免费视频网站| 午夜精品一二三区| 亚洲动漫第一页| 扒开伸进免费视频| 国产欧美二区| 欧美日韩精品一区| 成人精品三级| 色偷偷9999www| 国产巨乳在线观看| 亚洲欧美成人一区二区三区| 亚洲三级在线视频| 欧美欧美全黄| 精品无码久久久久久久动漫| 性国裸体高清亚洲| 国产一区二区av| 亚洲一级片免费看| 亚洲精品一卡二卡| 国产高潮失禁喷水爽到抽搐 | 中文字幕理论片| 中文字幕中文字幕在线一区| 国产探花在线观看视频| 91国内精品久久久| 国产亚洲精品资源在线26u| 国产主播中文字幕| 外国成人激情视频| 国产精品我不卡| 成人小电影网站| 尤物九九久久国产精品的分类| 一二三区中文字幕| 一区二区三区日韩| 丰满少妇在线观看资源站| 日本大胆欧美人术艺术动态| www亚洲国产| 国产伦精品一区二区三区免费优势| 欧洲亚洲免费在线| 久cao在线| 亚洲国产精品久久久久秋霞蜜臀| 久久精品无码av| 日韩理论片在线| 又黄又爽的网站| 日本亚洲一区二区| 男人添女人下部视频免费| 亚洲电影一级片| 国产中文字幕日韩| 欧美13videosex性极品| www.色综合| 西西人体44www大胆无码| 欧美影视一区在线| 国产乡下妇女做爰视频| 亚洲国产精品ⅴa在线观看| 波多野吉衣在线视频| 久久影院亚洲| 黄色小视频大全| 国内精品久久久久久99蜜桃| 91免费看网站| www.一区| 欧美中在线观看| 在线看三级电影| 中文字幕亚洲一区在线观看 | 激情开心成人网| 欧美情侣性视频| av亚洲在线| 亚洲欧美国产精品| 蜜桃视频在线观看www| 欧美日韩免费视频| 中文字幕在线天堂| 婷婷夜色潮精品综合在线| 国产极品国产极品| 国产精品久久一级| 插吧插吧综合网| 国产成人亚洲综合a∨猫咪| 黄色手机在线视频| 国产精品资源| 给我免费播放片在线观看| 亚洲深深色噜噜狠狠爱网站| 日韩国产精品一区二区| 私拍精品福利视频在线一区| 99re视频在线观看| 高清久久精品| 国产又爽又黄的激情精品视频| 国产高清不卡| 欧美亚洲在线观看| 精品三级久久| 亚州欧美日韩中文视频| 成人看av片| 久久视频免费观看| 麻豆视频在线观看免费网站| 一区二区三区国产在线观看| 免费在线观看一级毛片| 日韩精品有码在线观看| 欧美熟妇另类久久久久久不卡| 日韩免费高清视频| www.av在线.com| 日韩精品在线网站| 成人av手机在线| 日韩欧美自拍偷拍| 亚洲成人777777| 精品国精品国产尤物美女| 六月婷婷综合网| 亚洲国产婷婷香蕉久久久久久| 殴美一级特黄aaaaaa| 亚洲黄色在线看| 四虎影视精品成人| 亚洲毛茸茸少妇高潮呻吟| 国模精品一区二区| 爽爽爽爽爽爽爽成人免费观看| 四虎久久免费| 久久九九亚洲综合| 色呦呦呦在线观看| 国内自拍欧美激情| 日韩欧美一中文字暮专区 | 亚洲资源在线| 成人在线小视频| 视频精品一区二区三区| 国产一区免费在线观看| 伊人精品一区| 中文字幕久久综合| 国产精品分类| 99精品在线免费视频| 日本午夜一区二区| 三日本三级少妇三级99| 成人美女在线视频| 国产精品无码午夜福利| 中文字幕乱码一区二区免费| 国内毛片毛片毛片毛片毛片| 一区二区三区国产| 日韩欧美一级视频| 欧美老女人第四色| 成人小说亚洲一区二区三区| 亚洲女人初尝黑人巨大| 欧美私人网站| 国内外成人免费激情在线视频网站| 亚洲美女尤物影院| 国产综合久久久久| 风间由美中文字幕在线看视频国产欧美 | 久久久亚洲综合| 成人信息集中地| 亚洲午夜久久久久久久久电影院 | 亚洲影视在线| 日韩av影视大全| 91丨九色丨蝌蚪丨老版| 日本黄色免费片| 亚洲18色成人| 91丨九色丨丰满| 日韩精品极品在线观看播放免费视频| 国产日本在线观看| 色综合导航网站| 亚洲www啪成人一区二区| 91在线短视频| 精品欧美久久| 日本xxxxxxxxxx75| 久久精品国内一区二区三区| 艳妇乳肉豪妇荡乳xxx| 国产精品成人在线观看| 亚洲黄色一区二区| 91麻豆精品久久久久蜜臀| 欧美日韩影视 | 精品91久久| av在线不卡观看| 国产精品成久久久久| 无码人妻h动漫| 成人性生交大片免费看中文网站| 欧美黄色高清视频| 精品成人在线视频| 精品人妻少妇AV无码专区| 曰本色欧美视频在线| 成人国产电影在线观看| 91在线视频九色| 日韩欧美一区二区三区在线视频 | 婷婷久久伊人| 亚洲毛片网站| 亚洲少妇一区二区三区| 专区另类欧美日韩| 亚洲视屏在线观看| 亚洲欧美中文日韩在线| 川上优av中文字幕一区二区| www国产亚洲精品| 香蕉精品视频在线观看| 国产又黄又猛又粗又爽的视频| 91色乱码一区二区三区| 圆产精品久久久久久久久久久| 日韩久久久久久| 欧美精品电影| 国产精品十八以下禁看| 国产精品入口久久| 日韩欧美精品在线观看视频| 99精品国产99久久久久久白柏| 久久机热这里只有精品| 日韩精品自拍偷拍| 黄色影院在线看| 国产一区二区精品免费| 激情综合久久| 无码av免费精品一区二区三区| 亚洲免费视频中文字幕| 精品区在线观看| 欧美成人午夜视频| 国产一区二区三区国产精品| 欧美日韩亚洲国产成人| 精品一区二区三区在线播放视频| 亚洲黄色网址大全| 欧美美女bb生活片| av免费在线观| av在线不卡一区| 国产视频一区欧美| 久久久久亚洲av无码专区桃色| 色综合久久中文字幕| 欧美日韩国产综合视频| 国产精品99久久99久久久二8| 欧美久久综合网| 久久久久久久少妇| 中文成人av在线| 国产剧情精品在线| 久久久久久久一区二区三区| 女仆av观看一区| 久草综合在线观看| 成人免费在线视频| 国产a级免费视频| 羞羞色国产精品| 欧美自拍偷拍| www.亚洲自拍| 五月婷婷综合在线| 精品av中文字幕在线毛片| 国产精品自拍网| 国产综合精品一区| 日韩人妻一区二区三区| 欧美精品免费视频| 好吊日av在线| 日韩精品欧美专区| 国产乱子轮精品视频| www.国产色| 日韩中文字幕av| 成人在线视频你懂的| 日韩欧美xxxx| 亚洲欧美另类小说视频| 无码精品在线观看| 91精品久久久久久久久中文字幕| 一区二区亚洲精品| 成年人在线免费看片| 精品久久久久久最新网址| 日韩美女在线看免费观看| 免费国产成人看片在线| 久久久亚洲精品一区二区三区| 亚洲天堂视频网| 91av在线精品| 亚洲国产精品91| 中文字幕第4页| 日韩欧美另类在线| 日韩制服诱惑| 男人插女人视频在线观看| ...av二区三区久久精品| 五月婷婷狠狠干| 91在线免费看片|