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

Visual Studio中插件GDIWatch的實現

開發 后端
今天我們將要介紹的是一個GDIWatch插件,主要用于Visual Studio 2005/2008/2010。功能是在一個類似watch的窗口上顯示被調試程序的GDI對象的當前狀態。

GDIWatch 是Virgo Software 開發的一個for Visual Studio的插件,支持Visual Studio 2005/2008/2010,它的功能主要是在一個類似watch的窗口上顯示被調試程序的GDI對象的當前狀態,比如HBRUSH的顏色,大小,圖片等等,并且它還能在調試過程中高亮顯示有變化的項目,方便程序員跟蹤調試畫圖函數。

下載地址: http://www.gdiwatch.com/GDIWatch.msi

(小聲說一下,crack在文中提供了) 

這是官方的截圖:

順便再貼一個 GDIWatch 在 VS2010上使用的效果圖:

感覺還不賴,使用起來也挺方便的,就是拽個變量到它上面就可以了。

GDIWatch 不是免費軟件,作者給了15天的試用期,如果需要繼續使用就要到官網 www.gdiwatch.com 聯系作者獲取注冊碼。

P.S. 話說前天我在公司正好想上他的網站看看價錢如何,結果發現他的主頁不知出現神馬問題沒法顯示了,囧啊。

P.P.S. 印象中貌似是要100多美刀的樣子。

P.P.P.S. 在15天后我偶爾還想繼續使用,但是中國國情告訴我,花100多美刀買個插件是稍微有點貴了的說,而且目前在公司還沒用上VS2010,所以便可恥地嘗試crack,沒想到很好crack的說,稍微改動一下居然就搞定了,主要是該作者的防范意識不夠啊,犯了很多防破解的大忌,給了人家很多線索,有需要的童鞋請猛擊此處下載,適用于1.5.1.254版本,替換原版之前請自行備份以防萬一!

好了, 言歸正傳,我當初之所以找到這個軟件是因為前陣子一直在寫畫圖的代碼,本來是想說在網上找個VC6的插件的(沒辦法,公司還是在用),先是在 CodeProject 上找到一篇某位國人很久以前發表的文章,可是他居然不是開源的(這不坑爹嗎),而且遠沒有 GDIWatch 那么方便好用(不給力?。?,最奇怪的是CodeProject 居然讓他把文章給發表上去了(我勒個去),真是無奈。

不過該作者倒是簡單提到了一下他實現的方法:

The steps to do watch Image is :

(1)get the selection text by ISelectionText interface

(2)get the value of selection text by IDebugger interface

(3)Read the memeory or bitmap data from the debugged process memory space

(4)show it

最后只找到這個支持VS2005+的 GDIWatch,于是開始尋思這玩意怎么實現,我想如果不是很復雜的話說不定可以在閑暇時間做一個for VC6的版本出來的說。

我首先思考的是要實現這樣的插件最重要是要解決哪些問題:

1、最重要的是,必須能夠跨進程“訪問”被調試進程的GDI objects,這是當然的;

2、必須能跟VS協調運作,響應調試動作并及時更新GUI,要像VS自己的watch那么好用;

3、必須有界面能顯示GDI objects,這......必須的;

當然要完善這個插件的話,還需要盡量滿足下列條件:

1、避免使用undocumented trick,保證兼容性;

2、如GDIWatch那樣支持拖放變量名到GUI上;

3、高亮有變化的內容,方便跟蹤;

在定下上面這些條件后,下一步就是逐個解決問題了。

首先,要獲取GDI對象的屬性,基本是要走這條路:

  1. DWORD GetObjectType(__in  HGDIOBJ h);  
  2. HGDIOBJ GetCurrentObject(__in  HDC hdc,__in  UINT uObjectType);  
  3. int GetObject(__in   HGDIOBJ hgdiobj, __in   int cbBuffer, __out  LPVOID lpvObject); 

然而,GDI對象是基于進程的,GDIWatch作為一個插件,也就是VS的一個DLL,它如果要拿被調試進程的GDI對象句柄來直接用必然是不行的,

GDI objects 也不在 DuiplicateHandle 這個API支持的 object handle 的范疇之內。

當然了,GDI對象畢竟也是數據,在用戶模式不能做到的,在內核模式肯定有奇淫巧計可以做到,比如說訪問GDI對象表:

http://topic.csdn.net/t/20031009/14/2337150.html

http://hi.baidu.com/qzccan/blog/item/154b542375171440ac34de08.html

說起來有一款軟件很可能就是這么實現的,叫做 GDIView,它可以查看指定進程當前打開的所有GDI objects并顯示其屬性:

不過這些都屬于tricks,不是標準的做法,而且我也不熟悉具體實現方法,所以只能放棄。

其實,畢竟目標進程是在被調試的狀態下,這還是給了插件解決這個問題的環境,或者說至少有一些條件可以被利用。

調試器是可以有辦法讀寫被調試進程的內存的,可以在被調試進程的運行空間插入一段代碼讓它執行,只要上面提到的 GetObjectType 等API是在被調試進程的領域執行的,那么句柄就是有效的,自然能得到所需的結果。

要讀寫內存,必然是這條路:

  1. HANDLE WINAPI OpenProcess(__in  DWORD dwDesiredAccess,  
  2. __in  BOOL bInheritHandle,  __in  DWORD dwProcessId); 
  3. BOOL WINAPI ReadProcessMemory(__in   HANDLE hProcess,  __in   LPCVOID lpBaseAddress, 
  4.  __out  LPVOID lpBuffer,  __in   SIZE_T nSize,  __out  SIZE_T *lpNumberOfBytesRead);  
  5.  
  6. LPVOID WINAPI VirtualAllocEx(__in HANDLE hProcess,  __in_opt LPVOID lpAddress, 
  7.  __in SIZE_T dwSize,  __in DWORD flAllocationType,  __in DWORD flProtect);  
  8.  
  9. BOOL WINAPI WriteProcessMemory(__in   HANDLE hProcess,  __in   LPVOID lpBaseAddress,
  10.   __in   LPCVOID lpBuffer,  __in   SIZE_T nSize,  __out  SIZE_T *lpNumberOfBytesWritten); 

接下來的事情大概是這樣:

設計一段代碼,主要做的事情是接受指定的GDI句柄,然后通過 GetObjectType/GetCurrentObject/GetObject 等API去獲取 GDI object 的相關信息,然后將結果保存在某個buffer。

假設這段代碼是一個C函數,那么代碼大致是:

  1. typedef struct tagBrushInfo   
  2. {   
  3.    HBRUSH      hBrush;   
  4.    LOGBRUSH    logBrush;   
  5.  }BrushInfo, *PBrushInfo;   
  6.  typedef struct tagPenInfo   
  7. {   
  8.    HPEN        hPen;   
  9.    LOGPEN      logPen;   
  10. }PenInfo, *PPenInfo;   
  11.  typedef struct tagDCInfo   
  12.  {   
  13.    HDC         hDC;   
  14.    BrushInfo   brushInfo;   
  15.     PenInfo     penInfo;   
  16. }DCInfo, *PDCInfo;   
  17. LPVOID GetGDIObjectInfo(HGDIOBJ hGDIObjects)   
  18.  {   
  19.     LPVOID pInfo = NULL;   
  20.    DWORD dwObjType = GetObjectType(hGDIObjects);   
  21.   switch ( dwObjType )   
  22.     {   
  23.   case OBJ_DC:   
  24.     {   
  25.         PDCInfo pDCInfo = new DCInfo;   
  26.          pDCInfo->hDC = (HDC)hGDIObjects;   
  27.         // retrieve the brush info   
  28.        pDCInfo->brushInfo.hBrush = (HBRUSH)GetCurrentObject(pDCInfo->hDC, OBJ_BRUSH);   
  29.       if ( pDCInfo->brushInfo.hBrush )   
  30.        {   
  31. GetObject(pDCInfo->brushInfo.hBrush, sizeof(LOGBRUSH), &pDCInfo->brushInfo.logBrush);   
  32.        }   
  33.         // retrieve the pen info   
  34.          pDCInfo->penInfo.hPen = (HPEN)GetCurrentObject(pDCInfo->hDC, OBJ_PEN);   
  35.       if ( pDCInfo->penInfo.hPen )   
  36.      {   
  37.          GetObject(pDCInfo->penInfo.hPen, sizeof(LOGPEN), &pDCInfo->penInfo.logPen);   
  38.        }   
  39.       pInfo = pDCInfo;   
  40.   }   
  41.      break;   
  42.   case OBJ_BRUSH:   
  43.     if ( hGDIObjects )   
  44.     {   
  45.       PBrushInfo pBrushInfo = new BrushInfo;   
  46.      GetObject(hGDIObjects, sizeof(LOGBRUSH), &pBrushInfo->logBrush);   
  47.       pInfo = pBrushInfo;   
  48.      }   
  49.       break;   
  50.    }   
  51.    return pInfo;   
  52. }  

接下來就是要把 GetGDIObjectInfo 這個函數的代碼通過某種方式拷貝到被調試進程中,方法很多,其中一種方法是通過插件內實現一份該函數,然后設法計算出函數體的二進制代碼長度,從而將函數代碼拷貝,一個具體的例子是 CodeProject 上非常著名的文章 Three Ways to Inject Your Code into Another Process 中:

  1. static DWORD WINAPI ThreadFunc (INJDATA *pData)    
  2. {   
  3.    pData->fnSendMessage( pData->hwnd, WM_GETTEXT,    // Get password   
  4.      sizeof(pData->psText),   
  5.   (LPARAM)pData->psText );     
  6.   return 0;   
  7.  }   
  8.  // This function marks the memory address after ThreadFunc.   
  9. // int cbCodeSize = (PBYTE) AfterThreadFunc - (PBYTE) ThreadFunc.   
  10.  static void AfterThreadFunc (void)   
  11. {   
  12.  }  

可以看出是利用編譯器生成代碼的習慣,通過一個額外的空函數 AfterThreadFunc 得到 ThreadFunc 的可能大?。?nCodeSize = AfterThreadFunc - ThreadFunc)。

此外也可以嘗試基于X86匯編指令自行組裝 GetGDIObjectInfo 的二進制代碼,不過不是很容易閱讀和維護代碼。

不過這里還有一個需要注意的地方,CodeProject 的那篇文章提到了,就是同一個API的地址在不同進程中可能會被映射到不同的地址上,所以要拷貝的代碼中肯定是不能直接那樣調用的,LoadLibrary 和 GetProcAddress 就是很好的一個能得到正確的地址的方法。前面的 GetGDIObjectInfo 函數還使用了 new operator,也要對應修改為API函數如 VirtualAlloc 等。

在終于把這個GetGDIObjectInfo函數的代碼拷貝到目標進程后,下一步最為重要,就是要設法讓被調試進程執行該函數。

既然插件已經是調試器的小弟,那么當然可以利用debug API來實現,而不必用到 CreateRemoteThread 這樣感覺稍微猥瑣的方法。

VS 應該是通過 WaitForDebugEvent 等一系列API來進行調試的,所以可以攔截它,比如在先調用 SuspendThread 把當前進程中所有非插件模塊所在線程給暫停掉,然后它的函數頭部加個 jmp,讓它先跳轉到自己的一個函數,在這個函數里,要先進行一些邏輯判斷,在適合的時機利用 GetThreadContext/SetThreadContext 來操作被調試進程,比如修改eip,然后 ContinueDebugEvent 讓被調試進程執行 GetGDIObjectInfo 函數,在取得GDI對象的信息buffer后,拷貝到插件自己的內存空間上,調用 ResumeThread 恢復所有之前被暫停的線程,最后不要忘了還要跳轉回 WaitForDebugEvent 的函數里。

關于運用debug API的,最近的 Writing Windows Debugger 系列文章貌似不錯,我有時間要看看。

做完上面這些事情后,可以給插件的窗口post 一個消息,讓它讀取 GetGDIObjectInfo 返回的結果并更新GUI。

至于BITMAP這個比較特殊的對象,可以用 CreateDIBSection 這個API。

可是事情到此還沒完,因為還要寫VC6插件的代碼,還好這個問題已經有一篇非常棒的文章可以參考:Undocumented Visual C++。

最后就是那個類似watch窗口的屬性列表控件,我沒找到現成的,不過倒是有一個還不錯的封裝類 CPropTree,只是還需要在它的基礎上加不少代碼進行增強。

原文鏈接:http://www.cnblogs.com/yonken/archive/2011/01/09/Guess_how_GDIWatch_was_implemented.html

【編輯推薦】 

  1. Visual Studio自定義調整窗體的兩個小技巧
  2. Visual Studio 2010中關于C#的幾點改進
  3. Visual Studio 2010及.Net 4新功能一覽
  4. 提高效率 用好Visual Studio 2010自定義代碼段
責任編輯:彭凡 來源: 博客園
相關推薦

2010-07-15 08:50:09

SharePointVisual Stud

2009-11-02 14:16:43

Visual Stud

2025-06-03 07:10:00

開發插件代碼

2011-09-01 09:23:51

Python

2009-12-15 17:12:18

Visual Stud

2024-04-19 13:27:43

插件開發

2009-12-04 16:57:52

Visual Stud

2010-01-28 09:07:50

Visual Stud

2010-03-11 16:09:38

Visual StudSilverligh

2024-04-26 11:50:34

開發插件

2009-12-17 09:06:23

Visual Stud

2009-12-03 10:38:29

Visual Stud

2009-12-03 10:26:38

Visual Stud

2012-09-19 10:14:12

Visual Stud

2010-09-25 08:50:00

Visual Stud

2009-09-02 16:21:17

Visual BasiC#語言

2010-03-11 15:23:44

Visual Stud

2009-12-02 09:43:38

Visual Stud

2009-12-03 15:21:24

2012-05-10 16:46:09

Visual Stud
點贊
收藏

51CTO技術棧公眾號

国产视频久久久| 欧美性xxxx极品高清hd直播| 成人精品一区二区三区电影黑人| www欧美com| 日本妇女一区| 欧美日韩高清在线| 可以看毛片的网址| 午夜视频在线观看免费视频| 国产精品伊人色| 热草久综合在线| 国产大学生自拍| 国产成人av| 日韩欧美亚洲国产精品字幕久久久 | 国产一区二区三区三区在线观看| 国产三级精品三级在线| 日本蜜桃在线观看视频| 亚洲欧洲日产国产综合网| 精品欧美国产| 性猛交富婆╳xxx乱大交天津| 亚洲欧美日韩国产| 久久久视频在线| www.xx日本| 国产精品三级| 亚洲精品suv精品一区二区| 超碰人人草人人| 黄瓜视频成人app免费| 亚洲资源中文字幕| 亚洲精品乱码视频| 日本中文字幕电影在线观看 | 麻豆网站在线| 国产三区在线成人av| 国产精品日韩一区二区三区| 一二三区中文字幕| 视频精品一区二区| 欧美在线视频一区二区| 久久久久成人网站| 欧美在线网址| 久久精品久久久久久国产 免费| 日韩在线免费观看av| 超碰成人福利| 精品日韩欧美一区二区| a级大片免费看| 免费精品一区二区三区在线观看| 欧美日韩精品一区二区在线播放| 欧在线一二三四区| 三级在线观看视频| 色综合天天在线| 人妻少妇被粗大爽9797pw| 国产高清视频色在线www| 一区二区三区在线观看视频| 日本三日本三级少妇三级66| caoporn免费在线| 亚洲美女视频一区| 97久久国产亚洲精品超碰热| 日本一本在线免费福利| 亚洲影视在线播放| 欧美一级免费播放| 99在线视频影院| 欧美午夜精品久久久久久久| 国产最新免费视频| 高清电影一区| 欧美少妇一区二区| 久久成年人网站| 国语精品视频| 精品国产污污免费网站入口| 四虎精品一区二区| 亚洲ab电影| 伊人成人开心激情综合网| 呻吟揉丰满对白91乃国产区| 久久久久久久久久久久久久久久久久| 久久精品亚洲一区| 免费毛片在线播放免费| 亚洲作爱视频| 国产成人综合精品| 国产裸体无遮挡| 成人黄色综合网站| 蜜桃日韩视频| 女女色综合影院| 亚洲一级在线观看| 日韩精品无码一区二区三区免费| 成人黄色在线| 日韩欧美一二区| 成年人网站免费在线观看| 波多野结衣在线播放一区| 久久中文久久字幕| 国产在线观看免费视频今夜| 老妇喷水一区二区三区| 91精品久久久久久久久久| 午夜精品久久久久久久99热黄桃| 91在线高清观看| 亚洲成人av动漫| 暖暖在线中文免费日本| 色狠狠色噜噜噜综合网| 韩国三级与黑人| 国产精品一在线观看| 久久综合久久八八| 国产毛片aaa| 精品午夜一区二区三区在线观看| 国产亚洲精品美女久久久m| 成人在线免费电影| 性做久久久久久久免费看| 国产精品久久a| 色爱综合av| 久久亚洲春色中文字幕| 日本中文字幕在线| 国产ts人妖一区二区| 视频一区二区综合| h片在线观看视频免费| 欧美精品 日韩| 一区二区精品免费| 91久久综合| 91免费看片在线| 国产精品久久一区二区三区不卡| 亚洲一区二区五区| 加勒比av中文字幕| 精品一区二区三区的国产在线观看| 欧美激情手机在线视频| 一级全黄少妇性色生活片| 久久一区二区视频| 99er在线视频| 美女精品久久| 久久精品视频导航| 在线观看国产精品入口男同| 久久午夜色播影院免费高清| 草草视频在线免费观看| 九九99久久精品在免费线bt| 中文字幕亚洲天堂| 久草热在线观看| 久久夜色精品一区| 北条麻妃在线视频观看| 国产一区二区三区亚洲| 欧美乱妇40p| 国内老熟妇对白xxxxhd| 国产精品久久久久久户外露出 | 国产白丝精品91爽爽久久 | 亚洲精品国产一区黑色丝袜| 999亚洲国产精| 国产精品一 二 三| 久久久久黄久久免费漫画| 日韩一区二区三区精品视频| 欧美一级片在线视频| 久久国产精品免费| 一本久道久久综合| 亚洲国产91视频| 久久在线免费观看视频| 国产片高清在线观看| 一区在线观看视频| 五月天丁香花婷婷| 66视频精品| 91久久精品国产91久久性色tv| 91麻豆一二三四在线| 日韩免费视频线观看| 久久免费视频6| av午夜一区麻豆| 大陆极品少妇内射aaaaa| 日韩精选在线| 国产精品电影观看| 亚洲成人三级| 日韩美一区二区三区| 国产亚洲精品成人| 99精品热视频| 国产在线观看福利| 三区四区不卡| 91夜夜揉人人捏人人添红杏| 手机在线免费观看av| 日韩av在线网站| 久久亚洲精品石原莉奈 | 精品视频在线导航| 国产无遮挡又黄又爽又色视频| 中文字幕av不卡| 欧美人与性动交α欧美精品| 亚洲狠狠婷婷| 日本精品一区二区三区高清 久久| 91九色综合| 九九久久精品一区| 欧美日韩国产综合视频| 欧美三级资源在线| 欧美黑吊大战白妞| 久久久一区二区| 日韩在线一区视频| 亚洲伦理精品| 中文字幕不卡每日更新1区2区| 清纯唯美激情亚洲| 欧美自拍视频在线| 日韩精品黄色| 日韩风俗一区 二区| 在线免费观看日韩视频| 亚洲高清免费视频| 亚洲天堂岛国片| 国产99久久久久| 日韩精品一区二区三区色欲av| 午夜影院欧美| 欧美日本韩国一区二区三区| 国产精品一级在线观看| 2019精品视频| 国产激情视频在线观看| 亚洲男人天堂网站| 亚洲精品久久久久avwww潮水| 日韩欧美国产激情| 久久网一区二区| 国产精品伦理在线| 手机av免费看| 成人性生交大片免费看视频在线 | 在线成人激情黄色| 神马午夜精品95| 在线成人av影院| 国产寡妇亲子伦一区二区三区四区| 亚洲免费观看高清完整版在线观看熊| 朝桐光av一区二区三区| 国产精品一区二区在线观看不卡| 熟妇人妻va精品中文字幕| 黄色成人在线网站| 超碰在线免费观看97| 国产91一区| 精品国产乱码久久久久软件 | 久久99欧美| 7m精品国产导航在线| 国产欧美va欧美va香蕉在线| 成人亚洲欧美| 国内精品小视频| 色老头在线观看| 久久精品亚洲94久久精品| 川上优的av在线一区二区| 日韩二区三区在线| 内射后入在线观看一区| 日韩欧美一二三区| 99视频在线观看免费| 欧美精品在线视频| 91麻豆一区二区| 在线精品视频免费观看| 亚洲乱码国产乱码精品| 日韩欧美999| 亚洲欧美精品一区二区三区| 亚洲国产精品久久久久秋霞影院| 手机在线免费看片| 中文字幕一区二区三中文字幕| 91成人在线免费视频| 91麻豆免费观看| 中文字幕一区二区久久人妻网站| www.日韩av| 国产精品久久久久久亚洲色| 成人性生交大合| 国产精品手机在线观看| 不卡一区二区三区四区| 国产草草浮力影院| 99久久精品免费看| 精品久久久久久中文字幕人妻最新| 99精品国产热久久91蜜凸| 中文字幕影片免费在线观看| 91看片淫黄大片一级| 一级特黄a大片免费| 91论坛在线播放| 亚洲熟妇一区二区三区| 国产清纯美女被跳蛋高潮一区二区久久w| 少妇毛片一区二区三区| 久久久精品免费网站| 国产视频三区四区| 亚洲男人天堂av网| 久久久久噜噜噜亚洲熟女综合| 亚洲午夜电影网| 男人午夜免费视频| 在线视频欧美精品| 99久久精品国产一区色| 精品国一区二区三区| 亚洲 国产 欧美 日韩| 亚洲美女av在线播放| 在线激情小视频| 欧美精品精品精品精品免费| 亚洲天堂资源| 国产区亚洲区欧美区| 日韩08精品| 鲁丝片一区二区三区| 色小子综合网| 国产 日韩 欧美在线| 老妇喷水一区二区三区| 亚洲国产综合av| 久久久夜色精品亚洲| 三级影片在线看| 色综合一个色综合| 国产女人高潮时对白| 亚洲黄色有码视频| 免费一级在线观看| 不卡av日日日| 亚洲伊人av| 999精品在线观看| 久久99久久人婷婷精品综合| 成人性做爰片免费视频| 一本色道久久| 日韩欧美中文视频| 久久久久青草大香线综合精品| 男人的午夜天堂| 欧美日韩另类在线| 国产又粗又猛又爽又黄视频| 亚洲国产欧美一区二区丝袜黑人| 91福利在线视频| 992tv成人免费影院| 91麻豆精品国产91久久久更新资源速度超快 | 国产3p露脸普通话对白| 青青草97国产精品免费观看 | 丰满熟妇人妻中文字幕| 在线成人中文字幕| av资源在线| 91精品久久久久久蜜桃| 精品一区不卡| 久久久免费视频网站| 国产suv精品一区二区883| 国产精品视频看看| 欧美性xxxxx极品| 人妻无码中文字幕| 久久亚洲国产精品| a成人v在线| 免费影院在线观看一区| 亚洲午夜极品| 深夜福利网站在线观看| 国产精品国模大尺度视频| 国产精品久免费的黄网站| 日韩视频在线你懂得| 77导航福利在线| 国产精品com| 亚洲黄页网站| 免费看一级大黄情大片| 国产成人精品网址| 男女做暖暖视频| 5566中文字幕一区二区电影| 福利片在线观看| 国产精品免费一区| 国产免费久久| 久久久久久香蕉| 国产亚洲精品资源在线26u| 国产成人综合欧美精品久久| 日韩成人性视频| 国产伦子伦对白在线播放观看| 国产成人精品自拍| 国产精品大片| 亚洲免费观看在线| 亚洲主播在线观看| 成人无码一区二区三区| 久久久久久久国产精品视频| 99re热精品视频| www.夜夜爱| 成人h动漫精品一区二| 九热这里只有精品| 亚洲黄色成人网| 在线视频cao| 日本婷婷久久久久久久久一区二区 | 婷婷综合成人| 成人一级片网站| 国产午夜精品理论片a级大结局| 99re这里只有精品在线| 亚洲一区www| 精品九九久久| 99re8这里只有精品| 国产精品一二三区在线| 国产在线免费视频| 日韩精品中文在线观看| 一二区成人影院电影网| 四虎影视永久免费在线观看一区二区三区| 日韩av电影免费观看高清完整版| 精品人妻中文无码av在线| 欧美日韩色一区| www.欧美日本韩国| 国产乱码精品一区二区三区卡| 日韩图片一区| 色综合99久久久无码国产精品| 欧美三级欧美一级| 在线观看免费视频你懂的| 国产精品一区视频| 久久精品二区三区| 乱老熟女一区二区三区| 精品国产乱码久久久久久久| 大桥未久在线视频| 污视频在线免费观看一区二区三区| 美女视频一区二区三区| 久久成人在线观看| 亚洲色图第一页| 成人污污视频| 欧美视频在线播放一区| 国产精品欧美一级免费| 亚洲AV无码一区二区三区少妇| 91高清视频免费观看| 欧美hd在线| 免费看毛片的网站| 欧美日本一区二区| mm视频在线视频| 亚洲视频在线二区| hitomi一区二区三区精品| 中文字幕福利视频| 久久久久久久999精品视频| 第一社区sis001原创亚洲| 无码人妻少妇色欲av一区二区| 色综合天天综合网天天看片| 成人欧美在线| 日本高清不卡三区| 国产69精品一区二区亚洲孕妇| 无码人妻精品一区二区三区不卡| 欧美成人剧情片在线观看| 精品福利久久久| 黄色性视频网站| 91精品欧美久久久久久动漫| 亚洲深夜视频|