精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产v综合v| 人妻少妇精品无码专区| 日韩在线欧美| 日韩一区二区高清| 奇米影视亚洲色图| 懂色av中文在线| 国产精品一级在线| 91国自产精品中文字幕亚洲| 日韩限制级电影在线观看| 亚洲欧洲一区二区福利| 国产高清在线观看视频| 欧美专区在线| 欧美精品免费播放| 成人免费网站黄| 久久久久久久久成人| 欧美日韩国产中文精品字幕自在自线 | 日本一区免费看| www.xxx国产| 日日夜夜免费精品| 久久久久久国产精品| 九九九视频在线观看| 精品国产导航| 91麻豆精品国产91久久久久久 | 黄视频网站在线观看| 中文字幕va一区二区三区| 国产欧美亚洲日本| 99久久国产热无码精品免费| 日韩精品视频网站| 午夜精品久久久久久久99热浪潮| 亚洲色图27p| 国产日产精品_国产精品毛片| 日韩视频永久免费| 欧美日韩中文不卡| 成人私拍视频| 午夜欧美在线一二页| 可以在线看黄的网站| 在线中文资源天堂| 久久久久国产一区二区三区四区| 国产99午夜精品一区二区三区| 国产又大又粗又长| 欧美a级一区二区| 欧美专区国产专区| 一级片中文字幕| 亚洲日韩视频| 国内精品久久久久久久| 日韩美女在线看| 欧美激情 亚洲| 日韩免费高清视频网站| 在线播放欧美女士性生活| 激情网站五月天| 中文在线免费视频| 岛国av一区二区在线在线观看| 中文字幕人妻熟女人妻洋洋| 国产在线69| 中文字幕一区二区三区在线观看| 少妇精品久久久久久久久久| 青草久久伊人| 久久精品夜色噜噜亚洲a∨| 鲁丝片一区二区三区| 亚洲av成人精品一区二区三区在线播放 | 日韩精选在线| 精品中文视频在线| 黄色正能量网站| 一区二区美女| 亚洲欧洲第一视频| 日本二区在线观看| 成人精品视频| 久久久国产精彩视频美女艺术照福利| 美女三级黄色片| 自拍偷拍欧美| 国内免费久久久久久久久久久| 日韩成人免费在线视频| 美女网站久久| 国产精品美女久久久久久免费| 一区二区视频免费观看| 精品写真视频在线观看| 成人国产1314www色视频| 高清一区二区三区四区| 91天堂素人约啪| 五月天综合网| 成人在线播放| 欧美三级免费观看| 日韩一区二区三区不卡视频| 久久久精品区| 亚洲精品一区中文字幕乱码| 亚洲欧美制服综合另类| 欧美 日韩 成人| 欧美高清视频手机在在线| 欧美成人剧情片在线观看| 国产福利久久久| 日日摸夜夜添夜夜添国产精品 | 女人天堂av手机在线| 亚洲优女在线| 91麻豆精品国产综合久久久久久| 黑人无套内谢中国美女| 四虎884aa成人精品最新| 伊人久久久久久久久久| 久久精品视频免费在线观看| 国产精品日韩久久久| 国产精品网红福利| 熟妇人妻系列aⅴ无码专区友真希 熟妇人妻av无码一区二区三区 | 亚洲国产精品一区二区久久恐怖片 | 亚洲AV无码成人精品区明星换面| 我不卡伦不卡影院| 91国产美女视频| 夜夜嗨aⅴ一区二区三区| 国产高清不卡一区二区| 久久国产精品一区二区三区| 乱人伦中文视频在线| 天天免费综合色| 成 人 黄 色 小说网站 s色| 卡通动漫国产精品| 久久夜精品va视频免费观看| 无码人妻av免费一区二区三区 | 亚洲一区国产| 亚洲最大的网站| 成人高清免费观看mv| 亚洲妇女屁股眼交7| 天天爽夜夜爽一区二区三区| 欧美绝顶高潮抽搐喷水合集| 久久久国产精品x99av| 精品人妻无码一区二区性色| 美足av综合网| 国产精品美女一区二区三区| 精品国产一二三四区| 日本久久伊人| 精品国产一区二区三区久久久| 免费av网站在线| 成人免费三级在线| 日韩video| 男人亚洲天堂| 一个色综合导航| 探花视频在线观看| 成人激情视频网站| 97在线免费视频观看| 日韩在线激情| 中文字幕亚洲专区| 亚洲综合成人av| 国产欧美一区二区精品性色超碰| 亚洲 高清 成人 动漫| 狠狠一区二区三区| 久久久久亚洲精品成人网小说| 国产精品一区二区三区在线免费观看 | 久久久久亚洲| 国产日韩一区在线| bbbbbbbbbbb在线视频| 日韩欧美在线视频| 黄色a一级视频| 一区二区三区四区五区在线| 精品久久sese| 乱馆动漫1~6集在线观看| 亚洲第一男人天堂| 日韩伦人妻无码| 99久久亚洲一区二区三区青草| 国产自产在线视频| 林ゆな中文字幕一区二区| 亚洲3p在线观看| 水莓100在线视频| 精品久久久国产精品999| 中文字幕乱码在线| 伊人久久综合一区二区| 国产精品乡下勾搭老头1| 中文字幕一区二区三区5566| 99久久999| 欧美超级免费视 在线| va视频在线观看| 亚洲一区二区在线视频| yy1111111| 三级成人在线视频| 亚洲天堂电影网| 国产亚洲观看| 91精品国产91久久久久久| 欧美一区二区少妇| 欧美性大战久久久| 极品魔鬼身材女神啪啪精品| 国产成人亚洲综合a∨婷婷图片| 欧美国产综合在线| 神马午夜久久| 成人黄色午夜影院| 牛牛精品视频在线| 亚洲欧美在线看| 97人妻精品一区二区三区| 亚洲综合av网| 熟女俱乐部一区二区视频在线| 麻豆国产91在线播放| 视色,视色影院,视色影库,视色网 日韩精品福利片午夜免费观看 | 亚洲免费999| 亚洲福利国产| 天堂√在线观看一区二区| 精品久久国产一区| 4438全国成人免费| 精品黄色免费中文电影在线播放| 日韩免费看网站| 国产精品熟女视频| 亚洲综合图片区| 天天操天天干天天操天天干| 国产v综合v亚洲欧| 欧美在线观看视频网站| 欧美国产精品| 天天综合色天天综合色hd| 亚洲国产精品免费视频| 国产成人综合亚洲| 色呦呦视频在线观看| 在线成人一区二区| 国产自产一区二区| 欧美午夜在线一二页| 久久久午夜影院| 1024日韩| 日韩精品福利网站| 中文字幕一区二区三区四区视频| 亚洲在线免费播放| 国产免费嫩草影院| 91视频免费观看| 麻豆精品国产传媒| 秋霞电影网一区二区| 日本www在线视频| 亚洲情侣在线| 亚洲精品国产系列| 亚洲精华一区二区三区| 成人午夜电影免费在线观看| 粉嫩91精品久久久久久久99蜜桃| 97超级碰碰碰久久久| 新版中文在线官网| 久久精品视频免费播放| 二区三区在线| 亚洲天堂精品在线| 日韩一二三四| 亚洲国产精品系列| 国产小视频免费观看| 日韩一级高清毛片| 亚洲天堂手机在线| 欧美亚洲国产一区在线观看网站| 视频一区二区三区四区五区| 亚洲成av人在线观看| 极品久久久久久| 亚洲少妇屁股交4| 国产精品suv一区二区88| 欧美国产日韩在线观看| www.久久av| 久久久一区二区三区捆绑**| 欧美大喷水吹潮合集在线观看| 国产成人在线视频网站| 色姑娘综合天天| 国产毛片一区二区| 亚洲综合在线一区二区| 国产曰批免费观看久久久| 在线观看岛国av| 国产在线看一区| 特级西西444www| 国产激情偷乱视频一区二区三区| 久久成年人网站| 国产在线麻豆精品观看| 中文字幕人妻无码系列第三区| 国产一区三区三区| 无码国产精品一区二区高潮| 国产高清久久久| 久久久久久久人妻无码中文字幕爆| 成人午夜电影网站| 中文字幕在线免费看线人| 91蜜桃免费观看视频| 国产精品欧美亚洲777777| 欧美人体大胆444www| 国产丝袜高跟一区| 极品美乳网红视频免费在线观看 | 视频免费在线观看| 99re8在线精品视频免费播放| 国产伦精品一区二区三区妓女| 久久亚洲欧美国产精品乐播| 国产免费一区二区三区网站免费| 亚洲国产精品t66y| 日韩国产第一页| 亚洲1区2区3区视频| 亚洲欧美综合自拍| 欧美人妖巨大在线| 亚洲成人中文字幕在线| 精品一区二区电影| 97电影在线观看| 欧美日韩成人精品| 亚洲校园激情春色| 国产一区红桃视频| 97超碰成人| 日韩视频在线播放| 欧美精品福利| 91av在线免费播放| 国产一区二区美女诱惑| 97人妻精品一区二区三区免| 国产欧美日韩视频一区二区| 一区二区国产精品精华液| 婷婷中文字幕综合| 亚洲免费视频二区| 精品电影一区二区三区| 邻居大乳一区二区三区| 欧美成人剧情片在线观看| 在线观看福利电影| 91日韩在线播放| 伊人久久综合影院| 人妻无码一区二区三区四区| 久久久久国产一区二区| 三上悠亚 电影| 日本一区二区三区国色天香 | 欧美在线观看禁18| 亚洲国产一二三区| 在线观看国产精品91| 精精国产xxxx视频在线中文版 | 男人天堂手机在线视频| 日本午夜精品一区二区三区电影| xxxx国产视频| 国产精品不卡在线| 欧美一区免费看| 欧美精品一区二区三区蜜臀| 日本在线视频网| 欧美主播福利视频| 国产精品久久久网站| 欧美视频在线一区二区三区| 久久一区二区三| 精品1区2区3区| 青青青草原在线| 欧美—级a级欧美特级ar全黄| 国产精品亲子伦av一区二区三区 | 草草视频在线播放| 日韩中文字幕免费| 欧美18—19sex性hd| 国产精品二区三区| 亚洲欧洲日韩| 老司机久久精品| 国产亚洲一区字幕| 美女又爽又黄免费视频| 亚洲爱爱爱爱爱| 欧美精品videosex| 亚洲综合视频1区| 99久久.com| 午夜剧场在线免费观看| 日本一区二区久久| 中文字幕 国产精品| 亚洲欧美精品在线| 美女一区网站| 久久偷窥视频| 国产精品外国| 波多野结衣影院| 黄色精品一区二区| 欧美一区二区黄片| 久久久噜噜噜久久| 国产图片一区| 欧美一级欧美一级| 成人av在线电影| 永久免费看片在线播放| 亚洲第一精品自拍| 日韩精品美女| 欧美下载看逼逼| 日韩电影免费在线| 日韩精品电影一区二区三区| 欧美色综合网站| 青青影院在线观看| 成人欧美一区二区三区在线湿哒哒 | 中文在线中文资源| 欧美日韩亚洲一区二区三区在线观看 | jizzjizzxxxx| 国产色91在线| 一区二区三区亚洲视频| 久久香蕉国产线看观看网| 蜜桃精品一区二区三区| 欧美黑人在线观看| 波多野结衣亚洲一区| 久久久久久久久黄色| 一区二区欧美亚洲| av在线精品| 99视频在线免费播放| 2020国产精品自拍| 亚洲性生活大片| 中文字幕一区二区av| 精品国产午夜福利在线观看| 一区二区三区日本| 日中文字幕在线| 国产精品第一页在线| 一区二区影院| 久久久久久久无码| 欧美性大战久久久| 欧美1—12sexvideos| 美媛馆国产精品一区二区| 蜜桃视频第一区免费观看| 私库av在线播放| 亚洲免费一在线| 日韩三级成人| 国产精品12345| 国产精品人人做人人爽人人添| 精品国自产在线观看| 亲爱的老师9免费观看全集电视剧| 精品视频国产| 粗大的内捧猛烈进出视频| 欧美性69xxxx肥| 99热国产在线中文| 欧美日韩电影一区二区三区| 国产一区欧美日韩| 黄色片中文字幕| 欧美xxxx做受欧美.88| 国内黄色精品| 91精品啪在线观看国产| 日本韩国欧美一区| 国产第一页在线| 亚洲欧洲一区二区|