999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

X86匯編程序可視調(diào)試虛擬機(jī)的設(shè)計與實(shí)現(xiàn)

2012-07-25 11:06:38吳偉民劉沛昌
計算機(jī)工程與設(shè)計 2012年7期
關(guān)鍵詞:指令調(diào)試可視化

蘇 慶,吳偉民,黃 彪,劉沛昌,劉 聰

(廣東工業(yè)大學(xué) 計算機(jī)學(xué)院,廣東 廣州510006)

0 引 言

程序可視化[1]作為科學(xué)計算可視化[2]的一個重要分支,其主要特點(diǎn)體現(xiàn)于編程以及運(yùn)行環(huán)境可視化兩個方面[3]。目前,匯編語言編程在單片機(jī)應(yīng)用研發(fā)以及底層硬件驅(qū)動程序設(shè)計[4]開發(fā)等方面仍然存在普遍應(yīng)用。然而大多數(shù)匯編語言可視化編程開發(fā)工具僅局限于程序編輯可視化層次,并無將匯編語言的執(zhí)行過程進(jìn)行可視化呈現(xiàn)[5],使得用戶未能深入觀察程序的執(zhí)行過程,大大影響了匯編程序的開發(fā)以及調(diào)試效率[6]。

由此,本文應(yīng)用虛擬機(jī)設(shè)計理論[7]以及可視化技術(shù)相結(jié)合,設(shè)計并實(shí)現(xiàn)一個可視化匯編程序集成開發(fā)環(huán)境——X86VVM2[8],該環(huán)境具備從匯編程序編輯到程序動態(tài)調(diào)試各階段進(jìn)行全面可視化的特征。

1 X86VVM2內(nèi)核

作為可視化匯編程序集成開發(fā)環(huán)境的一個重要組成部分,X86VVM2虛擬機(jī)內(nèi)核對X86匯編源程序進(jìn)行詞法分析、語法分析、異常處理等處理過程,將源程序翻譯成可被X86VVM2內(nèi)核執(zhí)行的機(jī)器碼指令。X86VVM2內(nèi)核主要有如下4個主要功能:

(1)仿真實(shí)現(xiàn)X86匯編指令功能:包括匯編語言指令集的語義實(shí)現(xiàn)。

(2)解釋執(zhí)行X86匯編指令:執(zhí)行X86匯編指令流。

(3)異常處理:對詞法分析、語法分析及執(zhí)行過程中遇到的異常進(jìn)行處理。為方便程序設(shè)計者準(zhǔn)確而快速地定位程序的錯誤,X86VVM2將各個階段出現(xiàn)異常或錯誤所對應(yīng)的源代碼行號直接反饋給用戶。

(4)可視化接口:按照模塊化的開發(fā)思想,對內(nèi)核進(jìn)行類封裝,并為可視化層提供接口,方便可視化層對X86匯編語言執(zhí)行過程可視化。

X86VVM2是一個采用寄存器處理器架構(gòu)的可視化匯編程序集成開發(fā)環(huán)境。該環(huán)境在內(nèi)核內(nèi)置堆棧,堆棧操作指令及函數(shù)的調(diào)用直接依靠此堆棧,從而提高內(nèi)核處理速度,同時降低數(shù)據(jù)處理時候的難度。X86VVM2內(nèi)核架構(gòu)如圖1所示。

圖1 X86VVM2內(nèi)核架構(gòu)

匯編器對X86匯編程序進(jìn)行匯編;虛擬內(nèi)存存放匯編過后可被虛擬機(jī)執(zhí)行的機(jī)器碼;棧中存放執(zhí)行push、pop等堆棧操作指令及call指令后的數(shù)據(jù);虛擬CPU執(zhí)行虛擬內(nèi)存中的機(jī)器碼序列;符號表為機(jī)器碼生成、異常處理模塊及數(shù)據(jù)可視化提供原始信息。

X86VVM2首先將預(yù)編輯完畢的源程序存放到內(nèi)存的指定空間,經(jīng)詞法分析,語法分析等關(guān)鍵步驟,設(shè)置執(zhí)行程序的起始地址。虛擬機(jī)從起始地址開始執(zhí)行源程序。虛擬機(jī)解釋執(zhí)行一條指令時,可能需要進(jìn)行如下4個動作:

(1)取指 (Fetch):根據(jù)當(dāng)前pc寄存器值取出虛擬內(nèi)存中所對應(yīng)的指令;

(2)譯碼 (Translate):識別當(dāng)前指令的操作數(shù);

(3)分派 (Dispatch):執(zhí)行此條指令。

(4)停機(jī) (Halt):當(dāng)遇到停機(jī)指令或者程序出錯時,虛擬機(jī)停止解釋執(zhí)行匯編程序。

2 X86VVM2可視化

基于Bednarik[9]等人提出的程序可視化流程及前人對程序可視化的研究,視X86VVM2內(nèi)核的相關(guān)數(shù)據(jù)為可視化的原始數(shù)據(jù),通過相應(yīng)的可視化算法,將虛擬CPU寄存器值的變化及寄存器之間數(shù)據(jù)的交互、程序編輯、內(nèi)核棧中數(shù)據(jù)的動態(tài)變化及調(diào)試過程進(jìn)行可視化。

程序執(zhí)行時,通過內(nèi)核封裝的可視化接口,跟蹤內(nèi)核執(zhí)行的可視數(shù)據(jù)的變化,動態(tài)的反映在可視化界面中,從而實(shí)現(xiàn)源程序執(zhí)行過程的可視化。X86VVM2可視化功能主要包含如下幾個部分:

(1)CPU可視化:實(shí)現(xiàn)內(nèi)核CPU內(nèi)寄存器值的變化及寄存器之間數(shù)據(jù)交互的可視化。對于X86匯編語言,必須實(shí)現(xiàn)CPU寄存器的數(shù)據(jù)實(shí)時變化情況,包括各種通用寄存器、變址寄存器、堆棧寄存器、段寄存器、指令指針寄存器以及狀態(tài)標(biāo)志寄存器等。

(2)棧信息可視化:實(shí)現(xiàn)內(nèi)核棧中內(nèi)容的動態(tài)變換。X86匯編語言是基于棧式計算機(jī)模型定義,所以棧信息的實(shí)時顯示非常重要。

(3)數(shù)據(jù)信息可視化:顯示源程序中用戶自定義的邏輯段、變量、標(biāo)識符、子程序名稱以及函數(shù)的屬性。

(4)編輯可視化:向用戶提供程序代碼編輯交互界面,同時支持語法著色。同時,X86VVM2編輯可視化界面還支持?jǐn)帱c(diǎn)的動態(tài)設(shè)置。程序設(shè)計者只需要通過點(diǎn)擊編輯窗口最左邊的灰色框,即可在當(dāng)前點(diǎn)擊的位置設(shè)置斷點(diǎn)。

(5)調(diào)試可視化:通過可視化的人機(jī)交互設(shè)計,實(shí)現(xiàn)調(diào)試行為可視化。

X86VVM2整體執(zhí)行效果如圖2所示。圖中從左至右分別依次為CPU可視化窗口、堆棧信息顯示窗口、數(shù)據(jù)顯示窗口及編輯可視化窗口。可視界面中下面是信息顯示窗口,用于顯示程序異常提示信息及程序運(yùn)行的結(jié)果。

2.1 程序編輯可視化

X86VVM2采用類似于主流高級語言集成開發(fā)環(huán)境類似的著色方案,具有較高的用戶親和度。X86VVM2編輯可視化功能包括:語法著色、行號顯示及斷點(diǎn)設(shè)置:

(1)語法著色。為方便程序設(shè)計者編輯程序,X86VVM2對不同的單詞類型進(jìn)行語法高亮顯示。該著色方案以不同類型顏色值的十六機(jī)制表示形式區(qū)分各類單詞。其中關(guān)鍵字為0xFF00FF (棕色);常量為0x0000FF (黑色);偽碼為0x123456(粉紅色);注釋為0x00FF00(綠色);寄存器為0x00FF00(寶藍(lán)色)。

(2)行號顯示。X86VVM2直接將行號信息顯示在編輯可視化界面中。同時內(nèi)核運(yùn)行時,根據(jù)當(dāng)前運(yùn)行的指令定位代碼編輯框內(nèi)的指令,從而實(shí)現(xiàn)代碼跟蹤可視化。

(3)斷點(diǎn)設(shè)置。斷點(diǎn)功能是程序開發(fā)環(huán)境必須具備的基本程序調(diào)試功能。當(dāng)程序運(yùn)行過程中遇到斷點(diǎn)時,內(nèi)核首先獲取當(dāng)前設(shè)置斷點(diǎn)的行號信息,實(shí)現(xiàn)X86VVM2動態(tài)調(diào)試。

X86VVM2的編輯可視化窗口如圖3所示。X86VVM2對關(guān)鍵字、數(shù)字及注釋等進(jìn)行語法著色,同時在最左邊顯示當(dāng)前源代碼對應(yīng)的行號,方便了程序設(shè)計者對源代碼的閱讀,同時在圖中第20行和第27行出現(xiàn)的白色圓圈表示在當(dāng)前行設(shè)置斷點(diǎn),圖中顯示的是向內(nèi)核發(fā)出連續(xù)執(zhí)行命令時,程序運(yùn)行暫停在第一個斷點(diǎn),此時編輯框內(nèi)第20行的程序內(nèi)容被突出顯示。

圖2 X86VVM2集成開發(fā)環(huán)境界面

圖3 X86VVM2編輯可視化

2.2 CPU可視化

匯編程序具有直接訪問CPU寄存器的特點(diǎn)。X86VVM2的CPU信息可視化重點(diǎn)關(guān)注CPU內(nèi)部寄存器數(shù)據(jù)的變化及寄存器之間數(shù)據(jù)交互的動態(tài)可視化。寄存器數(shù)據(jù)的變化通過寄存器值紅色高亮的表現(xiàn)形式進(jìn)行體現(xiàn);寄存器之間數(shù)據(jù)的交互按照CPU內(nèi)寄存器在可視化界的布局,用紅色箭頭來表示數(shù)據(jù)交互的方向性。同時X86VVM2還將內(nèi)核當(dāng)前執(zhí)行的指令顯示在CPU可視化窗口中。

X86VVM2CPU信息可視化運(yùn)行過程如圖4所示。中間藍(lán)色的豎線模擬表示系統(tǒng)數(shù)據(jù)總線,寄存器之間的數(shù)據(jù)交互就通過此線。圖中的兩個紅色箭頭表示數(shù)據(jù)傳遞的方向,最下方的內(nèi)容表示當(dāng)前運(yùn)行的指令 (在實(shí)際運(yùn)行時,該指令是紅色字體標(biāo)示)。對指令進(jìn)行分析可知,可視化界面箭頭所表示的數(shù)據(jù)傳遞的方向正確。

圖4 CPU可視化效果

2.3 棧信息可視化

標(biāo)準(zhǔn)X86匯編語言中,當(dāng)遇到堆棧操作指令或函數(shù)調(diào)用指令時,棧中數(shù)據(jù)會發(fā)生變化,因此,將棧中數(shù)據(jù)及數(shù)據(jù)的變化進(jìn)行可視化,方便程序設(shè)計者對匯編程序的調(diào)試。

圖5是某個程序運(yùn)行過程中X86VVM2棧信息可視化截圖。棧頂?shù)奈恢秒S著程序找涉及堆棧操作指令及函數(shù)調(diào)用指令所引起的棧中數(shù)據(jù)變化而變化,從而實(shí)現(xiàn)棧的動態(tài)可視化。

2.4 程序調(diào)試可視化

調(diào)試可視化作為X86VVM2實(shí)現(xiàn)X86匯編語言執(zhí)行過程可視化中一個重要的模塊,程序設(shè)計者可以通過菜單或點(diǎn)擊工具按鈕的方式向內(nèi)核傳遞調(diào)試的動作。圖6展示的是X86VVM2的調(diào)試可視化接口。

X86VVM2采用指令中斷形式,程序設(shè)計者可以在編輯可視化界面設(shè)置斷點(diǎn),內(nèi)核根據(jù)斷點(diǎn)設(shè)置的情況中斷指令的運(yùn)行。X86VVM2支持單步調(diào)試和連續(xù)調(diào)試兩種調(diào)試方式。調(diào)試過程中,根據(jù)當(dāng)前運(yùn)行指令的行號來判斷是否當(dāng)前行號是否在斷點(diǎn)數(shù)組中,如果存在則暫停指令的運(yùn)行,如果不存在,則連續(xù)運(yùn)行虛擬內(nèi)存中的指令。調(diào)試程序時,通過獲取存放在虛擬內(nèi)存中指令的行號信息,動態(tài)定位編輯框中的內(nèi)容,實(shí)現(xiàn)調(diào)試過程中代碼跟蹤可視化。

程序流程反映程序員的設(shè)計思路,所以無論是對程序流程作靜態(tài)可視化還是動態(tài)可視化,都可以起到協(xié)助程序員對設(shè)計思路的逐步形成以及求精、優(yōu)化的重要作用。其中程序流程靜態(tài)可視化可以為程序員優(yōu)化設(shè)計算法提供輔助;而程序流程動態(tài)可視化則可以迅速定位至程序熱點(diǎn)區(qū)域,以及該熱點(diǎn)區(qū)域在設(shè)計思路中的邏輯位置,對提高程序效率具有重要意義。

程序流程可視化[10]同時還為程序的調(diào)試和進(jìn)一步理解提供了一種重要的輔助手段。流程圖的自動生成無疑給程序編寫人員帶來了很大的便利。根據(jù)X86匯編語言的特點(diǎn),為了更好地展示匯編函數(shù)調(diào)用的動作,X86VVM2實(shí)現(xiàn)了一個具有翻頁效果的流程圖,其實(shí)現(xiàn)過程分為以下3個步驟:

(1)基本塊劃分及建立鏈表。將源程序劃分為各個邏輯上獨(dú)立的模塊,并在內(nèi)核建立其相關(guān)數(shù)據(jù)結(jié)構(gòu),使基本塊按順序連接起來,形成一條靜態(tài)鏈表。

(2)繪制主流程圖及子流程。從模塊鏈表中查找屬于主程序的模塊,并將其依次繪制于流程圖顯示界面;繼而從模塊鏈表中找出當(dāng)前子函數(shù)所對應(yīng)的模塊,并顯示在流程圖顯示界面中。

(3)分頁效果實(shí)現(xiàn),函數(shù)調(diào)用或用戶點(diǎn)擊子函數(shù)時,流程圖界面顯示子程序流程,子函數(shù)運(yùn)行完時或用戶點(diǎn)擊主流程圖時,流程圖界面顯示主程序流程圖,實(shí)現(xiàn)流程圖的動態(tài)切換,實(shí)現(xiàn)流程圖的翻頁。

2.4.1 模塊劃分及建立靜態(tài)鏈表

按照匯編指令是否影響程序執(zhí)行流程流程圖,將匯編指令分為見表1的5種類型。

表1 匯編指令分類

通過遍歷保存在虛擬內(nèi)存中的指令,建立起模塊靜態(tài)鏈表。建立X86VVM2模塊鏈表的算法描述如下:

(1)保存跳轉(zhuǎn)指令 (包括條件跳轉(zhuǎn)指令和無條件跳轉(zhuǎn)指令)的行號及其跳轉(zhuǎn)的地址 (即行號)。非函數(shù)調(diào)用其地址保存在m_addrList數(shù)組中,函數(shù)調(diào)用的地址保存在m_callArray數(shù)組中。

(2)對上述m_addrList和m_callArray數(shù)組中的內(nèi)容去掉重復(fù)值,并按小到大排序。

(3)重新遍歷虛擬內(nèi)存中的指令數(shù)組,填充各個模塊的信息,建立模塊鏈表。由于X86VVM2將模塊的5種類型都看作獨(dú)立的基本塊,因此m_addrList[i]和m_addrList[i+1]都當(dāng)作一個模塊進(jìn)行處理,同時m_addrList[i]和m_addrList[i+1]之間的內(nèi)容也當(dāng)作一個模塊。

例如對于下列匯編代碼片段:

假設(shè)已經(jīng)建立好指令數(shù)組。首先找出指令數(shù)組中jmp,call,jz指令所在的行號和跳轉(zhuǎn)地址,分別為3、7、11和6、15、10。將這些地址去掉重復(fù)值后進(jìn)行排序,結(jié)果為3,6,7,10,11,15。然后按照以排序好的數(shù)組將源程序分為多個模塊,數(shù)組相鄰兩項之間的數(shù)子組成一個模塊。如1—2,4—5,8—9,12—14。由于X86VVM2將每條跳轉(zhuǎn)指令都作為單獨(dú)的一個基本塊處理,所以上述代碼分為1—2,3,4—5,6,7,8—9,10,11,12—14,15共10個基本塊。

2.4.2 流程圖的繪制

流程圖的繪制包括主流程圖的繪制以及子流程圖的繪制。

在流程圖的繪制中,無條件轉(zhuǎn)移指令、函數(shù)調(diào)用指令以及返回指令共享同一中無條件轉(zhuǎn)移節(jié)點(diǎn)。流程圖的繪制過程算法如下:

(1)繪制程序開始節(jié)點(diǎn)。

(2)繪制當(dāng)前流程圖頁面確定的顯示模塊。

(3)如果入到子流程圖的入口,則進(jìn)入子流程圖的繪制。

(4)繪制結(jié)束節(jié)點(diǎn)。

(5)繪制開始節(jié)點(diǎn)、結(jié)束節(jié)點(diǎn)及模塊與模塊之間的連接。

在X86VVM2運(yùn)行過程中遇到函數(shù)調(diào)用時,流程圖界面顯示子程序流的流程圖,子函數(shù)運(yùn)行完時,流程圖顯示界面顯示主函數(shù)流程圖。X86VVM2的流程圖翻頁顯示效果借助棧數(shù)據(jù)結(jié)構(gòu),其實(shí)現(xiàn)分為如下3個步驟:

(1)將當(dāng)前頁面繪制過程中保存的第一模塊的首地址壓棧 (push)。

(2)確定被調(diào)用的子函數(shù)。

(3)畫出子程序流程圖。

子程序調(diào)用返回時,將先出棧,然后畫出以此棧頂節(jié)點(diǎn)開始的主程序流程圖。

3 實(shí)驗與分析

以一個十六進(jìn)制形式向屏幕打印輸出十進(jìn)制數(shù)字的匯編程序print.asm為例,展示其代碼流程圖的可視化效果。

當(dāng)程序設(shè)計者使用單步運(yùn)行命令模式進(jìn)行調(diào)試時,首先缺省顯示print.asm主程序的流程圖,如圖7(a)所示。

實(shí)體粗線方框 (在實(shí)際運(yùn)行過程中,該方框為較醒目的紅色,易為方便用戶識別)表示的模塊指示當(dāng)前運(yùn)作的模塊,當(dāng)程序執(zhí)行至第6行,即調(diào)用show_msg子函數(shù)時,則自動由主程序流程圖切換至show_msg子函數(shù)的子程序流程圖,如圖7(b)所示。

由于X86VVM2的可視化流程圖功能向用戶提供不同粒度的可視化效果,令用戶可在程序調(diào)試過程中實(shí)時在不同層次的流程圖之間自由切換。

print.asm程序源代碼如下:

圖7 可視化流程圖效果

4 結(jié)束語

本文應(yīng)用虛擬機(jī)構(gòu)建技術(shù)以及可視化技術(shù)構(gòu)建的匯編程序集成開發(fā)環(huán)境X86VVM2具有將匯編程序開發(fā)各個階段全面進(jìn)行可視化,以輔助用戶進(jìn)行可視編程以及調(diào)試的特性。而程序調(diào)試過程可視則提供不同粒度程序流程圖供程序設(shè)計者使用,并且與程序執(zhí)行過程密切結(jié)合,實(shí)時對比當(dāng)前程序執(zhí)行指令在邏輯視圖中的位置。

另一方面,X86VVM2采用自行開發(fā)的虛擬機(jī)內(nèi)核,可對匯編程序代碼片段直接解釋執(zhí)行,適用于軟件逆向工程后反匯編結(jié)果的動態(tài)跟蹤調(diào)試。

[1]LI Kai-lun,WU Wei-min,SU Qing.Analysis and implementation of visualization Java class loader [J].Computer Engineering and Design,2006,27 (20):3909-3912 (in Chinese).[黎凱倫,吳偉民,蘇慶.可視化Java類裝載器的分析與實(shí)現(xiàn)[J].計算機(jī)工程與設(shè)計,2006,27 (20):3909-3912.]

[2]Ben Fry.Visualizing Data.The United States:O’Reilly Media,Inc[S].2009:2-6.

[3]SU Qing.Research and realization for dynamic visualization technology of Java program and object relation [D].Guangzhou:Guangdong University of Technology,2006 (in Chinese).[蘇慶.Java程序及對象關(guān)系的動態(tài)可視技術(shù)研究與實(shí)現(xiàn) [D].廣州:廣東工業(yè)大學(xué),2006.]

[4]Muhammad Ali Mazidi,Janice G Mazidi,Danny Causey.The 80x86IBM PC and compatible computers volumes I &&II assembly language,design,and interfacing [M].5th ed.TheUnited States:Prentice Hall,2009:54-57.

[5]LIAO Hua-yun.Research and realization for X86visual virtual machine[D].Guangzhou:Guangdong University of Technology,2005(in Chinese).[廖華赟.X86可視虛擬機(jī)的研究與實(shí)現(xiàn) [D].廣東廣州:廣東工業(yè)大學(xué),2005.]

[6]SU Qing,WU Wei-min,LI Kai-lu.Design and realization of structural software automated test [J].Computer Engineering and Design,2006,27 (8):1417-1419 (in Chinese). [蘇慶,吳偉民,黎凱倫.結(jié)構(gòu)性自動軟件測試的設(shè)計方法與實(shí)現(xiàn)[J].計算機(jī)工程與設(shè)計2006,27 (8):1417-1419.]

[7]Jim Smith,Ravi Nair.Virtual machines:Versatile platforms for systems and processes [M].The United States:Morgan Kaufmann,2005:455-458.

[8]HUANG Biao,Design and implementation of visual virtual machine X86VVM2 [D].Guangzhou:Guangdong University of Technology,2011(in Chinese).[黃彪.可視虛擬機(jī)X86VVM2的設(shè)計 與實(shí)現(xiàn) [D].廣州:廣東工業(yè)大學(xué),2011.]

[9]Bednarik R,Moreno A,Myller N,et al.Smart program visualization technologies:Planning a next step [C].Taiwan:Proceedings of the Fifth IEEE International Conference on Advanced Learning Technologies,2005:717-721.

[10]Xie Weibo,F(xiàn)u Ting.Design and implementation of the virtual machine constructing on register [C].International Conference on Computer Science and Software Engineering,2008:424-430.

猜你喜歡
指令調(diào)試可視化
聽我指令:大催眠術(shù)
基于CiteSpace的足三里穴研究可視化分析
基于Power BI的油田注水運(yùn)行動態(tài)分析與可視化展示
云南化工(2021年8期)2021-12-21 06:37:54
基于CGAL和OpenGL的海底地形三維可視化
“融評”:黨媒評論的可視化創(chuàng)新
傳媒評論(2019年4期)2019-07-13 05:49:14
ARINC661顯控指令快速驗證方法
LED照明產(chǎn)品歐盟ErP指令要求解讀
電子測試(2018年18期)2018-11-14 02:30:34
基于航拍無人機(jī)的設(shè)計與調(diào)試
電子制作(2018年12期)2018-08-01 00:47:44
FOCAS功能在機(jī)床調(diào)試中的開發(fā)與應(yīng)用
無線通信中頻線路窄帶臨界調(diào)試法及其應(yīng)用
電子制作(2017年19期)2017-02-02 07:08:38
主站蜘蛛池模板: 99精品免费欧美成人小视频| 亚洲国产日韩视频观看| 亚洲国产第一区二区香蕉| 嫩草在线视频| 国产一在线观看| 国产成人高清精品免费| 国产欧美视频在线观看| 波多野结衣无码视频在线观看| 亚洲欧美综合另类图片小说区| 国产a v无码专区亚洲av| 91九色国产porny| 欧美a在线| 毛片在线看网站| 九九热视频精品在线| 日韩欧美一区在线观看| 91精品国产综合久久香蕉922| 亚洲日韩高清无码| 久久亚洲精少妇毛片午夜无码| 99热这里只有免费国产精品| 亚洲精品手机在线| 色婷婷色丁香| 巨熟乳波霸若妻中文观看免费| 中文字幕乱码二三区免费| 国产一区二区精品福利| 欧美国产综合色视频| 九九精品在线观看| 亚洲人成影院在线观看| 91精品人妻互换| 亚洲高清在线播放| 欧美一级专区免费大片| 久久精品亚洲中文字幕乱码| 国产人人干| 任我操在线视频| 欧美第二区| 成人一级免费视频| 亚洲aaa视频| 国产网站一区二区三区| 亚洲免费三区| 欧美日韩国产在线观看一区二区三区| 91精品国产综合久久不国产大片| 国产在线视频自拍| 永久免费av网站可以直接看的 | 99久久精品国产麻豆婷婷| 久久国产亚洲欧美日韩精品| 亚洲欧美激情小说另类| 国产美女精品一区二区| 国产黄在线免费观看| 国产精品久久久久久久久久久久| 日韩在线第三页| 99久久人妻精品免费二区| 亚洲精品成人片在线观看| 丁香五月亚洲综合在线 | 色综合综合网| 国产亚洲精品va在线| 天天综合天天综合| 亚洲国产成熟视频在线多多 | 国产1区2区在线观看| 国产精品福利导航| 激情乱人伦| 国产久草视频| 国产自在线播放| 九色免费视频| 久热中文字幕在线| 免费jizz在线播放| 亚洲天堂网站在线| 欧洲欧美人成免费全部视频 | 国产高清无码麻豆精品| 美女一级毛片无遮挡内谢| 污网站免费在线观看| 亚洲一区色| 丰满少妇αⅴ无码区| 欧美亚洲日韩不卡在线在线观看| 97在线碰| 永久在线播放| 亚洲第一天堂无码专区| 亚洲视频欧美不卡| 国产精品亚洲综合久久小说| 国产原创第一页在线观看| 日本免费新一区视频| 婷婷六月在线| 91美女视频在线观看| 美女一区二区在线观看|