• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于ASM的Java作業(yè)輔助批閱工具的實現(xiàn)

    2020-02-14 05:58:28嚴(yán)忠林
    計算機(jī)時代 2020年1期
    關(guān)鍵詞:計算機(jī)輔助教學(xué)

    嚴(yán)忠林

    摘 ?要: 學(xué)習(xí)編程離不開大量的實踐訓(xùn)練,但批閱學(xué)生提交的代碼卻是一件相當(dāng)費神耗時的工作。Java教學(xué)大都圍繞其功能強(qiáng)大的標(biāo)準(zhǔn)類庫來組織安排,并通過相應(yīng)練習(xí)使學(xué)生熟練掌握。為了提高效率,設(shè)計了一個作業(yè)輔助批閱工具,它能對Java類文件進(jìn)行自動修改,在運(yùn)行時獲取關(guān)鍵類庫的使用信息,了解它們的調(diào)用頻次、先后次序、所用參數(shù)及返回值,可幫助理解程序邏輯,評判學(xué)生對教學(xué)內(nèi)容的掌握程度。

    關(guān)鍵詞: Java類文件,ASM,代碼批閱,計算機(jī)輔助教學(xué)

    中圖分類號:TP399 ? ? ? ? ?文獻(xiàn)標(biāo)識碼:A ? ? 文章編號:1006-8228(2020)01-53-04

    Abstract: Coding is essential for learning a new programming language. However, for the instructors, it is very time-consuming and tedious to read over all of the code submitted by the students. The syllabus of Java programming consists of using its powerful standard libraries, accompanied with corresponding practical coding projects. A tool is designed to help the instructors to improve their code review efficiency. This tool is able to automatically modify the Java class files and return the usage of the class libraries, including their calling frequency, calling order, parameters and return values. This tool is helpful for understanding the logic of the code from students and judging their level of understanding.

    Key words: Java class file; ASM; code review; CAI

    0 引言

    Java多年來一直是軟件開發(fā)的首選語言,也是計算機(jī)專業(yè)學(xué)習(xí)的重點,對相關(guān)知識和開發(fā)能力都有較高要求,因此需要安排充實的教學(xué)內(nèi)容,進(jìn)行有效的訓(xùn)練實踐。對于語法已入門的學(xué)生,教學(xué)通常是圍繞著各種類庫展開的。特別是JDK提供的標(biāo)準(zhǔn)類庫,功能豐富全面、使用方便高效。從輸入輸出到集合框架、多線程、網(wǎng)絡(luò)、數(shù)據(jù)庫,各種功能都是通過使用相應(yīng)對象,調(diào)用適當(dāng)方法來實現(xiàn)的。即使是JavaEE、云計算等進(jìn)階內(nèi)容,也大都?xì)w結(jié)為對特定類庫和框架的學(xué)習(xí)。這些內(nèi)容的教學(xué)都需要有針對性地安排大量實踐,而學(xué)生的掌握程度,也要通過批閱提交的作業(yè),查看相應(yīng)API的使用情況才能知曉。因此準(zhǔn)確全面、高效及時地處理學(xué)生作業(yè),就變得非常重要。

    閱讀他人程序,從來就不輕松。那些真正能訓(xùn)練和體驗面向?qū)ο缶幊痰淖鳂I(yè),處理的問題和對應(yīng)的程序結(jié)構(gòu)都較復(fù)雜,代碼規(guī)模大,處理流程多變,運(yùn)行邏輯不是一眼能看清的。況且每個學(xué)生都有自己的編程風(fēng)格和習(xí)慣,審閱這些代碼相當(dāng)勞心費力,如班級的人數(shù)再多一點,就非常辛苦了。過去的應(yīng)對辦法,要么是不管代碼只看最后運(yùn)行結(jié)果,要么是僅抽選少數(shù)幾份作業(yè)批閱。它們都難以切實了解學(xué)生的學(xué)習(xí)情況,對教學(xué)效果的評估很容易產(chǎn)生偏差。而且如被學(xué)生察覺這種狀況,對師生間的信任、交流、配合也是有害的。

    那么如何才能既省時省力,又全面準(zhǔn)確地檢查學(xué)生的作業(yè)情況呢?我們的建議是批閱時多關(guān)注作為教學(xué)重點的那些核心API的使用,因為作業(yè)的目的就是要通過訓(xùn)練來掌握它們,它們通常也是程序處理的關(guān)鍵步驟。當(dāng)然收集這些信息應(yīng)該極其方便,最好是全自動的,不用在文本中搜索查找。我們設(shè)計了一個工具達(dá)到此目的,它會在程序運(yùn)行中虛擬機(jī)執(zhí)行類裝載時對某些指令作適當(dāng)修改,讓它在完成相應(yīng)操作的同時也輸出必要信息。這樣程序一運(yùn)行,使用了哪些API、其順序頻度、具體數(shù)據(jù)等一目了然,從中不難推測它的設(shè)計思路,明確相關(guān)內(nèi)容的掌握程度。

    1 類文件結(jié)構(gòu)和ASM工具

    要修改Java虛擬機(jī)指令,必須對Java類文件結(jié)構(gòu)有所了解。它有統(tǒng)一緊湊的層次格式[1],簡化后的結(jié)構(gòu)如圖1所示,包含了類本身、全部的字段成員和方法成員信息,大量細(xì)節(jié)依靠相關(guān)屬性來描述,所有常數(shù)和文字信息都通過對常量池的下標(biāo)引用來表達(dá)。

    我們要修改的代碼在相應(yīng)方法的Code屬性中,主要部分是由bytecode順序排列形成的字節(jié)數(shù)組,其中既有分支轉(zhuǎn)移及異常捕捉等復(fù)雜結(jié)構(gòu),又隱含了運(yùn)行中對局部變量和操作數(shù)棧的反復(fù)使用。它還包含多種屬性,有局部變量的相關(guān)信息、程序行與代碼的對應(yīng)關(guān)系、還有程序員相當(dāng)陌生的程序裝載時的代碼驗證支持。它們相互聯(lián)系對照,要直接在其中修改代碼,既困難又易錯。為此我們借用了一個使用廣泛、高效方便的開源工具ASM。

    ASM是Java字節(jié)碼的分析、生成、變換工具[2],它對類內(nèi)成員的增刪改、對代碼內(nèi)各指令的查找變換都進(jìn)行了優(yōu)化,隱藏了對常量池的操作,允許引入指令跳轉(zhuǎn)、劃定區(qū)域所需要的地址標(biāo)號,能自動計算運(yùn)行時Frame的容量、代碼驗證用的StackMapTable等。針對類文件的復(fù)雜結(jié)構(gòu),ASM采用Visitor設(shè)計模式,提供了基于事件和基于對象的兩套API。前者簡單快捷,但必須按序、即時地處理類內(nèi)各元素。后者在內(nèi)存中將各元素組織成樹型結(jié)構(gòu),便于根據(jù)上下文自由修改。ASM提供下列核心部件[3]。

    ● ClassVisitor、FieldVisitor、MethodVisitor等抽象類:定義了處理類內(nèi)各種元素的visit方法簽名,用戶通過子類可實現(xiàn)對類內(nèi)部各種成員的過濾、變換、增補(bǔ)等操作。它們還可接受另一Visitor對象,組成處理鏈,實現(xiàn)對元素的后續(xù)處理。

    ● ClassNode、FieldNode、MethodNode:是以上各Visitor的子類,定義了記錄類內(nèi)部各種元素的數(shù)據(jù)結(jié)構(gòu)和對應(yīng)的visit方法,用于實現(xiàn)基于對象的處理方式,在變換修改后還能用accept方法發(fā)起后續(xù)處理。

    ● ClassReader:它有accept方法,能接受Visitor對象,并執(zhí)行對指定類文件內(nèi)部結(jié)構(gòu)的解析,進(jìn)而驅(qū)動該對象執(zhí)行相應(yīng)方法進(jìn)行處理。

    ● ClassWriter:是ClassVisitor的子類,執(zhí)行相應(yīng)方法能構(gòu)造出對應(yīng)類內(nèi)元素的二進(jìn)制表示,最后調(diào)用toByteArray方法,即可獲得完整的類文件。

    使用ASM時要將Reader、自定義的Visitor和Writer串接在一起,有時甚至形成多路結(jié)構(gòu),共同完成較復(fù)雜的處理。圖3就是對作業(yè)代碼進(jìn)行修正變換所采用的結(jié)構(gòu),它會在代碼中搜尋指定的指令和結(jié)構(gòu),進(jìn)行必要的修改與添加。

    2 類文件的修改變換

    2.1 方法調(diào)用指令及變換方案

    程序中使用類庫主要是通過調(diào)用它提供的方法。Java虛擬機(jī)有5種方法調(diào)用指令,INVOKEVIRTUAL和INVOKEINTERFACE分別調(diào)用類內(nèi)定義和接口定義的動態(tài)綁定方法;INVOKESPECIAL調(diào)用無需動態(tài)綁定的方法;它們都通過某個對象執(zhí)行,INVOKESTATIC調(diào)用不使用對象的類方法;INVOKEDYNAMIC目前除了lambda表達(dá)式外,Java程序中并不使用。這些指令內(nèi)都標(biāo)明了方法的名稱、類型及所在類在常量池中的索引,因此在代碼中查找和修改特定的調(diào)用指令是比較簡單的。

    Java虛擬機(jī)執(zhí)行這些指令時都會在當(dāng)前線程的堆棧頂創(chuàng)建一個Frame作為運(yùn)行環(huán)境,其中包含局部變量區(qū)和操作數(shù)棧。方法調(diào)用指令前應(yīng)先有指令將所需參數(shù)按序壓入操作數(shù)棧,如是對象方法,首個參數(shù)一定是隱含的this引用。調(diào)用執(zhí)行時這些參數(shù)被轉(zhuǎn)錄至新的Frame,作為前幾個局部變量,在代碼中得到處理。調(diào)用完成后將撤消該Frame,如有返回結(jié)果,它會出現(xiàn)在原Frame的操作數(shù)棧頂。

    要在使用指定的API時獲得信息,就要找到對應(yīng)調(diào)用指令加以修改。比如對于正則表達(dá)式,通常關(guān)心其模式字符串的使用是否正確,這就要考察Pattern類的compile方法。最簡單的辦法是將該調(diào)用指令替換為對名為_compile的一個新方法的調(diào)用,由它再去調(diào)用原來的Pattern.compile,但額外會輸出需要的信息,比如作為參數(shù)的模式字符串等。新方法保持與原方法的參數(shù)及返回完全一致,這樣調(diào)用指令前后無需再作其他修改,只要在代碼中引入新的_compile方法就可以了。使用這種修改調(diào)用指令的方法就可方便地獲取所有要關(guān)注的API的使用信息。

    除了主動調(diào)用類庫的方法外,應(yīng)用程序可能還要提供某些接口或抽象類規(guī)定的實現(xiàn)代碼,比如Comparator接口就需要完成compare方法,它是被調(diào)用的。有時候了解它們的執(zhí)行,考察其參數(shù)和返回結(jié)果,對理解整個程序也很有意義。為此可使用另一種替換方法,假如要了解compare方法的被調(diào)用情況,可將類文件中的原實現(xiàn)代碼改名為_compare,另生成一個替代的compare方法,它會調(diào)用被改名的_compare來實現(xiàn)功能,但還能輸出需要的信息,這樣就能知道比較操作的時機(jī)、次數(shù)、每次比較的值和結(jié)果等。

    2.2 標(biāo)注變換點

    采用這種方案,必須事先聲明關(guān)注哪些方法,怎么輸出信息,為此要按圖2的樣例代碼所示定義CheckItems類。它通過一些自定義的標(biāo)注指出關(guān)注的方法,@Item1和@Item2分別針對上述主動調(diào)用和被動調(diào)用的情形。它們都要寫出完整的方法名,后面再緊跟處理方法,其中除了執(zhí)行原本的調(diào)用外,還說明怎么輸出信息。這些引入的代碼會按前述方案進(jìn)行處理,有些要改名,會用無沖突的名字代替。但這些方法的參數(shù)和返回類型必須和原方法完全一致,由于其中所有的方法調(diào)用都改換成了類方法調(diào)用,所以如果原來是對象方法,其隱含的this引用也要作為第一個參數(shù)顯式寫出,如圖2所示。

    CheckItems的父類是Check,它為處理和保存調(diào)用信息提供了一些通用方法。

    ● 打開并管理一輸出流,提供print()和println()等方法,用來記錄需要的信息。

    ● 提供fline()方法,返回調(diào)用點所在的源文件名和行號,可幫助區(qū)分同一方法在不同地點的調(diào)用,也有利于源文件閱讀時的查找。

    ● 如果參數(shù)或返回值是基本類型或字符串,可直接輸出,其意義很明晰。但對引用型變量t,則應(yīng)使用obj(t)方法,它返回一個由類型和序號構(gòu)成的、較容易理解的名稱,如Thread1、Pattern3等,還保證同一引用一定獲得同一名稱,有助于在考察流程時確定各對象前后的同一性。

    ● 如果對象t是自定義類型,還可用val(t)獲得其內(nèi)部各字段的名字和值,比如對學(xué)生定義的日期類型,可能會輸出{year:2019,month:1,day:1},這樣可以切實了解代碼運(yùn)行中的數(shù)據(jù)細(xì)節(jié)及其變化,對分析、理解程序是非常必要的。

    如果要考察特定對象的生成情況,也可在其構(gòu)造方法的調(diào)用指令中,進(jìn)行類似地修改替換,獲得信息輸出。但構(gòu)造方法在類文件中被命名為,不是合法的Java標(biāo)識符,需要做些特殊處理。如圖2樣例代碼中的new Thread()所示,標(biāo)注中仍指明替換方法,但代碼中用newobj()代替,它只是占位符,實際變換后仍改為調(diào)用,當(dāng)然在此前還要添加指令完成相應(yīng)參數(shù)在操作數(shù)棧的準(zhǔn)備。

    在CheckItems類中還可根據(jù)需要引入一些狀態(tài)變量來控制信息輸出。比如對循環(huán)中的操作,有時只要查看前幾次調(diào)用或最后的調(diào)用,有時只需統(tǒng)計調(diào)用次數(shù),通過引入變量就能實現(xiàn)這些控制。圖2的樣例代碼就統(tǒng)計了compare方法的調(diào)用次數(shù),并僅對前三次輸出。由此需引入對這些狀態(tài)變量進(jìn)行初始化和終極處理的begin和end方法,會在每份作業(yè)批閱的開始和結(jié)尾處執(zhí)行。

    對多線程相關(guān)作業(yè),常常還關(guān)心用synchronized指示的對象鎖的狀態(tài)。該保留字在語法上有兩種用法:置于方法定義前或組成一個代碼塊,對應(yīng)地在類文件中也有兩種處置[4]:在對應(yīng)方法的標(biāo)記中標(biāo)志;用MONITORENTER/MONITOREXIT指令劃出加鎖區(qū)間,虛擬機(jī)運(yùn)行時會相應(yīng)的進(jìn)行加/解鎖操作。批閱作業(yè)時如希望了解這些情況,可在CheckItems類中加@LockInfo標(biāo)注,代碼處理時就會在合適位置插入指令,執(zhí)行時就可獲得加/解鎖的時機(jī)、運(yùn)行的線程、被鎖的對象等信息。

    批閱學(xué)生作業(yè)當(dāng)然很希望了解他們的設(shè)計,有哪幾個類、每個類的內(nèi)部結(jié)構(gòu)等。雖然可以查閱源代碼,但要打開不同的文件再翻閱查找,還是比較費事。為此可在CheckItems類中加@MemberInfo標(biāo)注,將會在處理類文件時先輸出每個類的梗概信息,包括它們的繼承/實現(xiàn)關(guān)系、所有字段和方法成員的名字、類型、訪問控制等內(nèi)容。這樣就大概了解了其設(shè)計結(jié)構(gòu),對理解后續(xù)運(yùn)行時輸出的信息也有幫助。

    2.3 代碼變換器結(jié)構(gòu)

    有了CheckItems文件,就明確了需要考察的方法調(diào)用以及對應(yīng)的信息輸出方式,現(xiàn)在只需有一個代碼變換器,將這些內(nèi)容“織入”到學(xué)生提交的作業(yè)中,代碼一經(jīng)執(zhí)行,那些關(guān)鍵步驟就被記錄下來。通過查看這些信息,就能了解學(xué)生的學(xué)習(xí)情況。

    代碼變換器利用ASM提供的各種工具類構(gòu)建,結(jié)構(gòu)如圖3所示。其中Reader2讀入CheckItems,將其中內(nèi)容存于Node對象中,并向Visitor1指出需要進(jìn)行變換的方法。Reader1能讀入作業(yè)中的各個class文件,解析后交Visitor1處理,Visitor1如發(fā)現(xiàn)匹配的方法,將按約定修改名稱、指令, 再送至Writer,同時將需要補(bǔ)充的內(nèi)容告訴Visitor2。Visitor2從Node中取得相應(yīng)元素,作必要修改后也送至Writer。最后由Writer綜合這些輸入,構(gòu)造出新的、能輸出需要信息、完整可運(yùn)行的二進(jìn)制類文件。

    實際批閱作業(yè)時將全班的代碼組織在一個子目錄中,每人是獨立的包或jar文件,控制程序?qū)⒅饌€處理它們。對每份作業(yè),生成一個自定義的類裝載器,負(fù)責(zé)裝載學(xué)生作業(yè)代碼并利用上述變換器進(jìn)行必要轉(zhuǎn)換。在調(diào)用main()啟動運(yùn)行后,其輸出的信息將送至指定文件。為避免處理過程脫離控制,變換器還將攔截Runtime和System 類的exit或halt調(diào)用,將其轉(zhuǎn)換為能被控制程序捕捉的異常。代碼變換器還會把代碼中所有的標(biāo)準(zhǔn)輸出也轉(zhuǎn)向至同一指定文件,這樣該程序的設(shè)計結(jié)構(gòu)、運(yùn)行過程中的關(guān)鍵信息和運(yùn)行結(jié)果都被放置在一起,理解、評判學(xué)生作業(yè)情況就很方便了。

    3 結(jié)束語

    有了這一作業(yè)批閱輔助工具,可以大大提高工作效率。對于稍有規(guī)模的程序,要理解其思路,少不了要來回參照,分層拆剖。如果學(xué)生人數(shù)較多,對教師的心神精力是一個考驗。而使用本工具,因為每一關(guān)鍵步驟都有提示,比照源代碼,其運(yùn)行邏輯通常立即就可以抓住。

    批改作業(yè)時只閱讀程序而不運(yùn)行,細(xì)節(jié)錯誤很難發(fā)現(xiàn)。只看運(yùn)行最終結(jié)果,雖能發(fā)現(xiàn)有錯,但要找到問題所在也很困難。而使用本工具,只要對輸出的信息有合適安排,那么定位錯誤位置,找出癥結(jié)所在就會容易很多。

    當(dāng)然,在此基礎(chǔ)上還可以進(jìn)一步開展工作,比如對處理過程、運(yùn)行結(jié)果添加自動評分功能,對代碼實現(xiàn)簡單的數(shù)據(jù)流、控制流分析以更清晰顯現(xiàn)程序邏輯等,這都有待于今后繼續(xù)努力。

    參考文獻(xiàn)(References):

    [1] Tim Lindholm, Frank Yellin. The Java Virtual Machine Specification Java SE 11 Edition[M] Addison-Wesley Professional,2018.8

    [2] Eric Bruneton. ASM 4.0 A Java bytecode engineering library[EB/OL].http://www.ow2.org/

    [3] objectweb.org. asm 7.0 API[EB/OL]. http://www.ow2.org/

    [4] James Gosling, Bill Joy. The Java LanguageSpecificationJava SE 11 Edition [M] Addison-Wesley Professional 2018.8

    猜你喜歡
    計算機(jī)輔助教學(xué)
    淺談現(xiàn)代教育技術(shù)在教學(xué)中的應(yīng)用
    東方教育(2016年9期)2017-01-17 23:11:53
    計算機(jī)輔助教學(xué)應(yīng)用分析和探索
    當(dāng)前計算機(jī)輔助教學(xué)的實踐與思考
    成才之路(2016年36期)2016-12-12 13:02:32
    藥物制劑專業(yè)物理化學(xué)教學(xué)探討
    計算機(jī)輔助教學(xué)在中學(xué)美術(shù)教學(xué)中的應(yīng)用
    《線性代數(shù)》計算機(jī)輔助教學(xué)初探
    計算機(jī)輔助教學(xué)網(wǎng)站設(shè)計與實現(xiàn)
    淺談《衛(wèi)生管理運(yùn)籌學(xué)》的教學(xué)改革與探索
    科技視界(2016年17期)2016-07-15 14:19:34
    多媒體技術(shù)是促進(jìn)美術(shù)教學(xué)的捷徑
    考試周刊(2016年27期)2016-05-26 00:56:18
    多媒體技術(shù)在小學(xué)語文教學(xué)中的魅力
    考試周刊(2016年13期)2016-03-18 04:41:00
    日韩在线高清观看一区二区三区| 成年女人在线观看亚洲视频| 在线观看免费视频网站a站| 亚洲中文av在线| 伦理电影大哥的女人| 亚洲电影在线观看av| 久久毛片免费看一区二区三区| 国产成人精品福利久久| 纵有疾风起免费观看全集完整版| 少妇人妻一区二区三区视频| 2018国产大陆天天弄谢| 亚洲欧美日韩卡通动漫| 亚洲人与动物交配视频| 97在线人人人人妻| 午夜视频国产福利| 欧美最新免费一区二区三区| 中文字幕av成人在线电影| av天堂中文字幕网| av网站免费在线观看视频| 国产亚洲5aaaaa淫片| 精品久久久久久久久亚洲| 亚洲美女视频黄频| 午夜激情久久久久久久| 亚洲,一卡二卡三卡| 日韩欧美精品免费久久| 久久精品夜色国产| 欧美丝袜亚洲另类| 一级av片app| 内地一区二区视频在线| 中文字幕亚洲精品专区| 欧美97在线视频| 日日摸夜夜添夜夜添av毛片| 日本免费在线观看一区| 亚洲真实伦在线观看| 菩萨蛮人人尽说江南好唐韦庄| 精品久久久久久久久av| 777米奇影视久久| 国产一级毛片在线| 噜噜噜噜噜久久久久久91| 97在线视频观看| 我的女老师完整版在线观看| 国产毛片在线视频| 国产久久久一区二区三区| 男人和女人高潮做爰伦理| 卡戴珊不雅视频在线播放| 国产精品精品国产色婷婷| 久久久国产一区二区| 国产成人免费观看mmmm| 成人国产麻豆网| av免费观看日本| 日本色播在线视频| 国产精品偷伦视频观看了| 男女啪啪激烈高潮av片| 乱码一卡2卡4卡精品| 成人二区视频| 91精品一卡2卡3卡4卡| av在线老鸭窝| 亚洲精品国产成人久久av| 久久国产精品男人的天堂亚洲 | 国产精品成人在线| 中文天堂在线官网| 日日啪夜夜撸| 99热国产这里只有精品6| 成人国产麻豆网| 美女国产视频在线观看| 中文欧美无线码| 国产真实伦视频高清在线观看| 日韩欧美 国产精品| 欧美精品一区二区大全| 亚洲精品,欧美精品| 一区二区三区精品91| 高清黄色对白视频在线免费看 | 久久6这里有精品| 精品少妇久久久久久888优播| 国产人妻一区二区三区在| 国产久久久一区二区三区| 亚洲av中文字字幕乱码综合| 久久鲁丝午夜福利片| 欧美日韩视频精品一区| 夫妻午夜视频| 王馨瑶露胸无遮挡在线观看| 老师上课跳d突然被开到最大视频| 国产在线男女| 日本-黄色视频高清免费观看| 各种免费的搞黄视频| 人人妻人人添人人爽欧美一区卜 | 欧美精品亚洲一区二区| 小蜜桃在线观看免费完整版高清| 人妻夜夜爽99麻豆av| 久久国产乱子免费精品| 在线观看一区二区三区| 精品久久久久久久久av| 王馨瑶露胸无遮挡在线观看| 亚洲美女搞黄在线观看| 成人亚洲精品一区在线观看 | 亚洲国产av新网站| 观看美女的网站| 久久99热这里只频精品6学生| 妹子高潮喷水视频| 国产淫语在线视频| 成人毛片60女人毛片免费| 国产精品av视频在线免费观看| 欧美国产精品一级二级三级 | 色婷婷久久久亚洲欧美| 国产91av在线免费观看| 亚洲,欧美,日韩| 国产成人精品久久久久久| 日本色播在线视频| 亚洲国产精品一区三区| 国产精品熟女久久久久浪| 国产精品蜜桃在线观看| 亚洲国产精品999| 亚洲电影在线观看av| 婷婷色综合大香蕉| 校园人妻丝袜中文字幕| 免费黄色在线免费观看| av专区在线播放| 国产熟女欧美一区二区| 日本vs欧美在线观看视频 | 日本vs欧美在线观看视频 | 一二三四中文在线观看免费高清| 少妇熟女欧美另类| 99久久精品一区二区三区| 网址你懂的国产日韩在线| 男人舔奶头视频| 亚洲国产精品专区欧美| 久久精品久久久久久噜噜老黄| 九色成人免费人妻av| 亚洲高清免费不卡视频| 久热久热在线精品观看| 久热这里只有精品99| 成人高潮视频无遮挡免费网站| 成人毛片a级毛片在线播放| 日本wwww免费看| 狂野欧美激情性xxxx在线观看| 春色校园在线视频观看| 亚洲精品一区蜜桃| 亚洲在久久综合| 欧美区成人在线视频| 嫩草影院入口| 午夜福利在线在线| 国产极品天堂在线| 中文欧美无线码| 国产精品成人在线| 亚洲精品日韩在线中文字幕| 欧美三级亚洲精品| 大陆偷拍与自拍| 亚洲图色成人| 麻豆精品久久久久久蜜桃| 久久精品夜色国产| 麻豆精品久久久久久蜜桃| 成人无遮挡网站| 夜夜骑夜夜射夜夜干| 国产欧美日韩一区二区三区在线 | 日本一二三区视频观看| 久久久色成人| 日日摸夜夜添夜夜爱| 亚洲四区av| 亚洲不卡免费看| 日韩国内少妇激情av| freevideosex欧美| 夫妻午夜视频| 日韩 亚洲 欧美在线| 亚洲图色成人| 18+在线观看网站| 亚洲第一区二区三区不卡| 国内少妇人妻偷人精品xxx网站| 亚洲综合色惰| 毛片女人毛片| 男人添女人高潮全过程视频| 永久免费av网站大全| 亚洲精品乱久久久久久| 美女内射精品一级片tv| 中文字幕亚洲精品专区| 网址你懂的国产日韩在线| 国内揄拍国产精品人妻在线| 亚洲aⅴ乱码一区二区在线播放| 三级国产精品片| 成人一区二区视频在线观看| 全区人妻精品视频| 97超视频在线观看视频| 国模一区二区三区四区视频| 日本欧美视频一区| 国产免费福利视频在线观看| 中文精品一卡2卡3卡4更新| 久久午夜福利片| 久久久久性生活片| 中文资源天堂在线| 美女脱内裤让男人舔精品视频| 国产午夜精品久久久久久一区二区三区| 中国国产av一级| 国产精品国产三级国产专区5o| 久久久精品免费免费高清| 纵有疾风起免费观看全集完整版| 97在线视频观看| 乱系列少妇在线播放| 人人妻人人看人人澡| 国产爱豆传媒在线观看| 五月玫瑰六月丁香| 国产 精品1| 国产淫语在线视频| 国产成人精品福利久久| 久久影院123| 亚洲av免费高清在线观看| 久久av网站| 亚洲真实伦在线观看| 18禁在线无遮挡免费观看视频| 又爽又黄a免费视频| 色网站视频免费| 少妇人妻久久综合中文| 一本大道久久a久久精品| 91麻豆精品激情在线观看国产 | 欧美黄色片欧美黄色片| 久久精品亚洲av国产电影网| 国产99久久九九免费精品| 婷婷成人精品国产| 欧美黑人欧美精品刺激| 午夜av观看不卡| 亚洲欧美日韩高清在线视频 | 90打野战视频偷拍视频| 免费观看a级毛片全部| 久久热在线av| 悠悠久久av| 黄色视频不卡| 欧美日韩一级在线毛片| 午夜日韩欧美国产| 97在线人人人人妻| 最近中文字幕2019免费版| 亚洲国产av新网站| 97人妻天天添夜夜摸| 国产在线观看jvid| 精品国产乱码久久久久久男人| 99热网站在线观看| 一本大道久久a久久精品| 国产免费又黄又爽又色| 男的添女的下面高潮视频| 男男h啪啪无遮挡| 日韩欧美一区视频在线观看| 亚洲天堂av无毛| 精品一区二区三区av网在线观看 | 你懂的网址亚洲精品在线观看| 久久久久久久久久久久大奶| 人妻人人澡人人爽人人| 宅男免费午夜| 菩萨蛮人人尽说江南好唐韦庄| 一区二区三区乱码不卡18| 欧美在线黄色| 两性夫妻黄色片| 国产av国产精品国产| h视频一区二区三区| 只有这里有精品99| 国产成人a∨麻豆精品| 自线自在国产av| 欧美日韩成人在线一区二区| 亚洲av片天天在线观看| 亚洲第一av免费看| 免费观看a级毛片全部| 色播在线永久视频| 巨乳人妻的诱惑在线观看| 后天国语完整版免费观看| 国产精品欧美亚洲77777| 国产精品久久久久久精品电影小说| 国产一区二区激情短视频 | 久久人妻熟女aⅴ| 国产精品三级大全| 亚洲中文日韩欧美视频| av国产精品久久久久影院| 人人妻人人添人人爽欧美一区卜| 纯流量卡能插随身wifi吗| 女人高潮潮喷娇喘18禁视频| 欧美黑人欧美精品刺激| 亚洲国产欧美一区二区综合| 亚洲av国产av综合av卡| 欧美精品一区二区免费开放| 国产成人av激情在线播放| 热re99久久精品国产66热6| 国产免费又黄又爽又色| 久久精品人人爽人人爽视色| 这个男人来自地球电影免费观看| 国产成人欧美在线观看 | 亚洲精品国产一区二区精华液| 男男h啪啪无遮挡| 久久久久久免费高清国产稀缺| 久久国产精品男人的天堂亚洲| 看免费成人av毛片| 女人精品久久久久毛片| 国产免费一区二区三区四区乱码| 男人添女人高潮全过程视频| 久久99精品国语久久久| 黄色毛片三级朝国网站| 一区福利在线观看| 一区在线观看完整版| 美女福利国产在线| 久久久精品免费免费高清| 汤姆久久久久久久影院中文字幕| 美国免费a级毛片| 亚洲精品中文字幕在线视频| 久久天躁狠狠躁夜夜2o2o | 老司机靠b影院| 亚洲激情五月婷婷啪啪| 大片免费播放器 马上看| 欧美黑人欧美精品刺激| 亚洲成国产人片在线观看| 久久久久国产精品人妻一区二区| 久久久欧美国产精品| 久久久久国产一级毛片高清牌| 国产视频一区二区在线看| 成年动漫av网址| 一个人免费看片子| 久久ye,这里只有精品| 午夜激情久久久久久久| 国产亚洲午夜精品一区二区久久| 免费在线观看日本一区| 2021少妇久久久久久久久久久| 一区二区三区四区激情视频| 狂野欧美激情性bbbbbb| 国产一区有黄有色的免费视频| 建设人人有责人人尽责人人享有的| 精品少妇内射三级| av天堂在线播放| 天天躁狠狠躁夜夜躁狠狠躁| 久久久国产精品麻豆| 黄频高清免费视频| 日本wwww免费看| 免费一级毛片在线播放高清视频 | 国产一区二区三区综合在线观看| 纵有疾风起免费观看全集完整版| 欧美另类一区| 女性被躁到高潮视频| av欧美777| 亚洲国产欧美一区二区综合| 国产成人一区二区三区免费视频网站 | 成年av动漫网址| 午夜免费观看性视频| 美女脱内裤让男人舔精品视频| 最黄视频免费看| 国产日韩一区二区三区精品不卡| 日韩 亚洲 欧美在线| 精品一区二区三卡| 国产成人影院久久av| 国产精品免费大片| 色婷婷久久久亚洲欧美| 欧美在线黄色| 国产亚洲精品久久久久5区| 性少妇av在线| 王馨瑶露胸无遮挡在线观看| 超碰97精品在线观看| 国产真人三级小视频在线观看| 欧美精品一区二区免费开放| 人人澡人人妻人| 超碰97精品在线观看| 国产精品.久久久| 欧美中文综合在线视频| 久热这里只有精品99| 人人妻人人澡人人看| 91九色精品人成在线观看| 蜜桃在线观看..| 日本wwww免费看| 丝瓜视频免费看黄片| 电影成人av| 国产一区二区 视频在线| 亚洲,欧美精品.| 欧美黄色淫秽网站| 999精品在线视频| 91国产中文字幕| 国产在视频线精品| 精品人妻熟女毛片av久久网站| 国产成人av教育| 欧美日韩精品网址| 国产精品av久久久久免费| av国产精品久久久久影院| 午夜福利乱码中文字幕| 桃花免费在线播放| 一级黄片播放器| 十八禁人妻一区二区| 欧美日韩国产mv在线观看视频| 18禁国产床啪视频网站| 高潮久久久久久久久久久不卡| tube8黄色片| 两性夫妻黄色片| 老汉色∧v一级毛片| 欧美激情极品国产一区二区三区| 国产成人一区二区三区免费视频网站 | 亚洲伊人久久精品综合| 一二三四在线观看免费中文在| 亚洲久久久国产精品| 亚洲精品久久午夜乱码| 男人添女人高潮全过程视频| 久久精品国产亚洲av高清一级| 观看av在线不卡| 精品视频人人做人人爽| 精品久久久久久久毛片微露脸 | 国产精品一国产av| 激情五月婷婷亚洲| 极品少妇高潮喷水抽搐| 人体艺术视频欧美日本| 首页视频小说图片口味搜索 | 国产一区有黄有色的免费视频| 久久人妻熟女aⅴ| 在线av久久热| 超碰成人久久| 欧美黑人精品巨大| 久久精品亚洲av国产电影网| 黑人欧美特级aaaaaa片| 黄网站色视频无遮挡免费观看| 人人妻,人人澡人人爽秒播 | 色精品久久人妻99蜜桃| 超碰成人久久| 男女边摸边吃奶| 日韩免费高清中文字幕av| 捣出白浆h1v1| 国产高清国产精品国产三级| 免费看不卡的av| 最新在线观看一区二区三区 | 精品一区二区三区四区五区乱码 | 人妻一区二区av| 国产一区二区在线观看av| 免费黄频网站在线观看国产| 久久精品久久久久久噜噜老黄| 97人妻天天添夜夜摸| 丝袜人妻中文字幕| 国产老妇伦熟女老妇高清| 美女高潮到喷水免费观看| 丁香六月欧美| 深夜精品福利| 丰满迷人的少妇在线观看| 午夜福利,免费看| 黑人猛操日本美女一级片| 极品少妇高潮喷水抽搐| 日本色播在线视频| 乱人伦中国视频| 日本色播在线视频| 亚洲精品一卡2卡三卡4卡5卡 | 亚洲精品成人av观看孕妇| 超色免费av| a级毛片黄视频| 色精品久久人妻99蜜桃| 亚洲精品日本国产第一区| 大型av网站在线播放| 国产在视频线精品| 午夜福利一区二区在线看| 久久午夜综合久久蜜桃| 日韩精品免费视频一区二区三区| 两人在一起打扑克的视频| 新久久久久国产一级毛片| 中文字幕人妻熟女乱码| 日韩一区二区三区影片| 婷婷色综合大香蕉| 晚上一个人看的免费电影| 亚洲av日韩在线播放| 亚洲国产最新在线播放| videosex国产| 我要看黄色一级片免费的| 大陆偷拍与自拍| 国产男女内射视频| a级片在线免费高清观看视频| 日韩大片免费观看网站| 91字幕亚洲| 久久久久视频综合| 人人妻,人人澡人人爽秒播 | 亚洲综合色网址| 另类亚洲欧美激情| 2018国产大陆天天弄谢| 精品亚洲乱码少妇综合久久| av网站在线播放免费| 精品人妻1区二区| 国产福利在线免费观看视频| a级毛片在线看网站| 国产成人免费无遮挡视频| 深夜精品福利| 两个人看的免费小视频| kizo精华| 欧美精品av麻豆av| 青春草视频在线免费观看| 午夜av观看不卡| 成年人午夜在线观看视频| 一级毛片黄色毛片免费观看视频| 一级毛片我不卡| 波野结衣二区三区在线| 老司机亚洲免费影院| 51午夜福利影视在线观看| 亚洲熟女毛片儿| 久久99一区二区三区| 久久精品久久久久久久性| 91国产中文字幕| 亚洲国产精品国产精品| 亚洲伊人久久精品综合| 亚洲欧美日韩另类电影网站| 少妇人妻 视频| 久久久久久久国产电影| 青草久久国产| 亚洲欧美精品综合一区二区三区| 肉色欧美久久久久久久蜜桃| 美女国产高潮福利片在线看| 亚洲av欧美aⅴ国产| 2021少妇久久久久久久久久久| 久久国产精品大桥未久av| 免费在线观看日本一区| 欧美人与善性xxx| 两个人看的免费小视频| 久久av网站| 2018国产大陆天天弄谢| 搡老岳熟女国产| 制服人妻中文乱码| 飞空精品影院首页| 别揉我奶头~嗯~啊~动态视频 | 日本av手机在线免费观看| 赤兔流量卡办理| 亚洲欧洲精品一区二区精品久久久| 国产日韩欧美在线精品| 麻豆国产av国片精品| 日韩一区二区三区影片| 肉色欧美久久久久久久蜜桃| 欧美日韩av久久| 亚洲欧美色中文字幕在线| 精品一品国产午夜福利视频| 一级毛片电影观看| 在线天堂中文资源库| 搡老乐熟女国产| 少妇粗大呻吟视频| 满18在线观看网站| 九色亚洲精品在线播放| 满18在线观看网站| 两人在一起打扑克的视频| 一个人免费看片子| 久久人人爽av亚洲精品天堂| 国产伦理片在线播放av一区| 久久人人爽av亚洲精品天堂| 黄片小视频在线播放| 大片电影免费在线观看免费| 久久毛片免费看一区二区三区| 精品一区在线观看国产| 亚洲成人国产一区在线观看 | 免费高清在线观看日韩| 99热全是精品| 欧美黄色淫秽网站| 深夜精品福利| 免费日韩欧美在线观看| 欧美日韩一级在线毛片| 日韩欧美一区视频在线观看| 亚洲成人手机| 亚洲国产精品一区二区三区在线| www日本在线高清视频| 亚洲,欧美精品.| 久久影院123| 好男人电影高清在线观看| 亚洲欧美一区二区三区黑人| 男女国产视频网站| 在线观看一区二区三区激情| 精品国产一区二区久久| 亚洲国产精品国产精品| 少妇人妻久久综合中文| 免费黄频网站在线观看国产| 国产国语露脸激情在线看| 亚洲国产成人一精品久久久| 老司机午夜十八禁免费视频| 国产精品久久久av美女十八| 高清av免费在线| 成人午夜精彩视频在线观看| 亚洲欧洲日产国产| 午夜免费成人在线视频| 亚洲天堂av无毛| 狠狠精品人妻久久久久久综合| 在线观看免费午夜福利视频| 久久精品国产a三级三级三级| e午夜精品久久久久久久| tube8黄色片| 国产一区亚洲一区在线观看| 在线观看免费视频网站a站| 国产片内射在线| 精品人妻在线不人妻| 熟女少妇亚洲综合色aaa.| 久久精品熟女亚洲av麻豆精品| 91麻豆av在线| 天天躁夜夜躁狠狠躁躁| 国产精品欧美亚洲77777| 国产不卡av网站在线观看| 国产视频首页在线观看| 99re6热这里在线精品视频| 亚洲欧美日韩高清在线视频 | 美女扒开内裤让男人捅视频| 欧美精品高潮呻吟av久久| 国产成人欧美在线观看 | 各种免费的搞黄视频| tube8黄色片| 婷婷丁香在线五月| 国产精品香港三级国产av潘金莲 | 麻豆乱淫一区二区| 国产精品国产三级专区第一集| 欧美av亚洲av综合av国产av| 国产亚洲午夜精品一区二区久久| 久久久欧美国产精品| 黑人欧美特级aaaaaa片| 捣出白浆h1v1| 王馨瑶露胸无遮挡在线观看| 久久中文字幕一级| 老司机亚洲免费影院| 免费观看人在逋| 99久久99久久久精品蜜桃| 丝袜美腿诱惑在线| 在现免费观看毛片| 国产成人精品无人区| 国产精品久久久久久精品电影小说| 亚洲精品久久久久久婷婷小说| 飞空精品影院首页| 男女边吃奶边做爰视频| 欧美激情极品国产一区二区三区| 美女福利国产在线| 免费高清在线观看视频在线观看| 亚洲精品中文字幕在线视频| 久久这里只有精品19| 91成人精品电影| 久久 成人 亚洲| 成人亚洲精品一区在线观看| av不卡在线播放|