• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 23,  comments - 20,  trackbacks - 0
             
            最近又閑著了...
            技術人員一閑著就蛋疼...得找點東西學 , 何況我還是一只小菜鳥   今天下了本電子書  看看C#的WinForm 一點一點來

            根據書上的知道  新建了第一個工程  發現了一個C#的關鍵字Region很有意思  折疊代碼用的 而且還能有注釋   相當好用  特別是工程大了一點點以后  這個就使得代碼更加好看了 新語言就是好... 無奈 C++沒有這個關鍵字   不管有沒有  上網搜索一下吧   居然發現MSDN里面有
            MSDN 這個關鍵字   吼吼  看了一下 
            //語法描述
            #pragma region name
            #pragma endregion comment
            //END

            //實例代碼
            #pragma region Region_1
            void Test() {}
            void Test2() {}
            void Test3() {}
            #pragma endregion Region_1

            int main() {}
            我拿到工程里面去試了一下  居然沒有  MSDN騙人??才不會呢  旁邊有一個提醒框
            This page is specific to
            Microsoft Visual Studio 2005/.NET Framework 2. 0
            呵呵  我用的是VS2003   不過還好機器還裝了2008  測試一下  真的可以  哈哈  不錯不錯 

            posted @ 2009-09-03 12:22 李佳 閱讀(16220) | 評論 (14)編輯 收藏
            頭大 越學習  越多新的術語 ...

            列個表單  N年后自己再回來看看吧

            XML WinForm .Net 正則表達式 內核編程 ASM 高級應用程序調試   高級內核編程(HOOK 與 反HOOK)
            還有么???想到了就增加吧...

            新增   WPF  WDF TDD

            累么??   不累!!

            posted @ 2009-09-02 20:51 李佳 閱讀(308) | 評論 (0)編輯 收藏
            最近在做一個網站的模擬登錄程序  前段時間一直忙于做驗證碼  算是做好了
            今天才正式登陸   發送了無數次的登錄信息   一直增  改  就是登陸不了  總是提示錯誤
            但是利用IE截獲的HTTP封包來看   幾乎都是一摸一樣的...
            這個是截獲的IE封包

            POST /app HTTP/1.1
            Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-silverlight, application/msword, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*
            Referer: ***
            Accept-Language: zh-cn
            Content-Type: application/x-www-form-urlencoded
            Accept-Encoding: gzip, deflate
            User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 1.7; TencentTraveler 4.0;  Embedded Web Browser from: http://bsalsa.com/; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; CIBA)
            Host: ***
            Content-Length: 264
            Connection: Keep-Alive
            Cache-Control: no-cache
            Cookie: CHANNEL_JSESSIONID=Kc8GLn0Gvvn4Vl7sLjh5kN1nT5DZQknp1nXDRxch9GnTr5TYKncf!2134775339!730718407

            service=direct%2F1%2FHome%2F%24Form&sp=S0&Form0=%24FormConditional%2Cblogin%2C%24FormConditional%240&%24FormConditional=T&%24FormConditional%240=F&select=%B8%F6%C8%CB%BF%CD%BB%A7&SERIAL_NUMBER=111222333&USER_PASSWD=123123&EFFICACY_CODE=2598&blogin=+%B5%C7%C2%BC+

            以下是我發送出去的封包
            POST /app HTTP/1.1
            Content-Type: application/x-www-form-urlencoded
            Referer: ***
            Accept: */*
            User-Agent: GetBalance
            Host: ***
            Content-Length: 300
            Cache-Control: no-cache
            Cookie: CHANNEL_JSESSIONID=Kc3V7JTn32G0G6yj8KnyhYpRHvHp1gf9pX033l5WjZV6gRh75ZRn!-1722555788!2134775339

            service=direct%2F1%2Ffeequery.FeeQuery%2F%24HHeader.%24GHHeader.%24Form&sp=S0&Form0=%24FormConditional%2Cblogin%2C%24FormConditional%240&%24FormConditional=T&%24FormConditional%240=F&select=%B8%F6%C8%CB%BF%CD%BB%A7&SERIAL_NUMBER=111222333&USER_PASSWD=123123&EFFICACY_CODE=1204&blogin=+%B5%C7%C2%BC+

            幾乎都無誤  以前登陸的無數的網站  都還沒有這么多頭   這次一個一個的增加  加了這么多的頭  居然還是不行
            煩的狠  就用火狐打開看看  顯示 "Components Head not exist"    我的IE可沒有顯示這個信息
            聯想到以前在邪八里面看到的文章  里面似乎提過User-Agent檢測    是不是這個網站也增加了這個檢測呢???
            于是 在Post數據中在增加一行
            pFile -> AddRequestHeaders("User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 1.7; TencentTraveler 4.0;  Embedded Web Browser from: http://bsalsa.com/; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; CIBA)");
            提交  居然顯示成功了...
            汗...
            保留下來  以備不時之需

            posted @ 2009-09-01 10:19 李佳 閱讀(1541) | 評論 (0)編輯 收藏
             1 
             2    CString Fullstring, Appname, Fileext;
             3    Fullstring.LoadString(IDR_MAINFRAME);
             4     //獲取完整的分割串
             5    AfxExtractSubString(Appname, Fullstring, 0'\n');    
             6     //析出第一個子串
             7    AfxExtractSubString(Fileext, Fullstring, 4'\n');    
             8     //析出第四個子串

            CString 和COleDateTime之間的轉換
            CString   str   
            =   "2004-07-08   11:22:33";     
                    COleVariant   VariantTime;   
                    VariantTime   
            =   str;   
                    VariantTime.ChangeType(VT_DATE);   
                    COleDateTime   DataTime   
            =   VariantTime;  
            STR)strHTML,strHTML.GetLength(),5 tmp,strHTML.GetLength()+1);
            6     strHTML = tmp;
            7     delete tmp;
            8 

            _RecordsetPtr bInDateBase = m_pConn->Execute((_variant_t)strSQL , &index , 1);
            if (!bInDateBase->adoEOF)    //有數據
            {
            }

            1 _variant_t var;
            2 var= m_pRecordset->GetCollect("posInfo");        //可能為空
            3 if(var.vt != VT_NULL)    //為NULL
            4     strPosInfo = var;
            5 else 
            6     strPosInfo = “”;
            7 
             1 //將字符串數字傳換成BCD碼 -- 例如  "1234"  ->  0x1234
             2 void CGPS_Info_Redirect_CZDlg::CStringDataToBCDData(CString strData , BYTE* bBCD)
             3 {         
             4     for (int i = 0 ; i < strData.GetLength() ; i++)
             5     {
             6         ASSERT(strData[i] >= '0' && strData[i] <='9');
             7         if (i % 2 == 0)    //1,3,5,7,9
             8         {
             9             bBCD[i/2=(strData[i] - 0x30)<<4;//左移四位            
            10         }
            11         else
            12         {
            13             bBCD[i/2+= (strData[i] - 0x30);
            14         }
            15     }
            16 }
             1 //將int類型copy到BYTE數組中
             2 void CGPS_Info_Redirect_CZDlg::CopyIntToByte(BYTE* data , int iData)
             3 {
             4     WORD wHigh = HIWORD(iData);
             5     WORD wLow = LOWORD(iData);
             6     data[0= HIBYTE(wHigh);
             7     data[1= LOBYTE(wHigh);
             8     data[2= HIBYTE(wLow);
             9     data[3= LOBYTE(wLow);
            10 }
            11 

            posted @ 2009-08-28 17:08 李佳 閱讀(269) | 評論 (0)編輯 收藏
                 摘要: 驅動其實很早以前就寫了  只不過功能沒有達到  加上一直很忙 所以就放下了 今天閑著無聊  就接著寫吧...寫完了 發上來 留著 主要的問題就是效率很低下   不知道為什么有大量的IRP_MJ_DEVICE_CONTROL 這個IRP  CPU全部占滿程序很簡單  暴力枚舉 主要是鍛煉一下內核編程 以及WinDbg的調試頭文件...  閱讀全文
            posted @ 2009-08-28 16:20 李佳 閱讀(1538) | 評論 (0)編輯 收藏
            由于昨天太晚 沒有看完 今天繼續看  繼續轉
            原帖地址
            http://blog.csdn.net/vagrxie/archive/2009/07/31/4398721.aspx
            今天要轉的就是  SEH + MiniDump  實現既Dump文件  又讓程序繼續運行

             1 #include "stdafx.h"
             2 #include <windows.h>
             3 #include <Dbghelp.h>
             4 using namespace std;
             5 
             6 #pragma auto_inline (off)
             7 #pragma comment( lib, "DbgHelp" )
             8 
             9 // 為了程序的簡潔和集中關注關心的東西,按示例程序的慣例忽略錯誤檢查,實際使用時請注意
            10 
            11 LONG WINAPI MyUnhandledExceptionFilter(struct _EXCEPTION_POINTERS* ExceptionInfo    )
            12 {
            13     HANDLE lhDumpFile = CreateFile(_T("DumpFile.dmp"), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL ,NULL);
            14     MINIDUMP_EXCEPTION_INFORMATION loExceptionInfo;
            15     loExceptionInfo.ExceptionPointers = ExceptionInfo;
            16     loExceptionInfo.ThreadId = GetCurrentThreadId();
            17     loExceptionInfo.ClientPointers = TRUE;
            18     MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),lhDumpFile, MiniDumpNormal, &loExceptionInfo, NULL, NULL);
            19     CloseHandle(lhDumpFile);
            20     return EXCEPTION_EXECUTE_HANDLER;
            21 }
            22 
            23 void Fun2()
            24 {
            25     __try
            26     {
            27         static bool b = false;
            28         if(!b)
            29         {
            30             b = true;
            31             int *= NULL;
            32             *= 0;
            33         }
            34         else
            35         {
            36             MessageBox(NULL, _T("Here"), _T(""), MB_OK);
            37         }
            38     }
            39     __except(MyUnhandledExceptionFilter(GetExceptionInformation()))
            40     {
            41     }
            42 }
            43 
            44 void Fun()
            45 {
            46     Fun2();
            47 }
            48 
            49 int main()
            50 {
            51     Fun();
            52     Fun();  //用于顯示MessageBox
            53     return 1;
            54 }
            55 
            56 
            最后轉一句話
            Make it right before you make it faster. Keep it right when you make it faster. Make it clear before you make it faster. Do not sacrifice clarity for small gains in efficiency.
            posted @ 2009-08-28 09:16 李佳 閱讀(601) | 評論 (0)編輯 收藏
            DUMP文件很實用  留下來
             1 LONG WINAPI MyUnhandledExceptionFilter(      _EXCEPTION_POINTERS *ExceptionInfo     );
             2 
             3 //在程序里面調用
             4 SetUnhandledExceptionFilter(&MyUnhandledExceptionFilter);
             5 //來設置
             6 LONG WINAPI MyUnhandledExceptionFilter( _EXCEPTION_POINTERS *ExceptionInfo )
             7 {
             8     HANDLE lhDumpFile = CreateFile(_T("DumpFile.dmp"), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL ,NULL);
             9 
            10     MINIDUMP_EXCEPTION_INFORMATION loExceptionInfo;
            11 
            12     loExceptionInfo.ExceptionPointers = ExceptionInfo;
            13 
            14     loExceptionInfo.ThreadId = GetCurrentThreadId();
            15 
            16     loExceptionInfo.ClientPointers = TRUE;
            17 
            18     MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),lhDumpFile, MiniDumpNormal, &loExceptionInfo, NULL, NULL);
            19 
            20     CloseHandle(lhDumpFile);
            21 
            22     return EXCEPTION_EXECUTE_HANDLER;
            23 }


            posted @ 2009-08-27 18:08 李佳 閱讀(217) | 評論 (0)編輯 收藏
            靠 什么事情都不先說清楚  需求也不說  就是讓你做   做完了 再說需求   靠...
            好煩   今天又得改程序...

            沒事好好看看軟件架構方面的書吧   被經理能整死

            學習中...痛苦中...

            posted @ 2009-08-24 09:58 李佳 閱讀(109) | 評論 (0)編輯 收藏
            當數據庫的選項允許為空時  而且此時內容為空
            則一下查詢會出錯
            strPosInfo= m_pRecordset->GetCollect("posInfo");       
            更加奇怪的是  catch(...)也抓不到異常
            今天碰著個問題算是頭弄大了  最后終于弄好了
            原因很簡單

            報錯的問題

            錯誤原因   在GetCollct返回了NULL之后   由于strPosInfo是一個CString對象  編譯器自動將_varint_t轉換成CString  而此時_varint_t為空  因此轉換失敗  不是數據庫的異常 而且根本就不是異常 所以  catch(…)無法抓住

            解決方案

            在可能為空的地方 利用

             1 _variant_t var;
             2 
             3 var= m_pRecordset->GetCollect("posInfo");          //可能為空
             4 
             5 if(var.vt != VT_NULL)   //為NULL
             6 
             7        strPosInfo = var;
             8 
             9 else
            10 
            11        strPosInfo = “”;

            就可以檢測NULL值了




            posted @ 2009-08-21 16:01 李佳 閱讀(2436) | 評論 (1)編輯 收藏
            服務器又出問題了   實在是沒辦法了  因為那得錯誤我這邊沒辦法重現  也不知道如何寫dump文件 而經理又不讓安裝VS  沒辦法  最后只能使用WinDbg 來調試了  網上找了相關資料
            先Copy下來吧  以后還是會用的   還有  要買書了  在學校的時候看見了<軟件調試>  只是覺得厚   沒怎么看  現在后悔了...  要買了

            先Copy資料吧


            本篇文章得主要目的是介紹WINDBG的主要功能以及相關的命令。關于這些命令的詳細語法,請參閱幫助文件。對文章中提到的許多命令,WINDBG有相應的菜單選項。
            1.如何得到幫助

             在命令(Command)窗口中輸入.hh 命會調出幫助文件令。

             .hh keyword

            會顯示關于keyword的詳細命令。

            2.啟動Debugger

             Windbg可以用于如下三種調試:

             a.遠程調試:你可以從機器A上調試在機器B上執行的程序。具體步驟如下:

            ? 在機器B上啟動一個調試窗口(Debug Session)。你可以直接在Windbg下運行一個程序或者將Windbg附加(Attach)到一個進程。

            ? 在機器B的Windbg命令窗口上啟動一個遠程調試接口(remote):

            .server npipe:pipe=PIPE_NAME

            PIPE_NAME是該接口的名字。

            ? 在機器A上運行:

            windbg –remote npipe:server=SERVER_NAME,pipe=PIPE_NAME

            SERVER_NAME是機器B的名字。

            b.Dump文件調試:如果在你的客戶的機器上出現問題,你可能不能使用遠程調試來解決問題。你可以要求你的用戶將Windbg附加到出現問題的進程上,然后在命令窗口中輸入:

            .dump /ma File Name

            創建一個Dump文件。在得到Dump文件后,使用如下的命令來打開它:

            windbg –z DUMP_FILE_NAME

            c.本地進程調試:你可以在Windbg下直接運行一個程序:

            Windbg “path to executable” arguments

            也可以將Windbg附加到一個正在運行的程序:

            Windbg –p “process id”

            Windbg –pn “process name”

            注意有一種非侵入(Noninvasive)模式可以用來檢查一個進程的狀態并不進程的執行。當然在這種模式下無法控制被調試程序的執行。這種模式也可以用于查看一個已經在Debugger控制下運行的進程。具體命令如下:

            Windbg –pv –p “process id”

            Windbg –pv –pn “process name”


            ------------------------------------------------------------

            調試多個進程和線程

             如果你想控制一個進程以及它的子進程的執行,在Windbg的命令行上加上-o選項。Windbg中還有一個新的命令.childdbg 可以用來控制子進程的調試。如果你同時調試幾個進程,可以使用 | 命令來顯示并切換到不同的進程。

            在同一個進程中可能有多個線程。~命令可以用來顯示和切換線程。

             ------------------------------------------------------------

            調試前的必備工作

            在開始調試前首先要做的工作是設置好符號(Symbols)路徑。沒有符號,你看到的調用堆?;旧虾翢o意義。Microsoft的操作系統符號文 件(PDB)是對外公開的。另外請注意在編譯你自己的程序選擇生成PDB文件的選項。如果設置好符號路徑后,調用堆棧看起來還是不對??梢允褂胠m, !sym noisy, !reload 等命令來驗證符號路徑是否正確。

            Windbg也支持源碼級的調試。在開始源碼調試前,你需要用.srcpath設置源代碼路徑。如果你是在生成所執行代碼的機器上進行調試,符號文 件中的源碼路徑會指向正確的位置,所以不需要設置源代碼路徑。如果所執行代碼是在另一臺機器上生成的,你可以將所用的源碼拷貝(保持原有的目錄結構)的一 個可以訪問的文件夾(可以是網絡路徑)并將源代碼路徑設為該文件夾的路徑。注意如果是遠程調試,你需要使用.lsrcpath來設置源碼路徑。

             ------------------------------------------------------------

            靜態命令:

            1.顯示調用堆棧:在連接到一個調試窗口后,首先要知道的就是程序當前的執行情況k* 命令顯示當前線程的堆棧。~*kb會顯示所有線程的調用堆棧。如果堆棧太長,Windbg只會顯示堆棧的一部分。.kframes可以用來設置缺省顯示框架數。

            2.顯示局部變量:接下來要做通常是用dv顯示局部變量的信息。CTRL+ALT+V可以切換到更詳細的顯示模式。關于dv要注意的是在優化過的代 碼中dv的輸出極有可能是不準確的。這時后你能做的就是閱讀匯編代碼來發現你感興趣的值是否存儲在寄存器中或堆棧上。有時后當前的框架(Frame)上可 能找不到你想知道的數據。如果該數據是作為參數傳到當前的方法中的,可以讀一讀上一個或幾個框架的匯編代碼,有可能該數據還在堆棧的某個地址上。靜態變量 是儲存在固定地址中的,所以找出靜態變量的值較為容易。.Frame(或者在調用堆棧窗口中雙擊)可以用來切換當前的框架。注意dv命令顯示的是當前框架 的內容。你也可在watch窗口中觀察局部變量的值。

            3.顯示類和鏈表: dt可以顯示數據結構。比如dt PEB 會顯示操作系統進程結構。在后面跟上一個進程結構的地址會顯示該結構的詳細信息:dt PEB 7ffdf000。

            Dl命令可以顯示一些特定的鏈表結構。

            4.顯示當前線程的錯誤值:!gle會顯示當前線程的上一個錯誤值和狀態值。!error命令可以解碼HRESULT。

            5.搜索或修改內存:使用s 命令來搜索字節,字或雙字,QWORD或字符串。使用e命令來修改內存。

            6.計算表達式:?命令可以用來進行計算。關于表達式的格式請參照幫助文檔。使用n命令來切換輸入數字的進制。

            7.顯示當前線程,進程和模塊信息:!teb顯示當前線程的環境信息。最常見的用途是查看當前線程堆棧的起始地址,然后在堆棧中搜索值。!peb顯示當前進程的環境信息,比如執行文件的路徑等等。lm顯示進程中加載的模塊信息。

            8.顯示寄存器的值:r命令可以顯示和修改寄存器的值。如果要在表達式中使用寄存器的值,在寄存器名前加@符號(比如@eax)。

            9.顯示最相近的符號:ln Address。如果你有一個C++對象的指針,可以用來ln來查看該對象類型。

            10.查找符號:x命令可以用來查找全局變量的地址或過程的地址。x命令支持匹配符號。x kernel32!*顯示Kernel32.dll中的所有可見變量,數據結構和過程。

             

            11.查看lock:!locks顯示各線程的鎖資源使用情況。對調試死鎖很有用。

            12.查看handle:!handle顯示句柄信息。如果一段代碼導致句柄泄漏,你只需要在代碼執行前后使用!handle命令并比較兩次輸出的區別。有一個命令!htrace對調試與句柄有關的Bug非常有用。在開始調試前輸入:

            !htrace –enable

            然后在調試過程中使用!htrace handle_value 來顯示所有與該句柄有關的調用堆棧。

            13.顯示匯編代碼:u。

            ------------------------------------------------------------

            程序執行控制命令:

            1.設置代碼斷點:bp/bu/bm 可以用來設置代碼斷點。你可以指定斷點被跳過的次數。假設一段代碼KERNEL32!SetLastError在運行很多次后會出錯,你可以設置如下斷點:

            bp KERNEL32!SetLastError 0x100.

            在出錯后使用bl 來顯示斷點信息(注意粗體顯示的值):

            0 e 77e7a3b0 004f (0100) 0:*** KERNEL32!SetLastError

            重新啟動調試(.restart命令)并設置如下的斷點:

            bp Kernel32!SetLastError 0x100-0x4f

            Debugger會停在出錯前最后一次調用該過程的地方。

            你可以指定斷點被激活時Debugger應當執行的命令串。在該命令串中使用J命令可以用來設置條件斷點:

            bp `mysource.cpp:143` "j (poi(MyVar)”0n20) ''; 'g' "

            上面的斷點只在MyVar的值大于32時被激活(g命令

            條件斷點的用途極為廣泛。你可以指定一個斷點只在特殊的情況下被激活,比如傳入的參數滿足一定的條件,調用者是某個特殊的過程,某個全局變量被設為特殊的值等等。

            2.設置內存斷點:ba可以用來設置內存斷點。調試過程中一個常見的問題是跟蹤某些數據的變化。如下的斷點:

            ba w4 0x40000000 "kb; g"

            可以打印出所有修改0x40000000的調用堆棧。

            3.控制程序執行:p, pa,t, ta等命令可以用來控制程序的執行。

            4.控制異常和事件處理:Debugger的缺省設置是跳過首次異常(first chance expcetion),在二次異常(second chance exception)時中斷程序的執行。sx命令顯示Debugger的設置。sxe和sxd可以改變Debugger的設置。

            sxe clr

            可以控制Debugger在托管異常發生時中斷程序的執行。常用的Debugger事件有:

            av 訪問異常

            eh C++異常

            clr 托管異常

            ld 模塊加載

            -c 選項可以用來指定在事件發生時執行的調試命令。

            powerwolf 發表于:2006.07.03 15:02
            reference url:  http://powerwolf.itpub.net/post/20237/130218


            特別要注意的就是!gle   這個命令相當于執行GetLastError()  而且還能查看內核的NTSTATUS

            問題剛剛解決了    最后出現的問題也找到了   但是錯誤原因大跌眼鏡   ------殺毒軟件...

            結論:
            雖然我們需要豐富的調試技巧  但是  經驗仍然是最重要的
            就像找工作一樣  學校里面你再牛   沒有經驗  你都比不過工作兩年的高中生

            posted @ 2009-08-20 11:51 李佳 閱讀(501) | 評論 (0)編輯 收藏
            僅列出標題
            共3頁: 1 2 3 
            <2016年10月>
            2526272829301
            2345678
            9101112131415
            16171819202122
            23242526272829
            303112345

            常用鏈接

            留言簿

            隨筆分類

            隨筆檔案

            文章檔案

            相冊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            亚洲国产精品无码久久SM| 精品国产乱码久久久久软件| 99久久这里只有精品| 日本免费久久久久久久网站| 日韩十八禁一区二区久久| 欧洲人妻丰满av无码久久不卡| 国产美女久久久| 99精品久久精品一区二区| 精品999久久久久久中文字幕 | 久久久久亚洲Av无码专| 久久免费国产精品一区二区| 久久久久久久精品妇女99| 久久国产精品久久| 无码人妻精品一区二区三区久久久 | 中文字幕无码免费久久| 国产精品久久久久乳精品爆| 久久精品午夜一区二区福利| 性高朝久久久久久久久久| 久久久久久综合一区中文字幕| 亚洲AV乱码久久精品蜜桃| 久久强奷乱码老熟女| 曰曰摸天天摸人人看久久久| 亚洲va久久久噜噜噜久久男同| 婷婷久久综合九色综合九七| 久久se这里只有精品| 久久91精品国产91久久户| 国内精品久久久久伊人av| 伊人久久大香线蕉av不卡 | 伊人久久精品影院| 久久夜色撩人精品国产| 9999国产精品欧美久久久久久 | 国产巨作麻豆欧美亚洲综合久久| 久久国产热精品波多野结衣AV| 18岁日韩内射颜射午夜久久成人 | 久久人人爽人人爽人人av东京热 | 久久精品国产亚洲AV高清热| 色综合久久无码中文字幕| 亚洲精品午夜国产VA久久成人| 久久香综合精品久久伊人| 伊人久久无码中文字幕| 久久精品国产精品亚洲毛片|