日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Jacoco字节码植入原理(源码分析)

發(fā)布時(shí)間:2023/12/19 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Jacoco字节码植入原理(源码分析) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

首先了解jacoco agent入口類(MANIFEST.M文件聲明):

入口類—PreMain:

代碼:

packageorg.jacoco.agent.rt.internal_6da5971;importjava.lang.instrument.Instrumentation;importorg.jacoco.agent.rt.internal_6da5971.core.runtime.AgentOptions;importorg.jacoco.agent.rt.internal_6da5971.core.runtime.IRuntime;importorg.jacoco.agent.rt.internal_6da5971.core.runtime.ModifiedSystemClassRuntime;publicfinal class PreMain{public static void premain(String options,Instrumentation inst)throws Exception{AgentOptions agentOptions = newAgentOptions(options);Agent agent = Agent.getInstance(agentOptions);IRuntime runtime = createRuntime(inst);runtime.startup(agent.getData());inst.addTransformer(newCoverageTransformer(runtime, agentOptions, IExceptionLogger.SYSTEM_ERR));}private static IRuntime createRuntime(Instrumentationinst)throws Exception{return ModifiedSystemClassRuntime.createFor(inst,"java/util/UUID");}}

Jaococ使用asm實(shí)現(xiàn)字節(jié)碼植入,是對(duì)指令級(jí)別上的字節(jié)碼植入,從而可以定位到執(zhí)行的代碼行,以達(dá)到覆蓋率的統(tǒng)計(jì)。在這個(gè)基礎(chǔ)上,jacoco有對(duì)類級(jí)別,方法級(jí)別,邏輯分支級(jí)別以及代碼行級(jí)別做了專門的處理封裝。具體的封裝類在internal.analysis.flow下面,涉及的類分別是ClassprobesAdapter.java(類級(jí)別),Instruction.java(指令級(jí)別),LabelFlowAnalysis.java(邏輯分支級(jí)別)和MethodProbesAdapter.java(方法級(jí)別)。

ClassprobesAdapter類核心代碼:

?

publicfinal MethodVisitor visitMethod(intaccess, String name, String desc, String signature, String[] exceptions){MethodProbesVisitor mv =this.cv.visitMethod(access, name, desc, signature, exceptions);MethodProbesVisitor methodProbes;final MethodProbesVisitor methodProbes;if (mv == null) {methodProbes =EMPTY_METHOD_PROBES_VISITOR;} else {methodProbes = mv;}new MethodSanitizer(null, access, name,desc, signature, exceptions){public void visitEnd(){super.visitEnd();LabelFlowAnalyzer.markLabels(this);MethodProbesAdapter probesAdapter = newMethodProbesAdapter(methodProbes, ClassProbesAdapter.this);if(ClassProbesAdapter.this.trackFrames){AnalyzerAdapter analyzer = new AnalyzerAdapter(ClassProbesAdapter.this.name,this.access, this.name, this.desc, probesAdapter); probesAdapter.setAnalyzer(analyzer);accept(analyzer);}else{accept(probesAdapter);}}};}

可見(jiàn)類覆蓋率字節(jié)碼埋入實(shí)際上是對(duì)類中每一個(gè)方法和每一個(gè)邏輯分支做埋入,只要記錄調(diào)用類中方法的覆蓋代碼行,自然類的覆蓋就會(huì)被統(tǒng)計(jì)到。

接著看MethodProbesAdapter 中的代碼:

@Overridepublic void visitLabel(final Label label) {if (LabelInfo.needsProbe(label)) {if(tryCatchProbeLabels.containsKey(label)) {probesVisitor.visitLabel(tryCatchProbeLabels.get(label));}probesVisitor.visitProbe(idGenerator.nextId());}probesVisitor.visitLabel(label);}@Overridepublic void visitInsn(final int opcode) {switch (opcode) {case Opcodes.IRETURN:case Opcodes.LRETURN:case Opcodes.FRETURN:case Opcodes.DRETURN:case Opcodes.ARETURN:case Opcodes.RETURN:case Opcodes.ATHROW:probesVisitor.visitInsnWithProbe(opcode,idGenerator.nextId());break;default:probesVisitor.visitInsn(opcode);break;}}@Overridepublic void visitJumpInsn(final int opcode, final Label label) {if (LabelInfo.isMultiTarget(label)) {probesVisitor.visitJumpInsnWithProbe(opcode,label,idGenerator.nextId(), frame(jumpPopCount(opcode)));} else {probesVisitor.visitJumpInsn(opcode,label);}}private int jumpPopCount(final int opcode) {switch (opcode) {case Opcodes.GOTO:return 0;case Opcodes.IFEQ:case Opcodes.IFNE:case Opcodes.IFLT:case Opcodes.IFGE:case Opcodes.IFGT:case Opcodes.IFLE:case Opcodes.IFNULL:case Opcodes.IFNONNULL:return 1;default: // IF_CMPxx and IF_ACMPxxreturn 2;}}@Overridepublic void visitLookupSwitchInsn(final Label dflt, final int[]keys,final Label[] labels) {if (markLabels(dflt, labels)) {probesVisitor.visitLookupSwitchInsnWithProbes(dflt,keys, labels,frame(1));} else {probesVisitor.visitLookupSwitchInsn(dflt,keys, labels);}}@Overridepublic void visitTableSwitchInsn(final int min, final int max,final Label dflt, final Label...labels) {if (markLabels(dflt, labels)) {probesVisitor.visitTableSwitchInsnWithProbes(min,max, dflt,labels, frame(1));} else {probesVisitor.visitTableSwitchInsn(min,max, dflt, labels);}}

在MethodProbesAdapter中明顯看到字節(jié)碼指令信息,對(duì)于一個(gè)方法的進(jìn)入,jvm中是一個(gè)方法棧的創(chuàng)建,入口指令是入棧指令,退出是return:

privateint jumpPopCount(finalint opcode) {

??????? switch (opcode) {

??????? case Opcodes.GOTO:

??????????? return0;

??????? caseOpcodes.IFEQ:

??????? caseOpcodes.IFNE:

??????? caseOpcodes.IFLT:

??????? caseOpcodes.IFGE:

??????? caseOpcodes.IFGT:

??????? caseOpcodes.IFLE:

??????? caseOpcodes.IFNULL:

??????? caseOpcodes.IFNONNULL:

??????????? return1;

??????? default:// IF_CMPxx and IF_ACMPxx

??????????? return2;

??????? }

??? }

退出方法是return 指令:

publicvoid visitInsn(finalint opcode) {

??????? switch (opcode) {

??????? case Opcodes.IRETURN:

??????? caseOpcodes.LRETURN:

??????? caseOpcodes.FRETURN:

??????? caseOpcodes.DRETURN:

??????? caseOpcodes.ARETURN:

??????? caseOpcodes.RETURN:

??????? caseOpcodes.ATHROW:

??????????? probesVisitor.visitInsnWithProbe(opcode,idGenerator.nextId());

??????????? break;

??????? default:

??????? ??? probesVisitor.visitInsn(opcode);

??????????? break;

??????? }

??? }

邏輯跳轉(zhuǎn)的有switch,if

publicvoid visitTableSwitchInsn(finalint min, final int max,

??????????? final Label dflt, final Label...labels) {

??????? if (markLabels(dflt, labels)) {

??????????? probesVisitor.visitTableSwitchInsnWithProbes(min,max, dflt,

??????????????????? labels, frame(1));

??????? } else {

??????????? probesVisitor.visitTableSwitchInsn(min,max, dflt, labels);

??????? }

??? }

If分支:

case Opcodes.GOTO:

??????????? return0;

??????? caseOpcodes.IFEQ:

??????? caseOpcodes.IFNE:

??????? caseOpcodes.IFLT:

??????? caseOpcodes.IFGE:

??????? caseOpcodes.IFGT:

??????? caseOpcodes.IFLE:

??????? caseOpcodes.IFNULL:

??????? caseOpcodes.IFNONNULL:

??????????? return1;

??????? default:// IF_CMPxx and IF_ACMPxx

??????????? return2;

??????? }?

LabelFlowAnalysis主要實(shí)現(xiàn)代碼:

@Overridepublic void visitJumpInsn(final int opcode, final Label label) {LabelInfo.setTarget(label);if (opcode == Opcodes.JSR) {thrownew AssertionError("Subroutines not supported.");}successor = opcode != Opcodes.GOTO;first = false;}@Overridepublic void visitLabel(final Label label) {if (first) {LabelInfo.setTarget(label);}if (successor) {LabelInfo.setSuccessor(label);}}@Overridepublic void visitLineNumber(final int line, final Label start) {lineStart = start;}@Overridepublic void visitTableSwitchInsn(final int min, final int max,final Label dflt, final Label...labels) {visitSwitchInsn(dflt, labels);}@Overridepublic void visitLookupSwitchInsn(final Label dflt, final int[]keys,final Label[] labels) {visitSwitchInsn(dflt, labels);}@Overridepublic void visitInsn(final int opcode) {switch (opcode) {case Opcodes.RET:throw new AssertionError("Subroutinesnot supported.");case Opcodes.IRETURN:case Opcodes.LRETURN:case Opcodes.FRETURN:case Opcodes.DRETURN:case Opcodes.ARETURN:case Opcodes.RETURN:case Opcodes.ATHROW:successor = false;break;default:successor = true;break;}first = false;}

首先要知道對(duì)于一串指令比如:

iLoad A;

iLoad B;

Add A,B;

iStore;

……

如果沒(méi)有跳轉(zhuǎn)指令 GOTO LABEL或者jump,那么指令值按順序執(zhí)行的,所以我們只要在開(kāi)始的時(shí)候添加一個(gè)探針就好,只要探針指令執(zhí)行了,那么下面的指令一定會(huì)被執(zhí)行的,除非有了跳轉(zhuǎn)邏輯。因此我們只要在每一個(gè)跳轉(zhuǎn)的開(kāi)始和結(jié)束添加探針就好,就可以完全實(shí)現(xiàn)統(tǒng)計(jì)代碼塊的覆蓋,而沒(méi)有必要每一行都要植入探針。

接著在看Instruction代碼:

*/public void setPredecessor(final Instructionpredecessor,final int branch) {this.predecessor = predecessor;predecessor.addBranch();this.predecessorBranch = branch;}/***Marks one branch of this instruction as covered. Also recursively marks* allpredecessor instructions as covered if this is the first covered*branch.**@param branch* branch number to mark as covered*/public void setCovered(final int branch) {Instruction i = this;int b = branch;while (i != null) {if (!i.coveredBranches.isEmpty()) {i.coveredBranches.set(b);break;}i.coveredBranches.set(b);b = i.predecessorBranch;i = i.predecessor;}}

Instruction的實(shí)現(xiàn)是為了記錄對(duì)應(yīng)指令的代碼行,記錄在跳轉(zhuǎn)的label處對(duì)應(yīng)的代碼行數(shù),那么類推可以等到整個(gè)覆蓋和未覆蓋的代碼行。

上面已經(jīng)了解我們對(duì)于類,方法,邏輯塊以及具體代碼的記錄和探針植入;接著我們需要了解具體植入的是什么指令。首先看下jacoco中探針植入類—ProbeInserter

ProbeInserter(final int access, final String name, finalString desc, final MethodVisitor mv,final IProbeArrayStrategyarrayStrategy) {super(InstrSupport.ASM_API_VERSION, mv);this.clinit =InstrSupport.CLINIT_NAME.equals(name);this.arrayStrategy = arrayStrategy;int pos = (Opcodes.ACC_STATIC &access) == 0 ? 1 : 0;for (final Type t :Type.getArgumentTypes(desc)) {pos += t.getSize();}variable = pos;}public void insertProbe(final int id) {// For a probe we set the correspondingposition in the boolean[] array// to true.mv.visitVarInsn(Opcodes.ALOAD, variable);// Stack[0]: [ZInstrSupport.push(mv, id);// Stack[1]: I// Stack[0]: [Zmv.visitInsn(Opcodes.ICONST_1);// Stack[2]: I// Stack[1]: I// Stack[0]: [Zmv.visitInsn(Opcodes.BASTORE);}private void visitInsn() {final Instruction insn = newInstruction(currentNode, currentLine);nodeToInstruction.put(currentNode,insn);instructions.add(insn);if (lastInsn != null) {insn.setPredecessor(lastInsn, 0);}final int labelCount =currentLabel.size();if (labelCount > 0) {for (int i = labelCount; --i >=0;) {LabelInfo.setInstruction(currentLabel.get(i),insn);}currentLabel.clear();}lastInsn = insn;}@Overridepublic final void visitIincInsn(final int var, final intincrement) {mv.visitIincInsn(map(var), increment);}@Overridepublic final void visitLocalVariable(final String name, final Stringdesc,final String signature, final Labelstart, final Label end,final int index) {mv.visitLocalVariable(name, desc,signature, start, end, map(index));}

大致思路就是,在對(duì)應(yīng)字節(jié)碼執(zhí)行入口和跳轉(zhuǎn)入口處,放入probe,是一個(gè)數(shù)值(這個(gè)數(shù)值和probe id有關(guān)系),入棧之后加1,則記錄一次執(zhí)行。所有放入的探針對(duì)應(yīng)一個(gè)boolean [],探針入棧之后,那么boolean[] 對(duì)應(yīng)的位置變成true,記錄執(zhí)行了。

InstrSupport類中關(guān)鍵的兩個(gè)方法:

publicstatic void assertNotInstrumented(finalString member,final String owner) throwsIllegalStateException {if (member.equals(DATAFIELD_NAME) ||member.equals(INITMETHOD_NAME)) {throw new IllegalStateException(format("Class%s is already instrumented.", owner));}}/***Generates the instruction to push the given int value on the stack.*Implementation taken from*{@link org.objectweb.asm.commons.GeneratorAdapter#push(int)}.**@param mv* visitor to emit the instruction*@param value* the value to be pushed on the stack.*/public static void push(final MethodVisitor mv, final int value) {if (value >= -1 && value<= 5) {mv.visitInsn(Opcodes.ICONST_0 +value);} else if (value >= Byte.MIN_VALUE&& value <= Byte.MAX_VALUE) {mv.visitIntInsn(Opcodes.BIPUSH,value);} else if (value >= Short.MIN_VALUE&& value <= Short.MAX_VALUE) {mv.visitIntInsn(Opcodes.SIPUSH,value);} else {mv.visitLdcInsn(Integer.valueOf(value));}}

Push是用來(lái)對(duì)于不同的變量值入棧的不同方式,當(dāng)int取值-1~5時(shí),JVM采用iconst指令將常量壓入棧中,當(dāng)int取值-128~127時(shí),JVM采用bipush指令將常量壓入棧中,當(dāng)int取值-32768~32767時(shí),JVM采用sipush指令將常量壓入棧中,當(dāng)int取值-2147483648~2147483647時(shí),JVM采用ldc指令將常量壓入棧中

?

在jacoco對(duì)類和方法進(jìn)行植入的時(shí)候,會(huì)對(duì)類的植入鎖定進(jìn)行判斷,對(duì)應(yīng)的類是instrumenter。

publicbyte[] instrument(finalbyte[] buffer, final String name)throws IOException {try {return instrument(newClassReader(buffer));} catch (final RuntimeException e) {throwinstrumentError(name, e);}}/***Creates a instrumented version of the given class if possible. The*provided {@link InputStream} is not closed by this method.**@param input* stream to read class definition from*@param name* a name used for exception messages*@return instrumented definition*@throws IOException* if reading data from the stream fails or the class can't be* instrumented*/public byte[] instrument(final InputStream input, final Stringname)throws IOException {final byte[] bytes;try {bytes =InputStreams.readFully(input);} catch (final IOException e) {throw instrumentError(name, e);}return instrument(bytes, name);}/***Creates a instrumented version of the given class file. The provided*{@link InputStream} and {@link OutputStream} instances are not closed by*this method.**@param input* stream to read class definition from*@param output* stream to write the instrumented version of the class to*@param name* a name used for exception messages*@throws IOException* if reading data from the stream fails or the class can't be* instrumented*/public void instrument(final InputStream input, finalOutputStream output,final String name) throwsIOException {output.write(instrument(input, name));}private IOException instrumentError(finalString name,finalException cause) {final IOException ex = new IOException(String.format("Errorwhile instrumenting %s.", name));ex.initCause(cause);return ex;}

總結(jié)

以上是生活随笔為你收集整理的Jacoco字节码植入原理(源码分析)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

国产69精品久久99不卡的观看体验 | 日女人电影 | 日韩精品亚洲专区在线观看 | 狠狠操天天射 | 少妇搡bbbb搡bbb搡忠贞 | 一区二区精品在线 | 91九色porny在线 | 91视频91色| 天天干天天干天天 | 最近免费中文字幕mv在线视频3 | 欧美少妇bbwhd | 在线黄色免费 | 亚洲精品啊啊啊 | 91插插插网站 | 黄色一级片视频 | 91免费看黄 | 欧美精品久久久久久久久老牛影院 | 91亚洲国产 | 欧美日韩一区二区视频在线观看 | 婷婷综合网 | 偷拍精偷拍精品欧洲亚洲网站 | 免费视频91蜜桃 | 伊人狠狠色丁香婷婷综合 | 在线日本v二区不卡 | 操久久网| 高清av网站| 国产精品爽爽爽 | 热九九精品 | 午夜精品一区二区三区免费视频 | 日韩福利在线观看 | 夜夜躁日日躁 | 亚洲视频在线视频 | 午夜久操 | 亚洲人久久久 | www.黄色小说.com | 日本最新高清不卡中文字幕 | 国产自在线观看 | 日韩免费成人av | 天天做天天爱天天爽综合网 | 在线免费av网站 | 欧美性色综合网 | 久久精品9| 久久国内免费视频 | 成人羞羞视频在线观看免费 | 色综合天天综合 | 天堂av免费看 | 欧美成人h版 | 四虎在线免费观看 | 在线观看中文字幕网站 | 日韩精品一区二区在线视频 | 狠狠干狠狠久久 | 国产91精品在线观看 | 97超碰在线视 | 一区二区国产精品 | 精品视频在线播放 | 久久爽久久爽久久av东京爽 | 国产精品99免费看 | 丁香婷婷成人 | 亚洲成人麻豆 | 国产精品久久中文字幕 | 中文av在线免费观看 | 国产 视频 高清 免费 | 一本一道久久a久久综合蜜桃 | 中文日韩在线视频 | 国产99re| 婷婷色在线视频 | 97av视频 | 美女视频永久黄网站免费观看国产 | 国内精品久久久久久久久 | 欧洲精品久久久久毛片完整版 | 国产成人香蕉 | 91亚洲精品在线 | 亚洲国产视频网站 | 日韩免费大片 | 最近日本韩国中文字幕 | 久久久久久免费网 | 99精品视频在线观看视频 | 深夜福利视频一区二区 | 午夜影院一级片 | 蜜桃视频在线观看一区 | 中中文字幕av在线 | 在线免费高清视频 | 97成人资源| 精品爱爱| 精品久久久久久久久久久久久久久久久久 | 天堂av网站 | 亚洲成人精品国产 | 99精品欧美一区二区 | 久久久精品国产一区二区电影四季 | 91视频久久久久 | 日日夜精品 | 精品一区二区在线播放 | 日韩电影久久 | 激情五月av | 亚洲精品中文在线观看 | 一级免费观看 | 又爽又黄在线观看 | 日产乱码一二三区别免费 | 黄色大全视频 | 久久96国产精品久久99软件 | 国产一级性生活视频 | 男女拍拍免费视频 | 一二三精品视频 | 99色在线视频| 久久久污| 成人黄色中文字幕 | 久久丁香网 | 一区二区三区四区五区在线 | 日韩激情视频 | 黄色免费在线视频 | 美女精品| 国产精品av免费观看 | 96国产在线 | 成人丁香花 | 天天天天射 | 婷婷色网站| 911亚洲精品第一 | 人人爽久久涩噜噜噜网站 | 亚洲国产成人在线观看 | 免费网站在线观看人 | 久久在线免费观看 | 九九涩涩av台湾日本热热 | 亚洲在线日韩 | 精品国产一区二区三区久久久久久 | 中文字幕专区高清在线观看 | 天天操人人干 | 色狠狠综合天天综合综合 | 中文字幕久久网 | 欧美黑人性爽 | 久久久久久久久久久影视 | 黄色网址在线播放 | 日韩精品一区二区免费 | 九七视频在线观看 | 亚洲精品美女在线观看播放 | 免费福利片2019潦草影视午夜 | 中文字幕视频三区 | 日本不卡123区 | 一区二区成人国产精品 | 欧美精品在线观看免费 | 色综合天天射 | 中文字幕av免费 | 日日碰狠狠添天天爽超碰97久久 | 九九热免费精品视频 | 国产在线一区二区 | av三级av| 午夜av在线| 色老板在线 | 精品免费久久久久 | 亚洲日韩精品欧美一区二区 | 探花视频在线观看 | 国产馆在线播放 | 亚洲精品在线播放视频 | 黄色网中文字幕 | 亚洲一区美女视频在线观看免费 | 在线午夜av | 欧美国产日韩一区二区 | 精品欧美在线视频 | 国产手机在线播放 | 色婷婷久久久综合中文字幕 | 天天干天天操天天入 | 国产在线p | 高清久久久久久 | 四虎在线永久免费观看 | 97在线观看免费高清完整版在线观看 | 日日添夜夜添 | 国产日韩精品一区二区在线观看播放 | 免费视频你懂的 | 欧美亚洲专区 | a电影免费看 | 99久久婷婷国产一区二区三区 | 日日夜夜噜噜噜 | 日韩在线视频一区 | 精品v亚洲v欧美v高清v | 国产精品a成v人在线播放 | 天天干天天操天天搞 | 91丨九色丨勾搭 | 99成人免费视频 | 国产精品毛片一区视频 | 国产码电影 | 91女子私密保健养生少妇 | 日韩视频在线不卡 | 91福利视频免费 | 久久精品美女视频网站 | 国产成人亚洲在线电影 | 一级成人免费 | 日韩成人免费电影 | 在线视频亚洲 | 成人午夜电影在线 | 久久精品www人人爽人人 | 欧美一级看片 | 久久久99国产精品免费 | 欧美日韩在线观看一区二区 | 日韩av成人在线观看 | 美女国产在线 | 国产不卡免费视频 | 欧美日韩在线免费视频 | 午夜影院一级 | 天天操天天操天天操天天操天天操天天操 | 在线看毛片网站 | 在线黄色观看 | 色视频网站在线观看一=区 a视频免费在线观看 | 视频国产区 | 国产高清不卡一区二区三区 | 国产91精品久久久久久 | 亚洲天堂网视频在线观看 | 91女子私密保健养生少妇 | 久久久久久久久毛片精品 | 欧洲精品久久久久毛片完整版 | 91高清视频在线 | 五月婷婷网站 | 亚洲欧美国产视频 | 九九视频在线播放 | 狠狠干综合 | 伊人电影在线观看 | 日韩成人一级大片 | 黄色特级一级片 | 国产精品中文在线 | 国产精品乱码久久久久久1区2区 | 美女精品在线观看 | 国产一级久久久 | 国产在线观看 | 婷婷色网视频在线播放 | 久久综合日| 国产一区 在线播放 | 免费在线成人av | 奇米影视8888 | 久久久久久久久久久久电影 | 96香蕉视频 | 久久精品中文字幕 | 在线欧美中文字幕 | 日日干视频| 国产精品一区二区久久国产 | 综合天天 | 国产亚洲精品久久久久久久久久 | 免费福利视频导航 | 亚洲国产日韩欧美 | 午夜影院一级片 | 国内精品久久久久影院一蜜桃 | 成人h电影 | 国产精品美女久久久久久久 | 中文字幕国产在线 | 免费在线观看av网站 | 成人影片在线免费观看 | 黄污在线观看 | 欧美午夜a | a级片久久久| 欧美高清视频不卡网 | 日韩理论片在线观看 | 成片视频在线观看 | 人人舔人人射 | 日日干夜夜爱 | 日韩大片在线免费观看 | 天天综合网久久 | 日韩美女久久 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 五月天婷亚洲天综合网鲁鲁鲁 | 久久国产精品99久久人人澡 | 亚洲丝袜一区 | 国产精品色视频 | 欧美日韩国产一区 | 伊人伊成久久人综合网站 | 国产精品一区二区在线免费观看 | 欧美日韩一区二区在线 | 亚洲国产精品小视频 | 日韩精品欧美专区 | 黄色美女免费网站 | 午夜精品久久久久久久久久 | 日本九九视频 | 色综合激情网 | 欧美小视频在线观看 | 国产在线最新 | 中文字幕一区二区三区乱码不卡 | www.色就是色| 亚洲人成精品久久久久 | 69av在线播放 | 在线中文日韩 | av中文字幕不卡 | 日韩字幕在线 | 97av视频| 久久99热久久99精品 | 麻豆首页| 国产在线观看91 | 在线看不卡av | 日韩精品久久久久久中文字幕8 | 欧美一区影院 | 欧美精品xxx | 色视频国产直接看 | www.福利 | 麻豆成人在线观看 | 操操操日日 | 久草视频在线观 | 中文字幕观看视频 | 色婷婷免费视频 | 在线播放精品一区二区三区 | 日韩一二区在线 | 麻豆传媒电影在线观看 | 欧美性天天 | 免费高清在线视频一区· | 91av视频在线免费观看 | 激情网综合 | 成人黄色片免费看 | 二区三区在线 | 久久久久国产精品免费 | 97精品国产97久久久久久免费 | 少妇bbw撒尿 | 日日麻批40分钟视频免费观看 | 久久亚洲二区 | 九九在线视频免费观看 | 大胆欧美gogo免费视频一二区 | 日本字幕网 | 在线午夜电影神马影院 | 黄色官网在线观看 | 久草精品在线 | 99热这里只有精品国产首页 | 国产视频一区二区三区在线 | av黄免费看| 亚洲网站在线 | 91香蕉国产 | 日韩视频www| 玖草影院 | 国产成人在线观看 | 午夜国产成人 | 国产黄色在线观看 | 999久久国精品免费观看网站 | 午夜精选视频 | 欧美一级电影在线观看 | 日韩中字在线 | 99电影456麻豆 | 国产无遮挡又黄又爽在线观看 | 五月婷婷深开心 | 国产日产高清dvd碟片 | 欧美日韩成人一区 | 91成人区| 97在线观看免费高清完整版在线观看 | 久久久久久毛片 | 国产成人精品一区在线 | 中文字幕中文中文字幕 | 亚洲欧美偷拍另类 | 国产在线国偷精品产拍免费yy | 日本久久不卡视频 | 日韩免| 91精品伦理 | 色婷婷狠狠操 | 亚洲国产午夜精品 | 久草在线资源观看 | 黄色影院在线免费观看 | 国产精品片 | 久久高清 | 久久久久久久久久久影视 | 在线视频手机国产 | 成年人免费在线看 | 婷婷综合av| 天天综合区 | 日本最新高清不卡中文字幕 | 黄色综合 | 亚洲国产人午在线一二区 | 中文字幕 国产视频 | 婷婷丁香色 | 91麻豆精品91久久久久同性 | 亚洲蜜桃在线 | 国产亚洲aⅴaaaaaa毛片 | 日韩a级黄色片 | 日韩中文免费视频 | 国产高清免费在线播放 | 成人少妇影院yyyy | 丁香花中文在线免费观看 | 天天操夜夜摸 | 五月开心六月婷婷 | 在线观看视频一区二区 | 国产精品久久久一区二区三区网站 | 亚洲综合涩 | 欧美成年黄网站色视频 | 99久久久国产精品免费99 | 亚洲天堂精品视频在线观看 | av免费在线观 | 日韩午夜剧场 | 欧美日韩高清一区 | 在线精品观看 | 国产99久久久精品 | 日韩理论片在线 | 日本精品在线看 | 久久伊人爱 | 日韩欧美精品一区 | 精品国产一区二区三区久久久久久 | 88av视频 | 久久国产精品成人免费浪潮 | 国产一级黄色av | 91香蕉视频在线 | 91精品国产福利在线观看 | 久久伊人热 | 国产色妞影院wwwxxx | 中文字幕在线观看第三页 | 国产精品成人久久久 | 婷婷香蕉| 韩日在线一区 | 91精品国产一区二区在线观看 | 91九色porn在线资源 | 免费视频一区二区 | 色在线网站| 日韩精品久久久免费观看夜色 | 91精品欧美 | 日韩理论在线观看 | av中文字幕av | 中文字幕在线看视频国产 | 中文字幕在线网 | 亚洲国产美女久久久久 | 亚洲综合婷婷 | 成人免费网站在线观看 | 在线观看免费视频你懂的 | 久草色在线观看 | 黄网av在线| 久久任你操 | 在线日韩av | 久久av一区二区三区亚洲 | 久久综合精品一区 | 三级av在线播放 | 久久久久久久久久影院 | 国产香蕉久久 | 久久在线影院 | 久久综合国产伦精品免费 | 久草在线免费资源 | 超碰97国产在线 | 91大神在线看 | 国产精品美女久久久久久免费 | 国产黄a三级三级三级三级三级 | 一级黄色大片在线观看 | 激情av在线资源 | 亚洲国产精品影院 | 国产精品黄色 | 日韩电影中文字幕在线 | 久久狠狠亚洲综合 | 四虎影视成人永久免费观看亚洲欧美 | 亚洲第一区在线观看 | 96av视频| 国产精品综合在线 | 精品久久中文 | 国产又黄又硬又爽 | 狠色狠色综合久久 | 精品国产精品一区二区夜夜嗨 | 国产视频色 | 国产91九色视频 | 97在线观看免费观看高清 | 999超碰| 制服丝袜成人在线 | 日韩欧美综合视频 | 精品99免费 | 成人app在线播放 | 日本久久免费视频 | 美女网站色 | 激情五月***国产精品 | 狠狠狠狠狠狠狠狠 | 国产精品久久久区三区天天噜 | 欧美一区,二区 | 久久久精品国产免费观看一区二区 | 久久激情五月激情 | 国产精品久久久久久久毛片 | 日韩精品一区二区在线视频 | 国产99久久久久久免费看 | 日韩欧美在线综合网 | av高清在线 | 人人澡人人模 | 日韩精品一区二区三区丰满 | 国产美女无遮挡永久免费 | 你操综合| 在线免费色 | 日韩精品中文字幕在线不卡尤物 | 国产精品久久久久久久妇 | 国产精品岛国久久久久久久久红粉 | 五月天激情综合 | 精品久久免费 | 天天射射天天 | 黄色av播放 | 黄色精品久久久 | 色94色欧美| 国产精品女视频 | 日韩动态视频 | 成年人黄色免费视频 | a级国产毛片 | av电影一区二区三区 | 日韩激情av在线 | 美女视频黄色免费 | 国产精品国产三级国产aⅴ入口 | 精品国产亚洲一区二区麻豆 | 看av免费 | 色综合色综合久久综合频道88 | 亚洲精品国产精品国自 | 亚洲高清视频在线观看 | 涩涩爱夜夜爱 | 日本中文字幕视频 | 日韩精品视频免费专区在线播放 | 欧美资源在线观看 | 亚洲精品麻豆 | 91亚洲网 | 精品免费一区二区三区 | 日本久久成人中文字幕电影 | www.久久婷婷 | 国产伦精品一区二区三区照片91 | 五月网婷婷 | 日本特黄特色aaa大片免费 | 日韩网页| 999久久国产精品免费观看网站 | 天天操天天干天天操天天干 | 最近2019年日本中文免费字幕 | 国产精品久久久久久久久搜平片 | 久青草电影 | 99综合电影在线视频 | 久久看片网 | 色在线免费观看 | 亚洲视频免费在线观看 | 一级黄色毛片 | 国内99视频 | 国产精品视频久久 | 最新av网址在线 | 最近字幕在线观看第一季 | 日韩一区二区三区在线看 | 免费在线观看污网站 | 亚洲一二三在线 | 91污视频在线| 激情综合中文娱乐网 | 91伊人久久大香线蕉蜜芽人口 | 中文字幕亚洲字幕 | 国产精品免费观看国产网曝瓜 | 国产伦精品一区二区三区四区视频 | 色在线视频网 | 国产精品久久久久久久免费大片 | 久草免费资源 | 黄色一集片 | 亚洲欧洲日韩 | 欧美日韩不卡一区 | 99国产免费网址 | 最近日本中文字幕a | 婷婷综合在线 | 中文字幕免费久久 | 91精品天码美女少妇 | 99欧美视频 | 丁香婷婷综合激情五月色 | 日韩激情一二三区 | 国产正在播放 | 免费在线观看日韩欧美 | 国产精品免费久久久久影院仙踪林 | 最新影院 | 国产精品精品 | 国产精品久久久久9999 | 91片黄在线观 | 亚洲天天综合网 | 黄色av三级在线 | 日韩网站在线免费观看 | 97电影手机版 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 成人黄色大片在线免费观看 | 免费看的黄色的网站 | 成人av在线观 | 免费av福利 | 成人免费视频播放 | 国产99在线免费 | 亚洲综合色激情五月 | 久草在线高清 | 91av视频导航| 欧美日韩综合在线观看 | 日韩中文幕 | av电影免费在线看 | 国产午夜精品久久 | 午夜黄色影院 | 91在线九色 | 一区二区精品在线观看 | 美女久久 | 黄色精品免费 | 亚洲午夜精品久久久 | 久久激情综合网 | 911香蕉视频 | 欧美日韩色婷婷 | 中国一区二区视频 | 在线不卡a| 亚洲成av人电影 | 久久av在线| 久久天天躁狠狠躁亚洲综合公司 | 99日精品| 91网页版在线观看 | 日日激情 | 久草在线资源观看 | 极品久久久 | 精品视频久久 | 激情综合六月 | 中文字幕在线看视频 | 91精品啪在线观看国产81旧版 | 国产黄色播放 | 91在线精品秘密一区二区 | 最新日本中文字幕 | 日韩精品一区二区在线 | 国产精品一区二区精品视频免费看 | 日韩va欧美va亚洲va久久 | 波多野结衣电影久久 | 国产精品免费视频网站 | 久久精品亚洲 | 69xx视频 | 中文字幕在线影院 | 国产精品女同一区二区三区久久夜 | 波多野结衣在线视频免费观看 | 免费a视频在线观看 | 成年人视频在线免费 | 福利在线看片 | 在线看av的网址 | 91中文字幕网 | 日韩激情第一页 | av色综合网 | 99产精品成人啪免费网站 | 黄网站色视频免费观看 | av在线播放免费 | 国产精品18毛片一区二区 | 欧美日韩国产一区二区三区 | 黄色www免费| 国产精品久久二区 | 国产精品自在欧美一区 | 国语麻豆 | 成年人看片 | 人人看人人 | 国产视频精品久久 | 色天天综合网 | 色播五月激情五月 | av在线亚洲天堂 | 香蕉精品在线观看 | 国产午夜精品久久久久久久久久 | 91亚洲狠狠婷婷综合久久久 | 国产精品系列在线播放 | av在线日韩 | 成人a视频在线观看 | 久久免费精品一区二区三区 | 手机成人在线电影 | 99久久999久久久精玫瑰 | av电影在线不卡 | 亚洲涩涩涩涩涩涩 | 久久99精品久久久久久三级 | 99在线精品免费视频九九视 | av一区在线| 日韩字幕在线观看 | 天天伊人网 | 亚洲精品视频偷拍 | 国产黄色视| 成人黄色片免费 | 日韩在线免费看 | 香蕉视频免费在线播放 | 精品久久久久久亚洲 | 97视频免费播放 | 精品国产美女在线 | 国产色视频网站2 | 亚洲福利精品 | 婷婷午夜天| 天天综合色天天综合 | 91丨九色丨高潮 | 国产精品99久久久久久有的能看 | 国产a级片免费观看 | 亚洲国产网站 | 超碰人人舔 | 国产成人区 | 丁香电影小说免费视频观看 | 国产婷婷色 | 天天色天天搞 | 午夜婷婷在线播放 | 97成人精品| 日韩精品电影在线播放 | 日日操网站 | av免费高清观看 | 欧美精品免费视频 | 国产亚洲欧美精品久久久久久 | 成人免费xxx在线观看 | 在线视频日韩欧美 | 丁香狠狠 | 欧美色综合 | 久久久黄色 | 深夜激情影院 | 91久久精品一区二区二区 | 精品国产一区二区三区久久久久久 | 国产福利在线免费 | 一级淫片在线观看 | 国产精品不卡一区 | 免费在线一区二区三区 | 天天爱天天操天天射 | 五月婷婷综合久久 | 国产成人av网址 | 超碰97.com | 精品亚洲国产视频 | 欧美网站黄色 | 成人免费视频视频在线观看 免费 | 久热只有精品 | 国产中文欧美日韩在线 | 91在线观看黄 | 91麻豆产精品久久久久久 | 午夜视频免费播放 | 91探花国产综合在线精品 | 日日夜夜91| 一区精品在线 | 91人人揉日日捏人人看 | 天天天操操操 | 国产女人免费看a级丨片 | 在线精品视频在线观看高清 | 黄色软件视频网站 | 亚洲成人家庭影院 | 国产一区二区精品91 | 亚洲最大av网站 | 在线免费试看 | 永久免费毛片在线观看 | 91久久精品一区二区二区 | 国产日产精品一区二区三区四区 | 日韩中文字幕视频在线观看 | 黄色福利网站 | 欧美一级日韩三级 | 香蕉网在线播放 | 综合网五月天 | 97麻豆视频 | 91香蕉视频 | 亚洲精品在线观看不卡 | 欧美日韩在线视频观看 | 日日日操操 | 亚洲天堂香蕉 | 波多野结衣在线观看视频 | 成人在线观看影院 | 婷婷丁香在线 | 一区二区三区 中文字幕 | 美女视频是黄的免费观看 | 丁香狠狠| 国产91粉嫩白浆在线观看 | 国产黄色美女 | 亚州中文av| 玖玖在线免费视频 | 国产精品永久免费观看 | 中文字幕精品视频 | 国产另类av | 成人在线网站观看 | 日韩网站一区二区 | 五月黄色 | 国产精品久久久久久久久费观看 | bbw av| 久久视频这里只有精品 | 国产精品完整版 | 婷婷精品进入 | 激情综合色综合久久综合 | 波多野结衣在线视频一区 | 色噜噜日韩精品欧美一区二区 | 久久这里只有精品视频首页 | 日韩有码第一页 | 福利视频| 免费欧美高清视频 | 超碰在线人人97 | 日韩在线观看中文字幕 | 97在线播放| 最近日本中文字幕 | 精品国产成人av在线免 | 深爱婷婷久久综合 | 久精品视频在线观看 | 国产精品久久二区 | 久久久久久久久久久久亚洲 | 欧美一级黄色视屏 | 国产精品日韩久久久久 | 亚洲欧美在线观看视频 | 日一日操一操 | 九色在线| 国产91亚洲| 99久久久久免费精品国产 | 色在线网站| 色视频在线免费 | 天天夜夜狠狠操 | 久久久久久久免费看 | 在线a视频免费观看 | 99精品视频一区 | 激情婷婷| 国产在线高清 | 99tvdz@gmail.com | 久久久久久久久久久免费av | 在线导航福利 | 成人9ⅰ免费影视网站 | 在线观看你懂的网站 | 久久极品 | 精品国产欧美一区二区三区不卡 | 最近中文字幕完整高清 | 天天色天天干天天色 | 欧美日韩国产综合网 | 久久99久久99精品中文字幕 | 国产精品毛片一区二区 | 国产 中文 日韩 欧美 | 国内精品久久久久影院一蜜桃 | 国产成人av在线影院 | 国产精品一区二区三区四区在线观看 | 欧美精品中文在线免费观看 | 欧美一级性生活视频 | 国产特级毛片aaaaaa毛片 | 中文字幕av在线 | 国产视频精品免费播放 | 啪啪免费试看 | 中文国产在线观看 | 欧美日韩国产一二 | 亚州免费视频 | 久久久黄色免费网站 | av中文字幕第一页 | 天堂资源在线观看视频 | avcom在线| 午夜久久久久久久久久久 | 亚洲va欧美va人人爽春色影视 | 夜夜操网站 | 国产精品日韩在线观看 | aaa日本高清在线播放免费观看 | 一区二区激情 | 色香com.| 奇米影视999 | 日韩素人在线观看 | 欧美a免费 | 天天干夜夜夜操天 | 亚洲综合视频在线观看 | va视频在线 | 天天色天天 | 高清不卡一区二区在线 | 欧美日韩精品在线一区二区 | 国产精品 欧美 日韩 | 日韩免费看的电影 | 婷婷在线网 | 视频在线观看国产 | 狠狠色丁香婷婷综合欧美 | 天天色棕合合合合合合 | 婷婷夜夜 | 日本99干网| 亚洲国产精品成人综合 | 成人av在线网址 | 国产69熟 | 日韩欧美视频一区二区 | 亚洲另类xxxx | 亚洲视频中文 | 欧美日韩综合在线 | 中文字幕在线观看一区二区 | 99 色| 精品视频在线观看 | 黄色1级大片 | 免费观看一级成人毛片 | 亚洲午夜小视频 | 性色在线视频 | 波多野结衣小视频 | 在线蜜桃视频 | 国产精品成人av电影 | 午夜精品福利在线 | 国产麻豆成人传媒免费观看 | av在线网站免费观看 | 精品国内自产拍在线观看视频 | 国产不卡在线观看视频 | 深夜福利视频在线观看 | 亚洲精品国精品久久99热 | 黄色免费av| 在线观看亚洲精品 | 中文字幕在线观看一区 | 欧美色婷婷| 黄色免费av | 日韩av电影免费在线观看 | 91亚洲精品在线 | 国产一级片免费视频 | 国产不卡毛片 | 久久久999精品视频 国产美女免费观看 | 国产视频中文字幕 | 精品一区二三区 | 97视频在线免费 | 国产精品欧美一区二区三区不卡 | 中文字幕 国产视频 | 国产黄影院色大全免费 | 国产露脸91国语对白 | 91精品导航 | 欧美日韩久久久 | 丰满少妇在线观看网站 | 夜夜狠狠| 久久九九九九 | 久久www免费人成看片高清 | www.亚洲黄色| 国内视频 | 精品欧美乱码久久久久久 | 国产一级在线播放 | 日韩欧美电影在线观看 | 亚洲一二区视频 | 狠狠色香婷婷久久亚洲精品 | 黄色小网站在线 | 婷婷天天色 | 国产精品久一 | 97超碰国产精品 | 一区二区三区国 | 国产精品国产三级国产aⅴ入口 | 中文字幕日韩一区二区三区不卡 | 国产亚洲精品无 | 免费成人在线观看视频 | 日韩一区二区三区在线观看 | 欧美精品午夜 | 午夜免费视频网站 | 亚洲午夜久久久综合37日本 | 啪嗒啪嗒免费观看完整版 | 欧美婷婷色 | 国产淫片免费看 | www国产一区 | 午夜视频在线网站 | 国精产品999国精产品视频 | 日韩av一区二区在线播放 | 黄色三级av | 日韩激情免费视频 | 国产精品99久久久久人中文网介绍 | 国产精品久久久久久久免费大片 | 久久视影| 久草视频视频在线播放 | 亚洲麻豆精品 | 欧美日韩性视频在线 | 成全免费观看视频 | 久久国产精品久久久久 | 五月婷婷色丁香 | 激情九九 | 久久久久免费看 | 欧美精品久久久久久久亚洲调教 | 国产在线观看你懂得 | 欧美日韩一区久久 | 麻豆视频免费入口 | 91视频高清完整版 | 91在线观看高清 | 91在线九色 | 特级毛片在线观看 | 二区三区精品 | 一区二区三区在线免费播放 | 91av蜜桃| av色图天堂网 | 一区二区三区四区五区六区 | 久久精品一区二区 | 国产午夜精品久久久久久久久久 | 五月网婷婷 | 国产精品精品久久久 | 99re中文字幕| 亚洲码国产日韩欧美高潮在线播放 | 一区二区三区 中文字幕 | 久久在线看 | 九九久| 婷婷色中文网 | 久久免费视频3 | 91高清免费在线观看 | 亚洲经典中文字幕 | 91av在线视频播放 | 97视频免费在线观看 | 午夜av免费看 | 狠狠干天天 | 久久久久久网址 | 国产成人精品日本亚洲999 | 91天天操 | 亚洲免费精品一区二区 | 黄色在线免费观看网址 | 国产黄色视 | 国产高清专区 | www.在线看片.com | 国产精品一区在线 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 日韩欧美视频一区二区三区 | 天天插天天干天天操 | 久久久99国产精品免费 | av在线官网| 高清国产午夜精品久久久久久 | 国内外激情视频 | 久久精品国产亚洲aⅴ | 91久久精品一区二区二区 | 中文字幕在线观看网站 | 亚洲综合爱 | 九九九九精品九九九九 | 在线观看岛国av | 亚洲欧美少妇 | 成人在线视频你懂的 | 久久电影国产免费久久电影 | 欧美日韩色婷婷 | 天天综合五月天 | 国产麻豆剧果冻传媒视频播放量 | 一区二区不卡 | 精品免费在线视频 | 日韩丝袜在线 | 日韩中文字幕网站 | 四川bbb搡bbb爽爽视频 | 久久 国产一区 | 五月天六月婷 | 久久人人爽爽 | 日韩专区中文字幕 | 亚洲精品免费观看 | 操久| 久久综合九色综合97婷婷女人 | 韩国av三级 | 伊人开心激情 | 国产黄大片| 久久精品高清视频 | 国产成人精品一区二区三区网站观看 | av在线com| 亚洲国产婷婷 | 午夜在线免费观看视频 | 精品网站999www | 国产欧美日韩一区 | 韩日成人av | 婷婷香蕉 | 国产精品18久久久久久久久久久久 | 中文字幕一区二区在线观看 | 国产在线观看不卡 | 中文字幕第一页在线播放 | 天天做夜夜做 | 在线观看黄 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 99久久久国产精品 | 97爱| 天天色天天 |