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

GCC 鏈接過程中的【重定位】過程分析

系統 Linux
所謂的安排虛擬地址,就是指定這塊內容被加載到虛擬內存的什么地方。當可執行文件被執行的時候,加載器就把每一塊內容復制到虛擬內存相應的地址處。

最近因為項目上的需要,利用動態鏈接庫來實現一個插件系統,順便就復習了一下關于Linux中一些編譯、鏈接相關的內容。

在鏈接的過程中,符號重定位是比較麻煩的事情,特別是在動態鏈接的過程中,因為需要考慮到很多不同的情況。

這篇文章作為第一篇,先來聊一聊靜態鏈接中的重定位過程。

按照慣例,還是以一個簡短的示例代碼作為載體,看一看GCC在鏈接的過程中,是如何根據目標文件(.o文件)來進行重定位,生成最終的可執行文件的。

示例代碼

示例代碼很簡單,一共有2個源文件main.c和 sub.c。

在sub.c中定義了一個全局變量和一個全局函數,然后在main.c中使用這個全局變量和全局函數。代碼如下:

sub.c

main.c

在一般的開發過程中,都是使用GCC工具,直接把這2個源文件編譯得到可執行文件。

但是,為了探究編譯、鏈接過程中的一些內部情況,我們需要把編譯、鏈接的過程拆開,從中間過程中產生的目標文件(.o 文件)中,來查看一些詳細信息。

先把這2個源文件編譯成目標文件sub.o和main.o:

$ gcc -m32 -c sub.c
$ gcc -m32 -c main.c

這樣就得到了兩個目標文件,先來初步看一下這2個目標文件中的一些信息。

以上這兩個編譯過程是各自獨立的,雖然main.o中使用了兩個符號(全局變量和全局函數),但是此時main.o并不知道這2個符號是在哪個文件中定義的。

當鏈接器把所有的.o文件鏈接成可執行文件的過程中,才能確定這2個符號是在哪里。

在Linux系統中,目標文件(.o) 和可執行文件都是ELF格式的,因此如何查看ELF格式文件的一些工具指令就非常有幫助。

sub.o 文件內容分析

段信息

首先來簡單瞄一眼一下sub.o中的一些信息。

sub.o中的段信息如下(指令:$ readelf -S sub.o):

我們主要關心黃色的代碼段和數據段就可以了,可以看出:

  1. 代碼段(.text):地址Addr是 0x0000_0000(因為這是目標文件,不是可執行文件,所以不會安排地址),它在 sub.o 文件中的偏移量(Off)是 0x34,長度是 0x0C 字節;
  2. 數據段(.data):地址Addr是 0x0000_0000,它在 sub.o 文件中的偏移量(Off)是 0x40,長度是 0x04 字節;

簡單算一下:sub.o的開始部分是ELF的 header,通過 readelf -h sub.o 指令可以看出來header部分是52個字節(即:0x34),如下:

因此可以得到:

  1. 代碼段(.text)是緊接在 header 之后,長度是 0x0C 個字節,在文件中占據著 0x34 ~ 0x3F 這部分空間(0x3F = 0x34 + 0x0C - 1);
  2. 數據段(.data)是進階在代碼段之后,在文件中占據著 0x40 ~ 0x43 這部分空間;

符號表信息

下面再來說說符號表的事情。

簡單來說,符號表就是一個文件中定義的所有符號、引用的外部符號(在其它文件中定義),包括:變量名、函數名、段名等等,都屬于符號。

當然了,在ELF文件中會詳細的說明每一個符號的類型、大小、可見性等信息。如果對ELF文件格式有過了解的話,一定知道每一條符號信息,都是通過一個結構體來描述具體含義的,描述符號表的結構體如下:

// Symbol table entries for ELF32.
struct Elf32_Sym {
Elf32_Word st_name; // Symbol name (index into string table)
Elf32_Addr st_value; // Value or address associated with the symbol
Elf32_Word st_size; // Size of the symbol
unsigned char st_info; // Symbol's type and binding attributes
unsigned char st_other; // Must be zero; reserved
Elf32_Half st_shndx; // Which section (header table index) it's defined in
};

再來看一下sub.o中的符號表,下面這張圖(指令:readelf -s sub.o):

關注上圖中黃色矩形中的兩個符號:SubData和SubFunc,很明顯它們就是sub.c中定義的兩個符號:全局變量和全局函數。

對于SubData符號來說:

  1. Size=4: 長度是 4 個字節;
  2. Type=OBJECT:說明這是一個數據對象;
  3. Bind=GLOBAL:說明這個符號是全局可見的,也就是在其他文件中可以使用;
  4. Ndx=2:說明這個符號是屬于第 2 個 段中,就是數據段(.data);

同樣的道理,對于SubFunc符號來說:

  1. Size=12: 長度是 12 個字節;
  2. Type=FUNC:說明這是一個函數;
  3. Bind=GLOBAL:說明這個符號是全局可見的,也就是在其他文件中可以調用;
  4. Ndx=1:說明這個符號是屬于第 1 個 段中,就是代碼段(.text);

main.o 文件分析

按照上面的步驟,把main.o中的這幾個信息也查看一下。

段信息

指令:readelf -S main.o

可以看出:

  1. 代碼段(.text):地址Addr是 0x0000_0000(因為這是目標文件,不是可執行文件,所以不會安排地址),它在 sub.o 文件中的偏移量(Off)是 0x34,長度是 0x32 字節;
  2. 數據段(.data):地址Addr是 0x0000_0000,它在 sub.o 文件中的偏移量(Off)是 0x66,長度是 0 個字節,因為它沒有定義變量;

在文件中的布局如下所示:

符號表信息

指令:readelf -s main.o

重點看一下黃色矩形中的3個符號。

main符號:

  1. Size=50: 長度是 30 個字節,也就對應著代碼段的長度 0x32;
  2. Type=FUNC:說明這是一個函數
  3. Bind=GLOBAL:說明這個符號是全局可見的,也就是在其他文件中可以調用;
  4. Ndx=1:說明這個符號是屬于第 1 個 段中,就是代碼段(.text);

下面兩個符號SubData和SubFunc,他們的Ndx都是UND,表示這2個符號被main.o使用,但是定義在其他文件中。

我們知道,當鏈接成可執行文件時,所有的符號都必須有確定的地址(虛擬地址),所以鏈接器就需要在鏈接的過程中找到這2個符號在可執行文件中的地址,然后把這兩個地址填寫到main的代碼段中。

可以先來看一下main.o的反匯編代碼:

指令:objdump -d main.o

黃色矩形框中是把數值0存儲到eax寄存器中,然后把eax 壓到棧中,然后紅色矩形框調用了一個函數。

從示例代碼(.c文件)中可知:main函數在調用sub.c中的SubFunc函數時,傳入了變量SubData。

黃色部分的00 00 00 00就應該是符號SubData的地址,只不過此時main.o還不知道這個符號的將會被鏈接器安排在什么地址,所以只能空著(以4個字節的00來占位)。

紅色部分的調用(call)地址為什么是fc ff ff ff?

按照小端格式計算一下:0xfffffffc,十進制的值就是-4,為什么設置成-4呢?

對于x86平臺的ELF格式來說,對地址進行修正的方式有2種:絕對尋址和相對尋址。

絕對尋址

對于SubData符號就是絕對尋址,在鏈接成可執行文件時,這個地址在代碼段中偏移0x12個字節(黃色矩形框指令碼偏移0x11個字節,跨過一個字節的指令碼a1就是0x12個字節),這個地方4個字節的當前值是 00 00 00 00。

鏈接器在修正的時候(就是鏈接成可執行文件的時候),會把這4個字節修改為SubData變量在可執行文件中的實際地址(虛擬地址)。

相對尋址

紅色矩形框中的函數調用(SubFunc符號),就是相對尋址,就是說:當CPU執行到這條指令的時候,把PC寄存中的值加上這個偏移地址,就是被調用對象的實際地址。

鏈接器在重定位的時候,目的就是計算出相對地址,然后替換掉fc ff ff ff這四個字節。

PC寄存器中的值是確定的,當call這條指令被CPU取到之后,PC寄存器被自動增加,指向下一條指令的開始地址(偏移0x1f地址處)。

實際地址 = PC值 + xxxx_xxxx,所以得到:xxxx_xxxx = 實際地址 - PC值。

而PC值與 xxxx_xxxx 所在的地址之間是有關系的:PC值 + (-4)就得到 xxxx_xxxx 所在的地址,因此在main.o中預先在這個地址處填 fc ff ff ff(-4)。

問題來了,鏈接器怎么知道main.o中代碼段的這兩個地方,需要進行地址修正?

這就是下面介紹的重定位表的作用了!

重定位表信息

指令:objdump -r main.o

重定位表就表示: 該目標文件中,有哪些符號需要在鏈接的時候進行地址重定位。

從圖中黃色矩形框可以看出:main.o中代碼段(.text)的 SubData和SubFunc這 2 個符號都需要鏈接器對它進行重定位。

TYPE列:R_386_32表示絕對尋址, R_386_PC32 表示相對尋址; OFFSET列表示需要重定位的符號在main.o文件代碼段中的偏移位置。

剛才已經看了main.o的反匯編代碼,可以看到偏移0x12 和 0x1b的地方,就是需要進行地址重定位的兩個符號。

可執行程序 main

有了 2 個目標文件:sub.o和main.o,就可以鏈接得到可執行程序了:

$ ld -m elf_i386 main.o sub.o -e main -o main

段信息

使用readelf工具來看一下main可執行文件中的段信息(指令:readelf -S main):

  1. 紅色矩形框是代碼段(.text),鏈接器把它放在虛擬地址 0x0804_8094;
  2. 黃色矩形框是數據段(.data),鏈接器把它放在虛擬地址 0x0804_9138;

從段信息中可以看到main文件中代碼段和數據段的布局如下:

可執行程序main是由main.o和sub.o這兩個目標文件組成的,所以main中的代碼段是由main.o中的代碼段和sub.o中的代碼段組合得到的;對于數據段,由于 main.o中數據段的長度為0,所以main中的數據段就是sub.o中的數據段(長度為4),如下圖所示:

符號表信息

指令:readelf -s main

黃色矩形框中的SubData屬于數據段,長度是 4 個字節,虛擬地址是 0x0804_9138,與段信息中的值是一致的。

紅色矩形框中的SubFunc屬于代碼段,長度是 12 個字節,虛擬地址是 0x0804_80c6。

因為main中的代碼段包括 2 部分內容:

  1. main.o 中的代碼段 main 函數;
  2. sub.o 中的代碼段 SubFunc 函數;

所以,可執行文件main中的代碼段,先存放的是main函數,虛擬地址:0x0804_8094,長度是0x32(50 個字節);

緊接著存放的是SubFunc函數,虛擬地址:0x0804_80c6,長度是0x0c(12 個字節)。

如下圖所示:

鏈接器在第一遍掃描所有的目標文件時,把所有相同類型的段進行合并,安排到相應的虛擬地址,如上圖所示。

所謂的安排虛擬地址,就是指定這塊內容被加載到虛擬內存的什么地方。當可執行文件被執行的時候,加載器就把每一塊內容復制到虛擬內存相應的地址處。

同時,鏈接器還會建立一個全局符號表,把每一個目標文件中的符號信息都復制到這個全局符號表中。

對于我們的實例程序,全局符號表中包括:

SubData: 屬于 sub.o 文件,數據段,安排在虛擬地址 0x0804_9138;

SubFunc: 屬于 sub.o 文件,代碼段,安排在虛擬地址 0x0804_80c6;

其它符號信息...

絕對地址重定位

然后,鏈接器第二遍掃描所有的目標文件,檢查哪些目標文件中的符號需要進行重定位。

對于我們的示例程序,首先來看一下main.o中使用的外部變量SubData的重定位。

從main.o的重定位表中可知:SubData符號需要進行重定位,需要把這個符號在執行時刻的絕對尋址(虛擬地址),寫入到 main可執行文件中代碼段中偏移0x12字節處。

也就是說需要解決 2 個問題:

  1. 需要計算出在執行文件 main 中的什么位置來填寫絕對地址(虛擬地址);
  2. 填寫的絕對地址(虛擬地址)的值是多少;

首先來解決第一個問題。

從可執行文件的段表中可以看出:目標文件main.o和sub.o中的代碼段被存放到可執行文件main中代碼段的開始位置,先放main.o代碼段,再放sub.o代碼段。

代碼段的開始地址距離文件開始的偏移量是0x94,再加上偏移量0x12,結果就是0xa6。

也就是說:需要在main文件中偏移0xa6處填入SubData在執行時刻的絕對地址(虛擬地址)。

再來解決第二個問題。

鏈接器從全局符號表中發現:SubData符號屬于sub.o文件,已經被安排在虛擬地址0x0804_9138處,因此只需要把0x0804_9138填寫到可執行文件main中偏移0xa6的地方。

我們來讀取main文件,驗證一下這個位置處的虛擬地址是否正確:

指令:od -Ax -t x1 -j 166 -N 4 main

-Ax: 顯示地址的時候,用十六進制來表示。如果使用 -Ad,意思就是用十進制來顯示地址;

-t -x1: 顯示字節碼內容的時候,使用十六進制(x),每次顯示一個字節(1);

-j 166: 跨過 166 個字節(十六進制 0xa6);

-N 4:只需要讀取 4 個字節;

注意:顯示的是小端格式。

相對地址重定位

從上面描述的重定位表中看出:main.o代碼段中的SubFunc符號也需要重定位,而且是相對尋址。

鏈接器需要把SunFunc符號在執行時刻的絕對地址(虛擬地址),減去call指令的下一條指令(PC 寄存器) 之后的差值,填寫到執行文件main中的main.o代碼段偏移0x1b的地方。

同樣的道理,需要解決 2 個問題:

  1. 需要計算出在執行文件 main 中的什么位置來填寫相對地址;
  2. 填寫的相對地址的值是多少;

首先來解決第一個問題。

從main.o的重定位表中可知:需要修正的位置距離main.o中代碼段的偏移量是0x1b字節。

可執行文件main中代碼段的開始地址距離文件開始的偏移量是0x94,再加上偏移量0x1b就是0xaf。

也就是說:需要在main文件中0xaf偏移處填入一個相對地址,這個相對地址的值就是SubFunc在執行時刻的絕對地址(虛擬地址)、距離call指令的下一條指令的偏移量。

再來解決第二個問題。

鏈接器在第一遍掃描的時候,已經把sub.o中的符號SubFunc記錄到全局符號表中了,知道SubFunc函數被安排在虛擬地址0x0804_80c6的地方。

但是不能把這個絕對地址直接填寫進去,因為 call 指令需要的是相對地址(偏移地址)。

鏈接器把main代碼段起始位置安排在 0x0804_8094,那么偏移0x1b處的虛擬地址就是:0x0804_80af,然后還需要再跨過4個字節(因為執行call指令時,PC的值自動增加到下一條指令的開始地址)才是此刻PC寄存器的值,即:0x0804_80b3,如下圖中紅色部分:

兩個虛擬地址都知道了,計算一下差值就可以了:0x0804_80c6 - 0x0804_80b3 = 0x13。

也就是說:在可執行文件main中偏移為0xaf的地方,填入相對地址0x0000_0013就完成了SubFunc符號的重定位。

還是用od指令來讀取main文件的內容來驗證一下:

指令:od -Ax -t x1 -j 175 -N 4 main

總結

經過以上兩個重定位操作,main.c中使用的兩個外部符號就解決了地址重定位問題。

再來看一下可執行文件main的反匯編代碼:

從黃色和紅色的矩形框可以看出,二進制指令中的地址值與上面的分析是一致的。

以上就是靜態鏈接過程中地址重定位的基本過程,與動態鏈接相比,靜態鏈接還是相對簡單很多。

以后有機會的話,我們再繼續聊一下動態鏈接中的一些操作,謝謝!

責任編輯:武曉燕 來源: IOT物聯網小鎮
相關推薦

2022-03-21 07:56:25

動態鏈接Linux操作系統

2010-09-28 09:27:27

2025-06-25 09:06:18

2009-11-26 13:50:16

無線路由器

2013-08-15 12:26:40

阿里云飛天

2010-07-01 14:05:43

SNMPMIB

2011-04-11 17:28:50

oracle存儲select語句

2011-05-03 10:31:59

噴墨打印機注墨誤區

2009-07-23 14:10:38

Hibernate J

2010-01-13 17:03:01

配置交換機

2021-08-05 15:36:34

NFV網絡設備

2011-06-14 18:39:01

SEO

2016-09-07 20:28:17

MySQL存儲數據庫

2009-05-15 09:33:52

開發線程沖突lock

2010-11-11 09:40:34

BUG

2024-01-15 00:25:59

2010-03-04 09:54:24

Android開發

2012-01-17 16:41:08

JavaSwing

2019-08-13 15:01:04

變更運維項目經理

2010-05-31 16:57:09

點贊
收藏

51CTO技術棧公眾號

免播放器亚洲一区| 免费萌白酱国产一区二区三区| 国产精品看片你懂得| 成人欧美在线观看| 日韩欧美一区二区一幕| 国产一区二区观看| 日韩欧美在线影院| 日本一极黄色片| 国产黄大片在线观看画质优化| 播五月开心婷婷综合| 国产精品香蕉av| 中文在线观看免费网站| 色婷婷综合网| 日韩成人av网址| 午夜影院免费版| 国产高清不卡| 亚洲影视在线播放| 午夜视频久久久| 性xxxx视频播放免费| 蜜桃久久久久久| 欧美一区二三区| 免费麻豆国产一区二区三区四区| 欧美精选一区二区三区| 亚洲国产一区二区三区四区| 午夜视频在线观| 成人不卡视频| 在线亚洲一区二区| 狠狠干 狠狠操| 在线观看h网| 17c精品麻豆一区二区免费| 久久综合色一本| 亚洲美女福利视频| 精品一区二区三区免费毛片爱| 欧美一级片在线播放| 久青草免费视频| 真实国产乱子伦精品一区二区三区| 国产亚洲视频在线| 999日本视频| 一级黄色av片| 亚洲欧美日本日韩| 97avcom| 麻豆chinese极品少妇| 91精品国产成人观看| 色噜噜国产精品视频一区二区| 午夜精产品一区二区在线观看的| 日本欧美韩国国产| 日韩精品极品毛片系列视频| 欧美日韩一区二区区别是什么| 外国成人毛片| 欧美日本不卡视频| 岛国毛片在线播放| 亚洲一区导航| 欧美一区二区在线播放| 亚洲午夜精品一区| 蜜桃精品视频| 日韩欧美亚洲另类制服综合在线| 91性高潮久久久久久久| 国产亚洲亚洲国产一二区| 678五月天丁香亚洲综合网| 激情黄色小视频| 亚洲视频资源| 欧美r级电影在线观看| 中文字幕在线播放一区二区| 一区二区网站| 日韩成人在线网站| 成人免费无遮挡无码黄漫视频| 国产精品视频一区二区三区四蜜臂| 亚洲人在线视频| 国产调教在线观看| 国产精品精品| 欧美激情极品视频| 日韩一区二区视频在线| 久久久久久亚洲精品杨幂换脸| 国产精品∨欧美精品v日韩精品| 亚洲国产精品无码久久久| 日韩不卡一区二区| 91亚洲精品视频| 亚洲欧美黄色片| 91免费视频网址| 亚洲精品8mav| 色呦呦在线观看视频| 午夜日韩在线观看| 国产又粗又长又大的视频| www.成人| 精品视频一区在线视频| 91香蕉视频污在线观看| 欧美国内亚洲| 热久久美女精品天天吊色| 亚洲无码精品在线观看| 午夜精彩国产免费不卡不顿大片| 久久久免费观看视频| 一级做a爰片久久毛片| 精品午夜久久福利影院| 国产伦精品一区二区三区在线 | 精品视频一区二区不卡| 香蕉视频色在线观看| 亚洲精华一区二区三区| 日韩在线观看高清| 日本一区二区网站| 免费观看成人av| 国产高清精品一区| 免费在线毛片| 亚洲一区日韩精品中文字幕| 日本激情视频在线| 97品白浆高清久久久久久| 亚洲天堂第二页| 国产无码精品在线播放| 免费一级片91| 久久手机视频| 毛片在线导航| 51久久夜色精品国产麻豆| 韩国无码一区二区三区精品| 亚洲色图88| 国产精品久久久久久久久久新婚| 性一交一乱一伧老太| 国产日韩av一区二区| 欧美午夜性视频| 亚洲一区导航| 中文字幕亚洲天堂| www.国产一区二区| 成人综合在线视频| 中文字幕第一页亚洲| 亚洲四虎影院| 亚洲毛茸茸少妇高潮呻吟| www.99re7.com| 国产一区二区三区不卡在线观看| 日本福利一区二区三区| 老司机深夜福利在线观看| 日韩三级电影网址| 成年人二级毛片| 青草av.久久免费一区| 久久久久资源| 美女搞黄视频在线观看| 欧美不卡在线视频| 私库av在线播放| 激情另类小说区图片区视频区| 日本一区二区三区视频免费看| 麻豆免费版在线观看| 亚洲成人久久网| 久久激情免费视频| 国产成人av一区二区三区在线观看| 亚洲自拍偷拍二区| 福利一区二区免费视频| 国产亚洲精品综合一区91| 欧美h在线观看| 久久中文娱乐网| 成人三级视频在线播放| 在线观看欧美理论a影院| 国产91精品青草社区| 午夜影院免费体验区| 天天av天天翘天天综合网 | 99久热这里只有精品视频免费观看| 精品国内亚洲在观看18黄| 一级黄色a毛片| 1024精品合集| 在线成人精品视频| 激情久久一区| 蜜桃视频日韩| 黄瓜视频成人app免费| 中文字幕亚洲天堂| 国产精品久久久午夜夜伦鲁鲁| 亚洲欧美一区二区久久| 台湾佬美性中文| 国产精品久久久久久久久久妞妞| 久久亚洲午夜电影| 久久久成人av毛片免费观看| 日韩中文综合网| 亚洲精品国产精品乱码不卡| 偷拍日韩校园综合在线| 欧美图片第一页| 久久国产人妖系列| 妺妺窝人体色www看人体| 精品素人av| 国产精品96久久久久久| 久草免费在线| 亚洲激情在线观看| 国产一级片免费在线观看| 国产精品色哟哟| 国产xxx在线观看| 亚洲制服av| 一区二区三区国产福利| www.爱久久| 国产成一区二区| 超碰在线免费播放| 日韩黄在线观看| 91精品国产乱码久久久久| 亚洲激情网站免费观看| 亚洲人人夜夜澡人人爽| 精品中文字幕一区二区| 无罩大乳的熟妇正在播放| 日本电影一区二区| 国产精品福利视频| 素人一区二区三区| 久久久久久美女| 波多野结衣一区二区在线| 国产精品久久久久久亚洲毛片| 久久无码专区国产精品s| 日韩高清不卡一区二区| 日韩激情视频一区二区| 成人av资源电影网站| 韩国一区二区三区美女美女秀| 久久99国产精品二区高清软件| 欧美成人一区在线| 国产毛片在线| 亚洲第一区第二区| 91极品身材尤物theporn| 欧美日韩综合视频网址| 欧美日韩偷拍视频| 国产精品天美传媒沈樵| 精品人妻一区二区免费视频| 国产在线播放一区| 日韩免费高清在线| 99xxxx成人网| 男女啪啪免费观看| 日韩欧美二区| 欧美连裤袜在线视频| 国产欧美三级电影| **亚洲第一综合导航网站| 日韩精品三区| 日本久久久久久久久久久| 欧美伦理免费在线| 欧美成aaa人片在线观看蜜臀| av中文在线| 一区国产精品视频| 你懂的在线网址| 亚洲精品国产精品乱码不99按摩 | 在线观看精品| 38少妇精品导航| 国产蜜臀一区二区打屁股调教| 色噜噜狠狠色综合网图区| www 日韩| 有码中文亚洲精品| 黄色大片在线免费观看| 亚洲精品视频中文字幕| 蜜桃av中文字幕| 精品日韩在线观看| 亚洲AV午夜精品| 欧美变态口味重另类| 草逼视频免费看| 日韩欧美国产麻豆| 国产黄色片网站| 欧美一级国产精品| av中文字幕观看| 欧美乱妇一区二区三区不卡视频 | 精品国产乱码久久久久久图片| 国产精品一品二区三区的使用体验| 欧美午夜精品一区二区三区 | 男女视频一区二区| 亚洲国产日韩欧美在线观看| 日本vs亚洲vs韩国一区三区二区 | 伊人再见免费在线观看高清版| 国产精品日韩精品中文字幕| 精品亚洲欧美日韩| 秋霞综合在线视频| 欧美二区在线看| 精品不卡一区| 一本二本三本亚洲码| 欧美福利一区| 毛片在线播放视频| 久久久久91| 九色porny自拍| 国产精品88av| 免费a在线观看播放| 久久久美女毛片| 免费黄色在线网址| 亚洲情趣在线观看| 久热精品在线观看| 欧美性色xo影院| 国产成人精品一区二区色戒| 欧美日韩成人综合| 黄色一级a毛片| 亚洲奶大毛多的老太婆| 午夜在线视频播放| 亚洲成人久久一区| 久久久久久久久亚洲精品| 国产一区二区免费| 成人影院在线观看| 97成人在线视频| 成人黄页网站视频| 99re在线国产| 国产精品欧美日韩一区| 糖心vlog在线免费观看| 日韩视频二区| 毛片毛片毛片毛| 不卡视频一二三四| 日韩av片在线| 亚洲成人免费电影| 亚洲午夜在线播放| 欧美哺乳videos| 亚洲成人影院麻豆| 国语自产精品视频在线看一大j8| 日韩免费小视频| 成人自拍爱视频| 欧美电影免费| 国产成人精品视频免费看| 国产一区二区按摩在线观看| 右手影院亚洲欧美| 亚洲伦在线观看| 中文字幕在线观看视频免费| 欧美成人精品1314www| 成人av电影观看| 97精品国产97久久久久久| 日韩一区二区三免费高清在线观看| 国产精品视频一区二区三区经| 日韩av在线播放网址| 夫妻免费无码v看片| 国产伦精品一区二区三区免费| 久久精品成人av| 亚洲国产视频一区二区| 国产一区二区自拍视频| 亚洲片国产一区一级在线观看| 日韩精品分区| 国产在线日韩在线| 国产精品自拍区| 97超碰人人澡| 国产精品自拍在线| 麻豆一区在线观看| 一本色道久久加勒比精品| 亚洲成人中文字幕在线| www.久久撸.com| 91成人在线| 欧美午夜精品久久久久免费视| 激情一区二区| 美女被爆操网站| 亚洲人成伊人成综合网小说| 中文在线观看免费高清| 亚洲一区999| 韩日精品一区二区| 另类欧美小说| 亚洲一区久久| 国产黑丝在线观看| 亚洲综合激情小说| 亚洲a视频在线| 久久国产天堂福利天堂| 高清久久一区| 最新av在线免费观看| 国产原创一区二区三区| 蜜桃视频最新网址| 欧美日本在线观看| 免费高清完整在线观看| 91精品国产综合久久香蕉922| 日韩精品久久| 蜜臀一区二区三区精品免费视频| 国产女人aaa级久久久级| 狠狠躁夜夜躁人人爽视频| 日韩av在线免费播放| 岛国av在线网站| 久久av免费观看| 久久婷婷激情| 国产探花视频在线播放| 欧美色男人天堂| 男人的天堂在线视频免费观看 | www.成人.com| 成人黄色大片在线免费观看| 国产精品不卡| 波多野吉衣在线视频| 五月天一区二区| 色吊丝在线永久观看最新版本| 欧美在线观看网站| japanese国产精品| 天天干天天av| 亚洲一区二区三区中文字幕在线| 黄色aaa大片| 9.1国产丝袜在线观看| 久久av导航| 日韩高清第一页| 亚洲国产日韩a在线播放| 天堂成人在线| 国产精品网址在线| 国产一区二区三区四区老人| 玖玖爱在线精品视频| 欧美亚洲动漫制服丝袜| 黄色成人在线| 国产在线精品一区二区三区| 久久综合影视| 久热这里有精品| 日韩电影在线观看中文字幕| 日本美女久久| 国产手机免费视频| 久久精品水蜜桃av综合天堂| 在线视频播放大全| 久久理论片午夜琪琪电影网| 国产va免费精品观看精品视频| 黄色小视频免费网站| 午夜欧美大尺度福利影院在线看| 久久精品蜜桃| 亚洲在线视频观看| 鲁大师成人一区二区三区 | 天天av天天翘天天综合网| www.av在线| 精品国产乱码一区二区三区四区 | 欧美日韩综合| 懂色av粉嫩av浪潮av| 精品国产免费人成电影在线观看四季| 日韩免费福利视频| 肉大捧一出免费观看网站在线播放| 久久精品一区二区三区四区| 亚洲国产精品久久久久久6q| 国产精品久久久久久久久借妻| 亚洲国产午夜|