久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

分析Windows和Linux動(dòng)態(tài)庫(kù)

瀏覽:7日期:2024-01-26 14:28:46
;摘要:動(dòng)態(tài)鏈接庫(kù)技術(shù)實(shí)現(xiàn)和設(shè)計(jì)程序常用的技術(shù),在Windows和Linux系統(tǒng)中都有動(dòng)態(tài)庫(kù)的概念,采用動(dòng)態(tài)庫(kù)可以有效的減少程序大小,節(jié)省空間,提高效率,增加程序的可擴(kuò)展性,便于模塊化管理。但不同操作系統(tǒng)的動(dòng)態(tài)庫(kù)由于格式 不同,在需要不同操作系統(tǒng)調(diào)用時(shí)需要進(jìn)行動(dòng)態(tài)庫(kù)程序移植。本文分析和比較了兩種操作系統(tǒng)動(dòng)態(tài)庫(kù)技術(shù),并給出了將Visual C++編制的動(dòng)態(tài)庫(kù)移植到Linux上的方法和經(jīng)驗(yàn)。

1、引言

動(dòng)態(tài)庫(kù)(Dynamic Link Library abbr,DLL)技術(shù)是程序設(shè)計(jì)中經(jīng)常采用的技術(shù)。其目的減少程序的大小,節(jié)省空間,提高效率,具有很高的靈活性。采用動(dòng)態(tài)庫(kù)技術(shù)對(duì)于升級(jí)軟件版本更加容易。與靜態(tài)庫(kù)(Static Link Library)不同,動(dòng)態(tài)庫(kù)里面的函數(shù)不是執(zhí)行程序本身的一部分,而是根據(jù)執(zhí)行需要按需載入,其執(zhí)行代碼可以同時(shí)在多個(gè)程序中共享。

在Windows和Linux操作系統(tǒng)中,都可采用這種方式進(jìn)行軟件設(shè)計(jì),但他們的調(diào)用方式以及程序編制方式不盡相同。本文首先分析了在這兩種操作系統(tǒng)中通常采用的動(dòng)態(tài)庫(kù)調(diào)用方法以及程序編制方式,然后分析比較了這兩種方式的不同之處,最后根據(jù)實(shí)際移植程序經(jīng)驗(yàn),介紹了將VC++編制的Windows動(dòng)態(tài)庫(kù)移植到Linux下的方法。

2、動(dòng)態(tài)庫(kù)技術(shù)

2.1 Windows動(dòng)態(tài)庫(kù)技術(shù)

動(dòng)態(tài)鏈接庫(kù)是實(shí)現(xiàn)Windows應(yīng)用程序共享資源、節(jié)省內(nèi)存空間、提高使用效率的一個(gè)重要技術(shù)手段。常見(jiàn)的動(dòng)態(tài)庫(kù)包含外部函數(shù)和資源,也有一些動(dòng)態(tài)庫(kù)只包含資源,如Windows字體資源文件,稱(chēng)之為資源動(dòng)態(tài)鏈接庫(kù)。通常動(dòng)態(tài)庫(kù)以.dll,.drv、.fon等作為后綴。相應(yīng)的windows靜態(tài)庫(kù)通常以.lib結(jié)尾,Windows自己就將一些主要的系統(tǒng)功能以動(dòng)態(tài)庫(kù)模塊的形式實(shí)現(xiàn)。

Windows動(dòng)態(tài)庫(kù)在運(yùn)行時(shí)被系統(tǒng)加載到進(jìn)程的虛擬空間中,使用從調(diào)用進(jìn)程的虛擬地址空間分配的內(nèi)存,成為調(diào)用進(jìn)程的一部分。DLL也只能被該進(jìn)程的線(xiàn)程所訪(fǎng)問(wèn)。DLL的句柄可以被調(diào)用進(jìn)程使用;調(diào)用進(jìn)程的句柄可以被DLL使用。DLL模塊中包含各種導(dǎo)出函數(shù),用于向外界提供服務(wù)。DLL可以有自己的數(shù)據(jù)段,但沒(méi)有自己的堆棧,使用與調(diào)用它的應(yīng)用程序相同的堆棧模式;一個(gè)DLL在內(nèi)存中只有一個(gè)實(shí)例;DLL實(shí)現(xiàn)了代碼封裝性;DLL的編制與具體的編程語(yǔ)言及編譯器無(wú)關(guān),可以通過(guò)DLL來(lái)實(shí)現(xiàn)混合語(yǔ)言編程。DLL函數(shù)中的代碼所創(chuàng)建的任何對(duì)象(包括變量)都?xì)w調(diào)用它的線(xiàn)程或進(jìn)程所有。

根據(jù)調(diào)用方式的不同,對(duì)動(dòng)態(tài)庫(kù)的調(diào)用可分為靜態(tài)調(diào)用方式和動(dòng)態(tài)調(diào)用方式。

(1)靜態(tài)調(diào)用,也稱(chēng)為隱式調(diào)用,由編譯系統(tǒng)完成對(duì)DLL的加載和應(yīng)用程序結(jié)束時(shí)DLL卸載的編碼(Windows系統(tǒng)負(fù)責(zé)對(duì)DLL調(diào)用次數(shù)的計(jì)數(shù)),調(diào)用方式簡(jiǎn)單,能夠滿(mǎn)足通常的要求。通常采用的調(diào)用方式是把產(chǎn)生動(dòng)態(tài)連接庫(kù)時(shí)產(chǎn)生的.LIB文件加入到應(yīng)用程序的工程中,想使用DLL中的函數(shù)時(shí),只須在源文件中聲明一下。 LIB文件包含了每一個(gè)DLL導(dǎo)出函數(shù)的符號(hào)名和可選擇的標(biāo)識(shí)號(hào)以及DLL文件名,不含有實(shí)際的代碼。Lib文件包含的信息進(jìn)入到生成的應(yīng)用程序中,被調(diào)用的DLL文件會(huì)在應(yīng)用程序加載時(shí)同時(shí)加載在到內(nèi)存中。

(2)動(dòng)態(tài)調(diào)用,即顯式調(diào)用方式,是由編程者用API函數(shù)加載和卸載DLL來(lái)達(dá)到調(diào)用DLL的目的,比較復(fù)雜,但能更加有效地使用內(nèi)存,是編制大型應(yīng)用程序時(shí)的重要方式。在Windows系統(tǒng)中,與動(dòng)態(tài)庫(kù)調(diào)用有關(guān)的函數(shù)包括:

①LoadLibrary(或MFC 的AfxLoadLibrary),裝載動(dòng)態(tài)庫(kù)。②GetProcAddress,獲取要引入的函數(shù),將符號(hào)名或標(biāo)識(shí)號(hào)轉(zhuǎn)換為DLL內(nèi)部地址。③FreeLibrary(或MFC的AfxFreeLibrary),釋放動(dòng)態(tài)鏈接庫(kù)。

在windows中創(chuàng)建動(dòng)態(tài)庫(kù)也非常方便和簡(jiǎn)單。在Visual C++中,可以創(chuàng)建不用MFC而直接用C語(yǔ)言寫(xiě)的DLL程序,也可以創(chuàng)建基于MFC類(lèi)庫(kù)的DLL程序。每一個(gè)DLL必須有一個(gè)入口點(diǎn),在VC++中,DllMain是一個(gè)缺省的入口函數(shù)。DllMain負(fù)責(zé)初始化(Initialization)和結(jié)束(Termination)工作。動(dòng)態(tài)庫(kù)輸出函數(shù)也有兩種約定,分別是基于調(diào)用約定和名字修飾約定。DLL程序定義的函數(shù)分為內(nèi)部函數(shù)和導(dǎo)出函數(shù),動(dòng)態(tài)庫(kù)導(dǎo)出的函數(shù)供其它程序模塊調(diào)用。通常可以有下面幾種方法導(dǎo)出函數(shù):

①采用模塊定義文件的EXPORT部分指定要輸入的函數(shù)或者變量。②使用MFC提供的修飾符號(hào)_declspec(dllexport)。③以命令行方式,采用/EXPORT命令行輸出有關(guān)函數(shù)。

在windows動(dòng)態(tài)庫(kù)中,有時(shí)需要編寫(xiě)模塊定義文件(.DEF),它是用于描述DLL屬性的模塊語(yǔ)句組成的文本文件。

 2.2 Linux共享對(duì)象技術(shù)

在Linux操作系統(tǒng)中,采用了很多共享對(duì)象技術(shù)(Shared Object),雖然它和Windows里的動(dòng)態(tài)庫(kù)相對(duì)應(yīng),但它并不稱(chēng)為動(dòng)態(tài)庫(kù)。相應(yīng)的共享對(duì)象文件以.so作為后綴,為了方便,在本文中,對(duì)該概念不進(jìn)行專(zhuān)門(mén)區(qū)分。Linux系統(tǒng)的/lib以及標(biāo)準(zhǔn)圖形界面的/usr/X11R6/lib等目錄里面,就有許多以so結(jié)尾的共享對(duì)象。同樣,在Linux下,也有靜態(tài)函數(shù)庫(kù)這種調(diào)用方式,相應(yīng)的后綴以.a結(jié)束。Linux采用該共享對(duì)象技術(shù)以方便程序間共享,節(jié)省程序占有空間,增加程序的可擴(kuò)展性和靈活性。Linux還可以通過(guò)LD-PRELOAD變量讓開(kāi)發(fā)人員可以使用自己的程序庫(kù)中的模塊來(lái)替換系統(tǒng)模塊。

同Windows系統(tǒng)一樣,在Linux中創(chuàng)建和使用動(dòng)態(tài)庫(kù)是比較容易的事情,在編譯函數(shù)庫(kù)源程序時(shí)加上-shared選項(xiàng)即可,這樣所生成的執(zhí)行程序就是動(dòng)態(tài)鏈接庫(kù)。通常這樣的程序以so為后綴,在Linux動(dòng)態(tài)庫(kù)程序設(shè)計(jì)過(guò)程中,通常流程是編寫(xiě)用戶(hù)的接口文件,通常是.h文件,編寫(xiě)實(shí)際的函數(shù)文件,以.c或.cpp為后綴,再編寫(xiě)makefile文件。對(duì)于較小的動(dòng)態(tài)庫(kù)程序可以不用如此,但這樣設(shè)計(jì)使程序更加合理。

編譯生成動(dòng)態(tài)連接庫(kù)后,進(jìn)而可以在程序中進(jìn)行調(diào)用。在Linux中,可以采用多種調(diào)用方式,同Windows的系統(tǒng)目錄(..system32等)一樣,可以將動(dòng)態(tài)庫(kù)文件拷貝到/lib目錄或者在/lib目錄里面建立符號(hào)連接,以便所有用戶(hù)使用。下面介紹Linux調(diào)用動(dòng)態(tài)庫(kù)經(jīng)常使用的函數(shù),但在使用動(dòng)態(tài)庫(kù)時(shí),源程序必須包含dlfcn.h頭文件,該文件定義調(diào)用動(dòng)態(tài)鏈接庫(kù)的函數(shù)的原型。

(1)_打開(kāi)動(dòng)態(tài)鏈接庫(kù):dlopen,函數(shù)原型void *dlopen (const char *filename, int flag); dlopen用于打開(kāi)指定名字(filename)的動(dòng)態(tài)鏈接庫(kù),并返回操作句柄。

(2)取函數(shù)執(zhí)行地址:dlsym,函數(shù)原型為: void *dlsym(void *handle, char *symbol); dlsym根據(jù)動(dòng)態(tài)鏈接庫(kù)操作句柄(handle)與符號(hào)(symbol),返回符號(hào)對(duì)應(yīng)的函數(shù)的執(zhí)行代碼地址。

(3)關(guān)閉動(dòng)態(tài)鏈接庫(kù):dlclose,函數(shù)原型為: int dlclose (void *handle); dlclose用于關(guān)閉指定句柄的動(dòng)態(tài)鏈接庫(kù),只有當(dāng)此動(dòng)態(tài)鏈接庫(kù)的使用計(jì)數(shù)為0時(shí),才會(huì)真正被系統(tǒng)卸載。

(4)動(dòng)態(tài)庫(kù)錯(cuò)誤函數(shù):dlerror,函數(shù)原型為: const char *dlerror(void); 當(dāng)動(dòng)態(tài)鏈接庫(kù)操作函數(shù)執(zhí)行失敗時(shí),dlerror可以返回出錯(cuò)信息,返回值為NULL時(shí)表示操作函數(shù)執(zhí)行成功。

在取到函數(shù)執(zhí)行地址后,就可以在動(dòng)態(tài)庫(kù)的使用程序里面根據(jù)動(dòng)態(tài)庫(kù)提供的函數(shù)接口聲明調(diào)用動(dòng)態(tài)庫(kù)里面的函數(shù)。在編寫(xiě)調(diào)用動(dòng)態(tài)庫(kù)的程序的makefile文件時(shí),需要加入編譯選項(xiàng)-rdynamic和-ldl。

除了采用這種方式編寫(xiě)和調(diào)用動(dòng)態(tài)庫(kù)之外,Linux操作系統(tǒng)也提供了一種更為方便的動(dòng)態(tài)庫(kù)調(diào)用方式,也方便了其它程序調(diào)用,這種方式與Windows系統(tǒng)的隱式鏈接類(lèi)似。其動(dòng)態(tài)庫(kù)命名方式為“l(fā)ib*.so.*”。在這個(gè)命名方式中,第一個(gè)*表示動(dòng)態(tài)鏈接庫(kù)的庫(kù)名,第二個(gè)*通常表示該動(dòng)態(tài)庫(kù)的版本號(hào),也可以沒(méi)有版本號(hào)。在這種調(diào)用方式中,需要維護(hù)動(dòng)態(tài)鏈接庫(kù)的配置文件/etc/ld.so.conf來(lái)讓動(dòng)態(tài)鏈接庫(kù)為系統(tǒng)所使用,通常將動(dòng)態(tài)鏈接庫(kù)所在目錄名追加到動(dòng)態(tài)鏈接庫(kù)配置文件中。如具有X window窗口系統(tǒng)發(fā)行版該文件中都具有/usr/X11R6/lib,它指向X window窗口系統(tǒng)的動(dòng)態(tài)鏈接庫(kù)所在目錄。為了使動(dòng)態(tài)鏈接庫(kù)能為系統(tǒng)所共享,還需運(yùn)行動(dòng)態(tài)鏈接庫(kù)的管理命令./sbin/ldconfig。在編譯所引用的動(dòng)態(tài)庫(kù)時(shí),可以在gcc采用 –l或-L選項(xiàng)或直接引用所需的動(dòng)態(tài)鏈接庫(kù)方式進(jìn)行編譯。在Linux里面,可以采用ldd命令來(lái)檢查程序依賴(lài)共享庫(kù)。

3、兩種系統(tǒng)動(dòng)態(tài)庫(kù)比較分析

Windows和Linux采用動(dòng)態(tài)鏈接庫(kù)技術(shù)目的是基本一致的,但由于操作系統(tǒng)的不同,他們?cè)谠S多方面還是不盡相同,下面從以下幾個(gè)方面進(jìn)行闡述。

(1)動(dòng)態(tài)庫(kù)程序編寫(xiě),在Windows系統(tǒng)下的執(zhí)行文件格式是PE格式,動(dòng)態(tài)庫(kù)需要一個(gè)DllMain函數(shù)作為初始化的人口,通常在導(dǎo)出函數(shù)的聲明時(shí)需要有_declspec(dllexport)關(guān)鍵字。Linux下的gcc編譯的執(zhí)行文件默認(rèn)是ELF格式,不需要初始化入口,亦不需要到函數(shù)做特別聲明,編寫(xiě)比較方便。

(2)動(dòng)態(tài)庫(kù)編譯,在windows系統(tǒng)下面,有方便的調(diào)試編譯環(huán)境,通常不用自己去編寫(xiě)makefile文件,但在linux下面,需要自己動(dòng)手去編寫(xiě)makefile文件,因此,必須掌握一定的makefile編寫(xiě)技巧,另外,通常Linux編譯規(guī)則相對(duì)嚴(yán)格。

(3)動(dòng)態(tài)庫(kù)調(diào)用方面,Windows和Linux對(duì)其下編制的動(dòng)態(tài)庫(kù)都可以采用顯式調(diào)用或隱式調(diào)用,但具體的調(diào)用方式也不盡相同。

(4)動(dòng)態(tài)庫(kù)輸出函數(shù)查看,在Windows中,有許多工具和軟件可以進(jìn)行查看DLL中所輸出的函數(shù),例如命令行方式的dumpbin以及VC++工具中的DEPENDS程序。在Linux系統(tǒng)中通常采用nm來(lái)查看輸出函數(shù),也可以使用ldd查看程序隱式鏈接的共享對(duì)象文件。

(5)對(duì)操作系統(tǒng)的依賴(lài),這兩種動(dòng)態(tài)庫(kù)運(yùn)行依賴(lài)于各自的操作系統(tǒng),不能跨平臺(tái)使用。因此,對(duì)于實(shí)現(xiàn)相同功能的動(dòng)態(tài)庫(kù),必須為兩種不同的操作系統(tǒng)提供不同的動(dòng)態(tài)庫(kù)版本。

4、動(dòng)態(tài)庫(kù)移植方法

如果要編制在兩個(gè)系統(tǒng)中都能使用的動(dòng)態(tài)鏈接庫(kù),通常會(huì)先選擇在Windows的VC++提供的調(diào)試環(huán)境中完成初始的開(kāi)發(fā),畢竟VC++提供的圖形化編輯和調(diào)試界面比vi和gcc方便許多。完成測(cè)試之后,再進(jìn)行動(dòng)態(tài)庫(kù)的程序移植。通常gcc默認(rèn)的編譯規(guī)則比VC++默認(rèn)的編譯規(guī)則嚴(yán)格,即使在VC++下面沒(méi)有任何警告錯(cuò)誤的程序在gcc調(diào)試中也會(huì)出現(xiàn)許多警告錯(cuò)誤,可以在gcc中采用-w選項(xiàng)關(guān)閉警告錯(cuò)誤。

下面給出程序移植需要遵循的規(guī)則以及經(jīng)驗(yàn)。

(1)盡量不要改變?cè)袆?dòng)態(tài)庫(kù)頭文件的順序。通常在C/C++語(yǔ)言中,頭文件的順序有相當(dāng)?shù)年P(guān)系。另外雖然C/C++語(yǔ)言區(qū)分大小寫(xiě),但在包含頭文件時(shí),Linux必須與頭文件的大小寫(xiě)相同,因?yàn)閑xt2文件系統(tǒng)對(duì)文件名是大小寫(xiě)敏感,否則不能正確編譯,而在Windows下面,頭文件大小寫(xiě)可以正確編譯。

(2)不同系統(tǒng)獨(dú)有的頭文件。在Windows系統(tǒng)中,通常會(huì)包括windows.h頭文件,如果調(diào)用底層的通信函數(shù),則會(huì)包含winsock..h頭文件。因此在移植到Linux系統(tǒng)時(shí),要注釋掉這些Windows系統(tǒng)獨(dú)有的頭文件以及一些windows系統(tǒng)的常量定義說(shuō)明,增加Linux都底層通信的支持的頭文件等。

(3)數(shù)據(jù)類(lèi)型。VC++具有許多獨(dú)有的數(shù)據(jù)類(lèi)型,如__int16,__int32,TRUE,SOCKET等,gcc編譯器不支持它們。通常做法是需要將windows.h和basetypes.h中對(duì)這些數(shù)據(jù)進(jìn)行定義的語(yǔ)句復(fù)制到一個(gè)頭文件中,再在Linux中包含這個(gè)頭文件。例如將套接字的類(lèi)型為SOCKET改為int。

(4)關(guān)鍵字。VC++中具有許多標(biāo)準(zhǔn)C中所沒(méi)有采用的關(guān)鍵字,如BOOL,BYTE,DWORD,__asm等,通常在為了移植方便,盡量不使用它們,如果實(shí)在無(wú)法避免可以采用#ifdef 和#endif為L(zhǎng)INUX和WINDOWS編寫(xiě)兩個(gè)版本。(5)函數(shù)原型的修改。通常如果采用標(biāo)準(zhǔn)的C/C++語(yǔ)言編寫(xiě)的動(dòng)態(tài)庫(kù),基本上不用再重新編寫(xiě)函數(shù),但對(duì)于系統(tǒng)調(diào)用函數(shù),由于兩種系統(tǒng)的區(qū)別,需要改變函數(shù)的調(diào)用方式等,如在Linux編制的網(wǎng)絡(luò)通信動(dòng)態(tài)庫(kù)中,用close()函數(shù)代替windows操作系統(tǒng)下的closesocket()函數(shù)來(lái)關(guān)閉套接字。另外在Linux下沒(méi)有文件句柄,要打開(kāi)文件可用open和fopen函數(shù),具體這兩個(gè)函數(shù)的用法可參考文獻(xiàn)[2]。

(6)makefile的編寫(xiě)。在windows下面通常由VC++編譯器來(lái)負(fù)責(zé)調(diào)試,但gcc需要自己動(dòng)手編寫(xiě)makefile文件,也可以參照VC++生成的makefile文件。對(duì)于動(dòng)態(tài)庫(kù)移植,編譯動(dòng)態(tài)庫(kù)時(shí)需要加入-shared選項(xiàng)。對(duì)于采用數(shù)學(xué)函數(shù),如冪級(jí)數(shù)的程序,在調(diào)用動(dòng)態(tài)庫(kù)是,需要加入-lm。

(7)其它一些需要注意的地方

①程序設(shè)計(jì)結(jié)構(gòu)分析,對(duì)于移植它人編寫(xiě)的動(dòng)態(tài)庫(kù)程序,程序結(jié)構(gòu)分析是必不可少的步驟,通常在動(dòng)態(tài)庫(kù)程序中,不會(huì)包含界面等操作,所以相對(duì)容易一些。②在Linux中,對(duì)文件或目錄的權(quán)限分為擁有者、群組、其它。所以在存取文件時(shí),要注意對(duì)文件是讀還是寫(xiě)操作,如果是對(duì)文件進(jìn)行寫(xiě)操作,要注意修改文件或目錄的權(quán)限,否則無(wú)法對(duì)文件進(jìn)行寫(xiě)。③指針的使用,定義一個(gè)指針只給它分配四個(gè)字節(jié)的內(nèi)存,如果要對(duì)指針?biāo)赶虻淖兞抠x值,必須用malloc函數(shù)為它分配內(nèi)存或不把它定義為指針而定義為變量即可,這點(diǎn)在linux下面比windows編譯嚴(yán)格。同樣結(jié)構(gòu)不能在函數(shù)中傳值,如果要在函數(shù)中進(jìn)行結(jié)構(gòu)傳值,必須把函數(shù)中的結(jié)構(gòu)定義為結(jié)構(gòu)指針。④路徑標(biāo)識(shí)符,在Linux下是“/”,在Windows下是“”,注意windows和Linux的對(duì)動(dòng)態(tài)庫(kù)搜索路徑的不同。⑤編程和調(diào)試技巧方面。對(duì)不同的調(diào)試環(huán)境有不同的調(diào)試技巧,在這里不多敘述。

5、結(jié)束語(yǔ)

本文系統(tǒng)分析了windows和Linux動(dòng)態(tài)庫(kù)實(shí)現(xiàn)和使用方式,從程序編寫(xiě)、編譯、調(diào)用以及對(duì)操作系統(tǒng)依賴(lài)等方面綜合分析比較了這兩種調(diào)用方式的不同之處,根據(jù)實(shí)際程序移植經(jīng)驗(yàn),給出了將VC++編制的Windows動(dòng)態(tài)庫(kù)移植到Linux下的方法以及需要注意的問(wèn)題,同時(shí)并給出了程序示例片斷,實(shí)際在程序移植過(guò)程中,由于系統(tǒng)的設(shè)計(jì)等方面,可能移植起來(lái)需要注意的方面遠(yuǎn)比上面復(fù)雜,本文通過(guò)總結(jié)歸納進(jìn)而為不同操作系統(tǒng)程序移植提供了有意的經(jīng)驗(yàn)和技巧。

標(biāo)簽: Windows系統(tǒng)
主站蜘蛛池模板: 亚洲精品美女在线观看 | 婷婷毛片 | 一级免费黄色免费片 | 亚洲精品一区二区三区蜜桃久 | 日韩欧美一区二区三区四区 | 亚洲永久精品www | 特级毛片在线 | 日韩久久午夜一级啪啪 | 精品1区 | 国产一区二区在线视频 | 亚洲综合视频 | 国产高清视频在线观看 | 成人av片在线观看 | 久久国 | 亚洲免费国产视频 | 成人a网 | 成人在线播放网站 | 人人叉人人 | 久热精品视频 | 激情91| 99精品一区二区 | 一本久久a久久精品亚洲 | 国产视频导航 | 久久99久久久久 | 久久久精品久久久 | 国产日韩精品视频 | 国产乱叫456 | 日本在线免费电影 | 97久久香蕉国产线看观看 | 中文字幕综合在线 | 欧美一区成人 | 日本一区二区三区四区 | 免费毛片网站 | 日韩视频在线一区二区 | 日韩精品在线一区 | 免费中文字幕日韩欧美 | 欧美日韩一区二区在线 | 午夜免费观看网站 | a黄视频 | 一区二区日本 | 国产视频久久久 | 91人人看 | 欧美亚洲性视频 | 伊人影院久久 | 欧美日韩在线视频一区 | 国产精品久久久 | 97久久久| 久久一道本 | 亚洲综合二区 | 国产成人综合网 | 国产精品一区二区三区四区 | 亚洲精品在线成人 | 国产欧美一区二区精品婷 | 久久久久久久久99精品 | 在线观看免费视频日韩 | 免费视频一区二区三区在线观看 | 欧美一区二区三区在线视频 | 操操网| 欧美激情小视频 | 久久精精品 | 中文字幕精品三区 | 成人午夜视频在线观看 | 本道综合精品 | 99国产精品久久久 | 中文字幕在线第一页 | 亚洲精品乱码久久久久久国产主播 | 欧美一级片在线观看 | 日本精品一区二区三区视频 | 在线视频一区二区三区 | 亚洲视频在线观看一区二区三区 | 看毛片的网站 | 国产欧美精品区一区二区三区 | 精品国产成人 | 中文二区| 亚洲三区视频 | 一区二区三区国产视频 | 天天拍拍天天干 | 久久一区国产 | 一本色道久久综合狠狠躁篇的优点 | 网站一区二区三区 | 青草福利 | 欧美一区二区三区成人 | 欧美日韩国产影院 | 欧美一级特 | 天堂av在线免费观看 | 成人三级网址 | 亚洲三区在线观看 | 小泽玛丽娅 | 亚洲一区二区三区四区 | 波多野结衣一区在线观看 | 在线亚洲一区 | 国产51人人成人人人人爽色哟哟 | 国产乱码精品一区二区三区忘忧草 | 毛片免费观看网址 | 久久久综合亚洲91久久98 | 天天看天天摸天天操 | 色综合免费 | 欧美日韩欧美日韩 | 国产福利视频在线观看 | 男人的天堂中文字幕 | 亚洲久草| 日韩一区二区在线播放 | 婷婷色在线| 91精品国产乱码久久久久久久久 | av解说在线精品 | 久久精品国产一区二区三 | 日本在线一区二区三区 | 操久久 | 懂色一区二区三区av片 | 欧美成人一区二免费视频软件 | 激情久久av一区av二区av三区 | 欧美一级二级三级视频 | 色综久久 | 亚洲 欧美 在线 一区 | 激情小视频网站 | 欧美久久久久 | 毛片免费观看视频 | 一级在线毛片 | 日韩中文字幕在线播放 | 可以免费看黄视频的网站 | 日本在线一区 | 午夜视频精品 | 午夜av电影 | 久久九| 三区免费视频 | 亚洲午夜性视频 | 91亚洲狠狠婷婷综合久久久 | 日韩 国产 在线 | 在线日韩视频 | 91精品国产一区二区三区蜜臀 | 亚洲欧洲综合av | 国产精品永久 | 中文字幕av第一页 | 国产一区二区免费 | 国产精品视频免费 | 国产精品国产精品国产专区不片 | 日日干日日爽 | 精品三级在线观看 | 欧美人牲 | 免费在线亚洲 | 欧美日韩一级二级三级 | 91免费观看在线 | 日本一区二区三区中文字幕 | 久久精品极品 | 久久久99精品免费观看 | 在线观看日韩av | 国产亚洲成av人片在线观看桃 | 羞羞视频网站在线免费观看 | 久久中文视频 | 人操人人人 | 亚洲精品中文字幕乱码无线 | 爱爱视频免费 | 亚洲天堂第一页 | 亚洲一区二区三区四区五区中文 | 中文字幕日韩在线 | 亚洲精品视频免费观看 | 综合久久综合久久 | 欧美1314 | 久久99爱视频 | 日韩欧美在线一区 | 亚洲视频在线观看免费 | 亚洲欧美精品一区 | 日韩av电影在线免费观看 | 亚洲精品成人av | 国产精品免费视频一区 | 日韩一区欧美一区 | 三级在线视频 | 国产精品毛片久久久久久久 | 台湾佬亚洲色图 | 深夜av在线 | 久久r免费视频 | 国产一级片 | 国产综合亚洲精品一区二 | 国产欧美日韩在线 | 久久久高清| 亚洲精品免费视频 | 亚洲成a人| 欧美激情一区二区三区在线视频 | 亚洲高清免费视频 | 手机看片369 | 亚洲欧美中文字幕 | 在线视频亚洲 | 欧美一区二区三区免费 | 欧美午夜影院 | 成人 在线 | 天天插天天射天天干 | 久草日本 | 一区二区福利 | 欧美一区久久 | 黄色在线免费观看 | 日韩一级免费在线观看 | 最新中文字幕在线 | 日韩视频在线观看一区 | 国产精品久久久久久婷婷天堂 | 91精品久久久久久久久久入口 | 久久国产视频一区二区 | 免费av一区二区三区 | 亚洲精品一区二区三区中文字幕 | 在线不卡一区 | 中文字幕在线观看视频一区 | 亚洲综合一区二区 | 91亚洲国产 | 日韩精品视频在线观看免费 | www.久久久久久久 | 亚洲日韩欧美一区二区在线 | 中文字幕久久精品 | 日本不卡一区二区 | 中文字幕精品一区久久久久 | 午夜资源 | 国产一区二区三区免费观看 | 国产亚洲精品精品国产亚洲综合 | 欧美成人一区二区三区片免费 | 国产91综合一区在线观看 | www久久久| 亚洲av一级毛片 | 欧美精品一区二区三区在线四季 | 欧美精品一区三区 | 欧美日韩在线一区二区 | 精品香蕉一区二区三区 | 亚洲一区二区视频在线播放 | 老司机在线精品视频 | 亚洲 欧美 日韩在线 | 午夜午夜精品一区二区三区文 | 欧美日韩精品一区二区三区蜜桃 | 国产精品国产精品国产专区不蜜 | 成人亚洲一区二区 | 成人在线视频免费 | www中文字幕| 羞羞视频免费观看 | 9191在线| 日韩精品视频久久 | 成人免费视频网址 | 国产69精品99久久久久久宅男 | 你懂的免费在线观看 | 国产精品高清在线 | 91看片在线观看 | 亚洲人人 | 国产一区二区三区四区三区 | 亚洲av毛片一区二二区三三区 | 中文字幕一二三 | 日韩精品免费在线观看 | 日韩成人在线视频 | 免费一区二区 | 久久精品国产清自在天天线 | www..99热 | 国产亚洲欧美一区二区三区 | 国产精品2019 | 久久国产视频一区二区 | 国产一区二区在线观看视频 | 中文字幕精品一区 | 一区二区三区在线 | 欧 | www午夜 | 色婷婷av久久久久久久 | 不卡一区二区三区四区 | 天天摸天天看 | 一区二区精品在线观看 | 羞羞视频网站在线看 | 岛国av在线 | 欧美在线观看一区 | 91精产国品一二三区在线观看 | 在线免费看a| 色先锋av资源中文字幕 | 精品亚洲成人 | 日本黄色一级片视频 | 六月综合激情 | 久久久久国产精品一区二区三区 | 一区二区三区免费在线观看 | 亚洲国产精品一区二区久久 | www.久久久 | 久久精品国产亚卅av嘿嘿 | 天天干干 | 青草视频在线免费观看 | 在线视频 亚洲 | 91在线观看网站 | 国产精品日日夜夜 | 99久久婷婷国产综合亚洲 | 一区二区中文字幕 | 国产91亚洲 | 欧美日韩国产精品一区二区亚洲 | 久久久免费视频播放 | 黄色小视频在线观看 | 在线婷婷 | 999视频网| 国产一区二区在线播放 | 特一级黄色片 | www.9191 | 在线亚洲一区二区 | 青青久草在线 | 欧美精品在线一区二区三区 | 成年人在线观看视频 | 69性欧美高清影院 | 国产国拍亚洲精品av | 日韩一区二区中文字幕 | 一区二区日本 | 久操视频在线观看 | 午夜国产羞羞视频免费网站 | 黄色片在线观看视频 | 操片| 欧美精品一区二区蜜臀亚洲 | 久久精品高清视频 | 色欧美片视频在线观看 | www一区| 久久亚洲综合 | 国产一区二区三区在线视频 | 免费午夜剧场 | 欧美日韩成人在线 | 老牛影视av一区二区在线观看 | 国产羞羞视频在线观看 | 色婷婷激情| 国产亚洲欧美一区二区 | 亚洲欧洲一区 | 国产精品乱码一区二区三区 | 亚洲伦理在线 | 91电影在线观看 | 蜜桃精品久久久久久久免费影院 | 欧美日韩成人一区 | 国产成人av在线播放 | 国产日韩一级片 | 亚洲不卡 | 国产一区二区三区av在线 | 午夜精品久久久久久久久久久久久 | 欧美日韩第一页 | 国产中文在线 | 成人在线h | 日韩一区二区三区在线观看 | 日韩欧美在线看 | 日韩午夜在线 | 久久av在线 | 91精品国产综合久久久亚洲 | 日本一区二区电影 | 亚洲一区中文字幕在线观看 | 亚洲成人免费在线观看 | 久久精品久久久久电影 | 国产精品乱码一区二区三区 | 性视频网站免费 | 中文字幕日韩欧美 | 日韩欧美在线一区二区 | 97久久久 | 欧美在线视频网站 | 国产精品久久久精品 | 日产欧产va高清 | 69日影院| 国产日韩精品视频 | 午夜视频在线观看网站 | 成人片网址 | 一区二区三区国产视频 | 成人在线观看免费视频 | 色婷婷综合久久久中文字幕 | 亚洲女人天堂成人av在线 | 午夜老湿影院 | 日韩一区二区观看 | 久久久久国产精品免费免费搜索 | 久久久久久久久一区二区三区 | 在线看h | 国产午夜一区二区三区 | 久久精品| 国产情侣免费视频 | 黄色午夜 | 精品一区二区久久久久久久网站 | 7799精品视频天天看 | 成人久久久久久久 | 色悠久久久 | 免费看的av| 欧美日韩中文字幕 | 天天拍天天操 | 精品视频一区二区在线观看 | 欧美日韩高清在线一区 | 久久亚洲精品国产一区 | 看一级毛片视频 | a视频在线观看 | 91在线视频在线观看 | 九九久久久 | 久久国 | 一区二区视屏 | 日本美女一区二区 | 成人在线手机版视频 | 国产精品久久久久久久久久99 | 欧美激情国产日韩精品一区18 | 一本大道久久a久久精二百 亚洲欧美高清 | 欧美一区二区大片 | 国产视频一区二区三区四区 | 91免费在线| 日韩中文字幕欧美 | 狠狠操夜夜操 | 精品久久久久久久久久久久久久 | 毛片入口 | 日本在线观看 | 国产一级淫免费播放m | 国产一级黄片毛片 | 成人激情免费视频 | 国产亚洲精品美女久久久久久久久久 | 不卡一区二区三区四区 | 久久亚洲二区 | 国产精品久久久久一区二区三区 | 久久久网 | 天天干天天操天天爽 | 国产日韩欧美一区二区在线观看 | 日韩高清中文字幕 | 日本久久久久久久久久久久 | 日韩久久综合 | 精品一区二区三区免费毛片爱 | 91在线播放视频 | 日韩精品一区二区三区中文在线 | 91视频三区| 韩日视频在线观看 | 黄色片免费在线 | 亚洲精品久久久久久下一站 | 国产日韩亚洲欧美 | 国产一区二区三区久久久久久久久 | 在线观看欧美一区 | 久热久爱 | 毛片在线视频 | 日韩欧美视频一区 | 欧美精品91 | 精品久久av | 久久精品一级 | 精品国精品国产自在久不卡 | 91在线观看视频 | 国产精品久久久久久久电影 | 黄色骚片 | 在线视频日韩 | 精品视频在线观看 | 亚洲免费在线看 | a级黄色在线观看 | 国产欧美日本 | 国产成人精品一区二 | 日韩一区二区三区精品 | 久久一日本道色综合久久 | 天堂中文资源在线 | 亚洲精品乱码久久久久膏 | 精品中文字幕一区二区三区 | 成av人在线| 久久草草影视免费网 | 亚洲成av人影片在线观看 | 精品国产成人 | 中文字幕在线观看一区二区三区 | 国产精品美女久久久久久久网站 | 一级片免费视频 | 日韩精品一区二区三区在线 | 日本狠狠干 | 黄色国产| 涩涩操| 国产精品久久久久婷婷二区次 | 91久久久www播放日本观看 | 日韩精品视频免费专区在线播放 | 国产欧美综合在线 | 精品视频在线观看一区二区 | 日韩伦理一区二区 | 天天拍天天干天天操 | 色婷婷久久久久swag精品 | 久久精品亚洲精品 | 人人99| 超碰av人人| 精品久久久久久久久久 | 免费国产视频在线观看 | 国产男女视频在线观看 | 亚洲国产成人久久综合一区,久久久国产99 | 黄色电影天堂 | 日本aaaa | 日本videos18高清hd下 | 美女福利视频网站 | 操老逼| 欧美视频精品 | 国产视频一二区 | 成人免费视频 | 亚洲精品亚洲人成人网 | 亚洲精品电影网在线观看 | 性色av一区二区三区 | 精品国产一区二区三区高潮视 | 亚洲日本乱码一区两区在线观看 | 日韩中文字幕在线播放 | 看片久久 | 一级国产视频 | 欧美性一区二区三区 | 韩国三级中文字幕hd久久精品 | 99精品一区二区 | 精品亚洲一区二区三区 | 91看片 | 精品一区二区三区久久久 | 欧洲美女性开放视频 | 久久久精品一区 | 久久久久久电影 | 欧美成人精品一区二区男人看 | 亚洲一区成人 | 一区二区三区免费视频网站 | 高清视频一区 | 91精品国产一区二区 | 欧美精品一区二区三区蜜桃视频 | 女人爽到高潮aaaa电影 | 91精品国产91久久久久久吃药 | 日韩日韩日韩日韩日韩日韩 | 午夜免费视频网站 | 国产aⅴ | 亚洲精品一二三区 | 性人久久久 | 欧美一区二区三区视频 | 日韩一区二区在线观看 | 久久免费视频网 | 久久精品小视频 | 日韩成人精品视频 | 在线播放高清视频www | 国产免费一区 | 日韩和的一区二在线 | 国产欧美精品一区二区三区 | 中文字幕在线资源 | 欧美日韩国产在线 | 欧美aⅴ | 欧美日韩亚洲二区 | 精品久久久久久久久久久 | 国产精品视频久久久 | 日韩中文一区 | 国产在线中文字幕 | 超碰在线播 | 龙珠z在线观看 | 国产精品一二三区 | 天天爱爱网| 日本一区视频在线观看 | 天堂精品一区二区三区 | 精品自拍视频 | 亚洲精品无 | 人人干视频 | 午夜成人免费影院 | 国产久 | 99久久精品国产一区二区三区 | 天天干天天摸 | 日韩精品一区二区三区老鸭窝 | 手机在线观看av | 一区二区三区国产视频 | 欧美日韩国产一区二区在线观看 | 国产成人综合网 | 久久精品毛片 | 久久六月 | 黄色一级免费大片 | 欧美精品三区 | 涩涩视频在线看 | 免费黄色片在线观看 | 午夜资源 | 午夜资源 | 成人影院一区二区三区 | 亚洲综合无码一区二区 | 欧美日韩国产一区二区三区 | 国产一区二区在线电影 | 色婷婷久久久swag精品 | 久久天堂网 | 在线观看亚洲 | 日日搞夜夜操 | 亚洲一区二区三区四区五区中文 | 成人免费毛片嘿嘿连载视频 | 亚洲精品91| 亚洲精品在线视频 | 中文av在线免费观看 | 久久永久视频 | 亚洲男人天堂网 | 色婷婷av一区二区三区软件 | 欧美一区二区三区视频在线观看 | 成年人免费看 | 日韩中文视频 | 久久精品 | 成人免费视频观看视频 | 欧洲一级视频 | av国产精品| 一本色道精品久久一区二区三区 | 国产高清不卡在线 | 欧美久久久久久 | 久久久999国产 | 欧美成视频 | 国产a√| 涩久久 | 亚洲国产一区二 | 亚洲综合视频 | 天天综合网网欲色 | 最新免费视频 | 亚洲第一色片 | 青青草视频在线免费观看 | 99re在线观看视频 | 男女羞羞视频网站18 | 国产在线一二 | 欧美伦理电影一区二区 | 成人精品| 一区二区在线视频 | 日韩激情综合 | 国产视频精品在线观看 | 成人在线视频免费观看 | 国产精品一区二区三区在线播放 | 亚洲欧美日韩在线一区 | 人人九九精 | 人干人人 | 日韩免费一区 | 亚洲一区二区视频在线观看 | 成人精品一区二区 | 亚洲国产高清在线 | www久久精品 | 久久久中文字幕 | 91精品国产一区二区三区蜜臀 | 亚洲精品一区二区在线观看 | 久久中文字幕一区二区 | 91干在线观看 | 久久精品a一级国产免视看成人 | 成人久久18免费 | 日韩一级av毛片 | 一区二区三区国产 | 在线看亚洲 | 成人一区二区在线观看 | 国产高清一级毛片在线不卡 | 免费观看的黄色 | 欧美日韩视频在线播放 | 青娱乐国产精品视频 | 久久精品久久久久久 | 久久成人国产 | 亚洲精品视频在线观看免费 | 久久亚洲天堂 | 欧美一区二区三区视频 | 在线无码 | 黄色网页大全 | 麻豆亚洲 |