色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Wine原理介紹和開(kāi)發(fā)教程

深度操作系統(tǒng) ? 來(lái)源:深度操作系統(tǒng) ? 2024-12-31 10:06 ? 次閱讀

說(shuō)起 Wine,稍微資深一點(diǎn)的 Linux 用戶(hù)應(yīng)該都聽(tīng)過(guò),但是真要說(shuō)起 Wine 到底是怎么回事,可能大多數(shù)人不見(jiàn)得說(shuō)得清。這篇文章會(huì)簡(jiǎn)單地介紹 Wine 的工作原理,以及如何開(kāi)始 Wine 的開(kāi)發(fā)。所以如果您屬于以下三類(lèi)讀者之一:

想?yún)⑴c Wine 開(kāi)發(fā),但是不知如何開(kāi)始的。

僅僅想大致了解 Wine 是如何工作的。

只是想能夠愉快的用上最新版本 Wine 的。

希望在看完本文后,能夠有一些收獲。

Part 1 Wine 是什么

Wine 是 "Wine Is Not an Emulator" 的遞歸縮寫(xiě),如同 "GNU" 一樣(GNU's Not Unix),字面意思就是 Wine 不是一個(gè)模擬器。這里的模擬器主要是指 Wine 并不是一個(gè)虛擬機(jī),而是一個(gè) Windows API 實(shí)現(xiàn)兼容層。這么說(shuō)可能不太好理解,大家可以把 Windows 應(yīng)用程序類(lèi)比成 Android 應(yīng)用程序,而 Wine 的角色就和 Android 很像了,將操作系統(tǒng)提供的各種功能封裝成 API,并讓?xiě)?yīng)用程序在隔離的環(huán)境內(nèi)運(yùn)行。至于 API 長(zhǎng)成啥樣,隔離的力度如何,這些都是實(shí)現(xiàn)相關(guān)的,和本質(zhì)并不沖突。另一方面,Wine 其實(shí)又是一個(gè)模擬器,不過(guò)模擬的對(duì)象不是硬件 CPU,而是 Windows 的行為。

Part 2 Wine 原理介紹

本節(jié)內(nèi)容相對(duì)來(lái)說(shuō)稍顯基礎(chǔ)和單一啦,并且閱讀時(shí)最好對(duì)操作系統(tǒng)有一定程度的了解哦。如果只是想編譯、運(yùn)行,對(duì)原理不敢興趣的同學(xué),可以跳過(guò),不影響后面的閱讀。

Wine 的目的是運(yùn)行 Windows 上的可執(zhí)行程序(PE,portable executable)。我們知道,可執(zhí)行程序的本質(zhì)其實(shí)就是按照某一規(guī)則排列的機(jī)器碼,而機(jī)器碼是指令集相關(guān)的。得益于常見(jiàn)的 PC 機(jī)一般是 x86/x64 的,因此 Windows 應(yīng)用程序從指令集的角度看,是完全可以在 x86/x64 的 Linux 機(jī)器上直接運(yùn)行,而不需要硬件層模擬的。

但是為了能夠直接加載運(yùn)行 PE 文件,需要滿足一些 ABI 兼容。最基本的,Windows PE 程序會(huì)假定自己被加載到地址 0x400000 處,因此 Wine 實(shí)現(xiàn)自己的 loader 時(shí),需要保證將 PE 鏡像加載到同樣的位置。對(duì)于靜態(tài)鏈接的程序,需要做的事情可能不是太多,但是對(duì)于動(dòng)態(tài)鏈接的程序,Wine 需要模仿 Windows loader 的行為,加載依賴(lài)的庫(kù),并進(jìn)行相應(yīng)的重定位工作。

為了最大程度上減少對(duì)二進(jìn)制層面的依賴(lài),Wine 決定實(shí)現(xiàn)至少 GDI32,KERNEL32,USER32 三個(gè)動(dòng)態(tài)庫(kù),因?yàn)槠渌麕?kù)都是建立在這三個(gè)庫(kù)的基礎(chǔ)之上的。所以理論上來(lái)說(shuō),除此之外的其他動(dòng)態(tài)庫(kù)是可以直接使用 Windows 上面現(xiàn)有的庫(kù),但由于各種原因,Wine 還是傾向于盡量實(shí)現(xiàn)所有的 API。我們把 Wine 自己實(shí)現(xiàn)的 API 庫(kù)稱(chēng)作 builtin,把 Windows 上現(xiàn)成的庫(kù)稱(chēng)作 native。當(dāng) Wine 在加載 builtin 動(dòng)態(tài)庫(kù)的同時(shí),還會(huì)在內(nèi)存中建立 PE header,用來(lái)模仿 Windows 上的內(nèi)存布局。更加詳細(xì)的實(shí)現(xiàn),有機(jī)會(huì)可以寫(xiě)一篇 Wine loader 相關(guān)的文章來(lái)介紹 Wine 本身、PE 程序和動(dòng)態(tài)庫(kù)是如何被加載的。

除開(kāi) loader 的功能外,Wine 還需要解決進(jìn)程間通信(IPC)的問(wèn)題。Wine 的實(shí)現(xiàn)方式是將所有跨進(jìn)程的對(duì)象和機(jī)制,比如 GDI 對(duì)象,比如信號(hào)量,全部實(shí)現(xiàn)在 Wine server 中。同時(shí) Wine 允許系統(tǒng)運(yùn)行多個(gè) Wine server 的實(shí)例。這樣存在于同一個(gè) Wine server 中的對(duì)象自然是可以相互通信,好像在同一個(gè)空間內(nèi);而不同 Wine server 下的對(duì)象,是相互隔離的,這種架構(gòu)使得不同容器之間的程序相互沒(méi)有影響。Wine server 的具體實(shí)現(xiàn)是通過(guò) unix socket,實(shí)現(xiàn)了一套 IPC 機(jī)制,完成和 API 層的交互。

有了以上這些基礎(chǔ),Wine 實(shí)現(xiàn)起各種功能就可以按部就班了,只需理解 Windows 下 API 的行為和含義,然后再重新實(shí)現(xiàn)一遍就行了。聽(tīng)起來(lái)雖然簡(jiǎn)單,實(shí)際難度不小,特別是一些未公開(kāi)的行為,必須對(duì)整體有相當(dāng)?shù)牧私夂蟛拍芟率帧I踔烈恍┎町悾热?UI 相關(guān)的內(nèi)容,由于 Windows 窗口系統(tǒng)和 X 在設(shè)計(jì)哲學(xué)上的不同,實(shí)現(xiàn)上需要有所舍取。目前 Wine 支持的平臺(tái)不僅包括 Linux,還包括 BSD、Mac OS X 和 Android。

Part 3 環(huán)境

下面的開(kāi)發(fā)環(huán)境都以 deepin 為例進(jìn)行說(shuō)明。

首先獲取代碼。Wine 官方代碼倉(cāng)庫(kù)地址為

git://source.winehq.org/git/wine.git

如果你想方便打包給別人使用,又不太想折騰打包的一些細(xì)節(jié),可以用各個(gè)發(fā)行版自己維護(hù)的 Wine。比如 Debian 維護(hù)的 Wine 倉(cāng)庫(kù)地址為

https://salsa.debian.org/wine-team/wine.git

這里以官方的 Wine 為例:

git clone git://source.winehq.org/git/wine.git

然后安裝開(kāi)發(fā)的依賴(lài)。為了簡(jiǎn)單起見(jiàn),我們只編譯 32 位的 Wine,因?yàn)?64 位的 Wine 只支持 64 位的 PE 程序,而目前 Windows 上仍有大量的程序只提供了 32 位的版本。

    sudo apt install
        gcc-multilib
        flex
        bison
        libx11-dev:i386
        libfreetype6-dev:i386
        libxcursor-dev:i386
        libxi-dev:i386
        libxshmfence-dev:i386
        libxxf86vm-dev:i386
        libxrandr-dev:i386
        libxfixes-dev:i386
        libxinerama-dev:i386
        libxcomposite-dev:i386
        libglu1-mesa-dev:i386
        libosmesa6-dev:i386
        ocl-icd-opencl-dev:i386
        libpcap-dev:i386
        libdbus-1-dev:i386
        libgnutls28-dev:i386
        libncurses-dev:i386
        libsane-dev:i386
        libv4l-dev:i386
        libgphoto2-dev:i386
        liblcms2-dev:i386
        libpulse-dev:i386
        libgstreamer-plugins-base1.0-dev:i386
        libudev-dev:i386
        libcapi20-dev:i386
        libcups2-dev:i386
        libfontconfig1-dev:i386
        libgsm1-dev:i386
        libkrb5-dev:i386
        libtiff-dev:i386
        libmpg123-dev:i386
        libopenal-dev:i386
        libldap2-dev:i386
        libxrandr-dev:i386
        libxml2-dev:i386
        libxslt1-dev:i386
        libjpeg62-turbo-dev:i386
        libusb-1.0-0-dev:i386
        gettext
        libsdl2-dev:i386
        libvulkan-dev:i386
接著運(yùn)行腳本:
./configure --with-gnutls --without-hal --without-oss

根據(jù)不同的 Wine 版本,此時(shí)可能會(huì)提示不同的 feature 支持情況。我們可以根據(jù)需求,對(duì)上面的依賴(lài)庫(kù)和傳入的參數(shù)進(jìn)行調(diào)整,具體可以查看 configure.ac 的內(nèi)容。

Wine 的源碼比較大,編譯有些耗時(shí),可以根據(jù) CPU 情況增加并行參數(shù),比如 make -j8,進(jìn)行編譯。

編譯完成后,運(yùn)行:

./wine --version
可以查看版本號(hào)。如果想安裝到系統(tǒng),可以運(yùn)行:
sudo make install
但是注意,安裝后可能會(huì)修改一些文件的默認(rèn)打開(kāi)方式。

Part 4 使用

運(yùn)行:

./wine winecfg
可以對(duì)默認(rèn)容器進(jìn)行設(shè)置,默認(rèn)的容器位于 HOME 目錄下的 .wine,環(huán)境變量 WINEPREFIX 用來(lái)修改當(dāng)前的容器路徑。比如有一個(gè)叫 demo.exe 的可執(zhí)行文件,我們想測(cè)試能否正常運(yùn)行,可以運(yùn)行。
WINEPREFIX=~/.demo_exe ./wine demo.exe
HOME 目錄下的`demo_exe`就會(huì)作為其容器目錄。

Part 5 開(kāi)發(fā)

編譯過(guò)后的 Wine 源碼目錄結(jié)構(gòu)如下:

    ├── aclocal.m4
    ├── ANNOUNCE
    ├── AUTHORS
    ├── config.log
    ├── config.status
    ├── configure
    ├── configure.ac
    ├── COPYING.LIB
    ├── dlls
    ├── documentation
    ├── fonts
    ├── include
    ├── libs
    ├── LICENSE
    ├── LICENSE.OLD
    ├── loader
    ├── MAINTAINERS
    ├── Makefile
    ├── Makefile.in
    ├── po
    ├── programs
    ├── README
    ├── server
    ├── tools
    ├── VERSION
    └── wine -> tools/winewrapper

目錄 dlls 按照模塊存放了所有 API 的實(shí)現(xiàn)。

目錄 loader 是和 Wine 啟動(dòng)、加載相關(guān)的代碼。

目錄 programs 存放了外部程序的代碼,比如注冊(cè)表管理工具 regedit 。

目錄 server 顧名思義,是 Wine server 的實(shí)現(xiàn)。

接下來(lái)需要做的就和普通開(kāi)發(fā)沒(méi)什么兩樣了。比如說(shuō)我們發(fā)現(xiàn)某個(gè)應(yīng)用存在字體相關(guān)的 BUG,可以首先根據(jù)經(jīng)驗(yàn)判斷在 Windows 上,該程序是如何實(shí)現(xiàn)的,然后查看對(duì)應(yīng)的實(shí)現(xiàn)。例如 GDI 相關(guān)的字體實(shí)現(xiàn),位于 dlls/gdi32/font.c 和 dlls/gdi32/freetype.c 。修改完代碼后,在所在模塊的目錄,比如上例就是 dlls/gdi32 下重新 make 就可以快速驗(yàn)證了。

對(duì)于復(fù)雜的問(wèn)題,不太好直接定位的,可以通過(guò)輸出日志的方式來(lái)調(diào)試,環(huán)境變量 WINEDEBUG 指定了需要輸出的日志。

有時(shí)我們可能需要把復(fù)雜的情況簡(jiǎn)單化,這時(shí)候難免會(huì)寫(xiě)一些小的 demo 程序來(lái)重現(xiàn)問(wèn)題。如果不想到 Windows 上面編譯,可以使用 mingw 直接在 deepin 下編譯出 exe 文件。方法很簡(jiǎn)單,首先安裝 mingw:

sudo apt install mingw-w64
接著正常利用 Windows API 實(shí)現(xiàn)程序,最后利用 mingw 編譯工具鏈生成文件即可,Makefile 示例:
hello.exe: hello.c
    i686-w64-mingw32-g++ -o hello.exe hello.c -DUNICODE -D_UNICODE -municode -lgdi32

上面的例子,定義了 UNICODE,所以使用的 UNICODE 版本的 API,入口函數(shù)為 wmain,-lgdi32 表示需要鏈接庫(kù) gdi32 。生成出來(lái)的 hello.exe,可以同時(shí)在 Windows 和 deepin 下運(yùn)行。

Part 6 其他

本文介紹的內(nèi)容只涉及到 Wine 開(kāi)發(fā)的基礎(chǔ),Wine 本身還有很多東西值得去探索。比如 Wine 是如何使用 driver 機(jī)制讓接口和實(shí)現(xiàn)分離的,再比如 Wine 是如何使用純 C 實(shí)現(xiàn) COM 機(jī)制的。雖然 Wine 的出現(xiàn)已經(jīng)有一些年頭了,但是目前的開(kāi)發(fā)仍然比較活躍,感興趣的同學(xué)可以加入進(jìn)來(lái),為 Linux 生態(tài)添磚加瓦,讓大家能用到更多的優(yōu)質(zhì)應(yīng)用,也算是曲線救國(guó)了。

Part 7 更新

7.1 新的 WOW64

上面編譯的例子中,我們只編譯了 32 位的 Wine,忽略了編譯 64 位 Wine 的細(xì)節(jié)。從 Wine 8 開(kāi)始,Wine 開(kāi)始了一個(gè)稱(chēng)為 PE Convertion 的開(kāi)發(fā)過(guò)程,重新實(shí)現(xiàn)了 WOW64 的機(jī)制。此模式下只需要編譯出一份 Wine,既可以運(yùn)行 32 位程序,也能運(yùn)行 64 位程序。同時(shí)也不再依賴(lài) 32 位的運(yùn)行時(shí)庫(kù)。雖然此模式還被認(rèn)為處于實(shí)驗(yàn)階段,但是從 deepin-wine8 開(kāi)始,我們已經(jīng)默認(rèn)使用此方式。

編譯新的 WOW64 方式的 Wine,步驟如下:

Wine 官方的源碼地址已經(jīng)更改,在https://gitlab.winehq.org/wine/wine.git下載源代碼。

依舊需要安裝編譯時(shí)依賴(lài)的開(kāi)發(fā)庫(kù),不同在于我們這次只需要安裝 amd64 的版本,在安裝開(kāi)發(fā)庫(kù)時(shí)不再需要指定 :i386 后綴。此外 mingw-w64 在此模式下成為必須項(xiàng)。

在 Wine 源碼目錄的同級(jí)目錄下新建 build-wine 目錄,并進(jìn)入此目錄。

運(yùn)行 ../wine/configure --prefix=/opt/wine-newwow64 --enable-archs=i386,x86_64。這一步如果有任何提示,比如缺少編譯期依賴(lài),可以在安裝后再次運(yùn)行。

make -j8,進(jìn)行編譯。

sudo make install 安裝,Wine 會(huì)安裝在第 4 步通過(guò) prefix 指定的位置,即 /opt/wine-newwow64 。當(dāng)然也可以選擇不安裝,直接在編譯目錄下運(yùn)行。

7.2 其他架構(gòu)

在關(guān)于原理一節(jié)的描述中我們提到過(guò),x86/x64 機(jī)器的 Linux 系統(tǒng)可以通過(guò) Wine 運(yùn)行 x86/x64 的 PE 程序。實(shí)際上如今通過(guò) DBT(dynamic binary translation)技術(shù),在 ARM 及其他架構(gòu)上已經(jīng)有了運(yùn)行 Wine 的方案。感興趣的讀者可以查看Box64項(xiàng)目。

11月份,微信在 deepin 商店上架了Linux原生版本,功能與 Windows、MacOS 相差無(wú)幾。Wine 版本的微信終于可以"功成身退"了,我們也期待今后有更多軟件推出原生版本,讓 Wine 早點(diǎn)完成"歷史使命"。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11312

    瀏覽量

    209694
  • WINDOWS
    +關(guān)注

    關(guān)注

    4

    文章

    3551

    瀏覽量

    88794
  • 應(yīng)用程序
    +關(guān)注

    關(guān)注

    37

    文章

    3277

    瀏覽量

    57734
  • 模擬器
    +關(guān)注

    關(guān)注

    2

    文章

    877

    瀏覽量

    43249

原文標(biāo)題:想開(kāi)啟 Wine 開(kāi)發(fā)?看這篇就夠了!

文章出處:【微信號(hào):linux_deepin,微信公眾號(hào):深度操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Wine運(yùn)行exe軟件的教程

    Linux有很多的軟件,但是在桌面操作軟件生態(tài),還是不如Windows,有些軟件只有Windows版本沒(méi)有對(duì)應(yīng)的Linux版本,如果我們想在Linux系統(tǒng)上運(yùn)行exe程序,就需要借助一些第三方的軟件,下面我就介紹一下用Wine運(yùn)行exe軟件的教程.
    發(fā)表于 10-10 09:40 ?1.6w次閱讀

    linux下的快捷鍵全面介紹

    輸入剩下的名字。使用tab鍵補(bǔ)全還支持對(duì)于擴(kuò)展名的識(shí)別,比如您的文件夾下有”TH2AD_CHS.exe文件和 TH2AD_CHS.ini文件,當(dāng)您輸入”wine TH”再按下tab后,會(huì)補(bǔ)全成
    發(fā)表于 07-09 08:44

    Hi3861 開(kāi)發(fā)+編譯+燒錄

    燒錄->wine+HiBurn(感謝HonestQiao )開(kāi)發(fā):燒錄:2、開(kāi)發(fā)流程首先開(kāi)發(fā)環(huán)境安裝1.安裝Visual Studio Codehttps
    發(fā)表于 11-12 22:20

    介紹基于協(xié)議棧外設(shè)的開(kāi)發(fā)

    本節(jié)介紹基于芯科協(xié)議棧設(shè)備的開(kāi)發(fā)本節(jié)介紹基于芯科協(xié)議棧外設(shè)的開(kāi)發(fā)
    發(fā)表于 01-07 08:26

    intel edison 開(kāi)發(fā)板的開(kāi)發(fā)平臺(tái)介紹

    intel edison 開(kāi)發(fā)板的開(kāi)發(fā)平臺(tái)介紹,以及板載資源的介紹,重量級(jí)
    發(fā)表于 10-30 16:12 ?15次下載

    android框架與應(yīng)用開(kāi)發(fā)介紹

    android框架與應(yīng)用開(kāi)發(fā)介紹
    發(fā)表于 10-24 09:35 ?7次下載
    android框架與應(yīng)用<b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>介紹</b>

    linux下wine的使用

    Wine 仍在發(fā)展階段,僅能執(zhí)行少部份的 Windows 軟體,大部份的軟體仍然無(wú)法正常執(zhí)行。 Wine的官方站點(diǎn)是http://www.winehq.com/,雖然你可以在它的官方站點(diǎn)下載源代碼
    發(fā)表于 11-07 15:37 ?14次下載

    異亮科技發(fā)布新品AIR VALLEY WINE智能凈化落地?zé)?/a>

    異亮科技日前宣布發(fā)布新品 AIR VALLEY WINE智能凈化落地?zé)簦摦a(chǎn)品將照明與凈化相結(jié)合,顛覆性的提出凈化與照明新概念。AIR VALLEY WINE采用紅酒杯流線型設(shè)計(jì)理念,機(jī)身配備了一鍵式操控,既是開(kāi)關(guān)鍵又擁有調(diào)節(jié)風(fēng)速等功能,設(shè)計(jì)簡(jiǎn)潔干凈。
    的頭像 發(fā)表于 05-21 07:19 ?3006次閱讀

    JEEWeb的開(kāi)發(fā)相關(guān)技術(shù)介紹

    本文檔的主要內(nèi)容詳細(xì)介紹的是JEE Web的開(kāi)發(fā)相關(guān)技術(shù)介紹
    發(fā)表于 02-15 17:19 ?4次下載
    JEEWeb的<b class='flag-5'>開(kāi)發(fā)</b>相關(guān)技術(shù)<b class='flag-5'>介紹</b>

    盤(pán)點(diǎn)一下這些可以通過(guò)Wine在Linux上玩的游戲

    上古卷軸 5 已經(jīng)不是款新游戲了,但它的 mod 社區(qū)依舊活躍。如果你的 Linux 系統(tǒng)有足夠資源的話,你可以很輕松地加上很多很多 mod。需要記住的是 Wine 運(yùn)行時(shí)要比游戲占用更多的系統(tǒng)資源,所以使用 mod 時(shí)也要考慮這一點(diǎn)。
    的頭像 發(fā)表于 04-16 12:41 ?7465次閱讀

    Wine 5.4版本更新更多新功能

    IT之家了解到,WineWine Is Not an Emulator)是一個(gè)能夠在多種 POSIX-compliant 操作系統(tǒng)(包括 Linux,Mac OSX 及 BSD 等)上運(yùn)行 Windows 應(yīng)用的兼容層。
    的頭像 發(fā)表于 03-14 09:33 ?2357次閱讀

    Wine中將提供Windows應(yīng)用程序與USB更好支持

    Wine 中運(yùn)行的 Windows 應(yīng)用程序直接與 USB 設(shè)備交互將會(huì)有更好的支持。Wine 項(xiàng)目的提交記錄顯示,最新合并的 WineUSB 初始部分將成為 Wine USB 驅(qū)動(dòng),類(lèi)似于微軟的 WinUSB。
    的頭像 發(fā)表于 04-19 09:52 ?2559次閱讀
    <b class='flag-5'>Wine</b>中將提供Windows應(yīng)用程序與USB更好支持

     Wine更新:支持 Linux 運(yùn)行 Windows 應(yīng)用,PE 格式核心模塊

    1月19日消息 外媒 Windows Central 報(bào)道,Wine 最近收到了更新,改善了在 Linux 系統(tǒng)上運(yùn)行 Windows 應(yīng)用的體驗(yàn)。該更新以 Win3 6.0 的形式出現(xiàn),根據(jù)其完整
    的頭像 發(fā)表于 01-19 11:49 ?2427次閱讀

    Python語(yǔ)言介紹開(kāi)發(fā)環(huán)境

    Python語(yǔ)言介紹開(kāi)發(fā)環(huán)境說(shuō)明。
    發(fā)表于 04-26 09:51 ?9次下載

    如何在Ubuntu上安裝最新版本的Wine

    新的 Wine 8.0 版本比以往任何時(shí)候都更好地支持在 Linux 發(fā)行版(如 Ubuntu)上運(yùn)行 Windows 應(yīng)用程序。
    的頭像 發(fā)表于 02-01 10:01 ?6660次閱讀
    主站蜘蛛池模板: 国产色婷婷亚洲99精品| 开心成人社区| 天天摸夜添狠狠添高| 国产成人精品久久久久婷婷| 午夜在线视频国产极品片 | 在线观看视频国产| 欧美18在线| 国产高潮国产高潮久久久久久| 亚洲精品色情婷婷在线播放| 久久综合色视频| 成年人在线免费观看视频网站| 无人区日本电影在线观看高清| 精品久久久久久电影网| 99久热这里精品免费| 午夜国产高清精品一区免费| 久久99AV无色码人妻蜜柚| MATURETUBE乱妇| 亚洲精品97福利在线| 男人扒开添女人屁股| 国产成人免费在线观看| 伊人久久网站| 少妇久久久久久被弄高潮| 久久久久久久电影| 国产AV精品一区二区三区漫画| 一本之道高清在线观看一区| 日本九九热在线观看官网| 黄A无码片内射无码视频| xart欧美一区在线播放| 野花高清影视免费观看| 日韩亚洲国产欧美免费观看| 久久免费精彩视频| 国产精品美女久久久久AV超清 | 亚洲 无码 在线 专区| 嫩草影院精品视频在线观看| 国产精品自拍| 爆操日本美女| 中国老太婆xxxxx| 亚洲 欧美 国产 综合五月天 | 兰桂坊人成社区亚洲精品 | 久久久黄色大片| 国产精品久久久久影院|