日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

JVM之class文件結構

瀏覽:225日期:2024-07-20 09:02:50
內容: by cloud (safesuite@263.net ) 定義:u1 1個字節為單位的非負值 u2 2個字節為單位的非負值 u3 . . . . . . . . (其他以此類推 ) Java文件結構用類似struct的描述如下: ClassFile { u4 magic; // 必須為: 0xCAFEBABE u2 minor_version; u2 major_version; //CLASS文件結構主次版本號 JAVA2支持45.0-46.0 u2 constant_pool_count; //記錄常量信息 cp_info constant_pool[constant_pool_count-1]; //計數從1開始 u2 access_flags; //class/interface訪問權限 u2 this_class; //指向constant_poll中的有效索引值 u2 super_class; //0或指向constant_poll中的有效索引值,對于interface必須為非0 u2 interfaces_count; //superinterfaces的個數 u2 interfaces[interfaces_count]; //計數[0,count-1) 對應constant_pool中的一個索引值 u2 fields_count; field_info fields[fields_count]; //主要用于記錄class及實例中的變量 u2 methods_count; method_info methods[methods_count]; u2 attributes_count; attribute_info attributes[attributes_count]; } cp_info { u1 tag; u1 info[]; } tag 意義如下: CONSTANT_Class 7 CONSTANT_Fieldref 9 CONSTANT_Methodref 10 CONSTANT_InterfaceMethodref 11 CONSTANT_String 8 CONSTANT_Integer 3 CONSTANT_Float 4 CONSTANT_Long 5 CONSTANT_Double 6 CONSTANT_NameAndType 12 CONSTANT_Utf8 1 此時cp_info分別對應結構變化為 1. CONSTANT_Class CONSTANT_Class_info { u1 tag; u2 name_index; } 2. CONSTANT_Fieldref CONSTANT_Fieldref_info { u1 tag; u2 class_index; //constant_pool的索引,對應CONSTANT_Class_info u2 name_and_type_index;//constant_pool的索引,對應CONSTANT_NameAndType_info } 3. CONSTANT_Methodref CONSTANT_Methodref_info { u1 tag; u2 class_index; u2 name_and_type_index; } 4. CONSTANT_InterfaceMethodref CONSTANT_InterfaceMethodref_info { u1 tag; u2 class_index; u2 name_and_type_index; } 5. CONSTANT_String CONSTANT_String_info { u1 tag; u2 string_index; } 6. CONSTANT_Integer CONSTANT_Integer_info { u1 tag; u4 bytes; } 7. CONSTANT_Float CONSTANT_Float_info { u1 tag; u4 bytes; } 8. CONSTANT_Long CONSTANT_Long_info { u1 tag; u4 high_bytes; u4 low_bytes; } 9. CONSTANT_Double CONSTANT_Double_info { u1 tag; u4 high_bytes; u4 low_bytes } 10.CONSTANT_NameAndType CONSTANT_NameAndType_info { u1 tag; u2 name_index; u2 descriptor_index; } 11.CONSTANT_Utf8 CONSTANT_Utf8_info { u1 tag; u2 length; u1 bytes[length]; } access_flags意義如下: ACC_PUBLIC 0x0001 ACC_FINAL 0x0010 ACC_SUPER 0x0020 ACC_INTERFACE 0x0200 ACC_ABSTRACT 0x0400 如果是interface那么必須置ACC_INTERFACE,如果沒有置ACC_INTERFACE則定義的是一個類而非接口。 如果設置了ACC_INTERFACE,那么ACC_ABSTRACT位也必須被設置,當然也可以設置ACC_PUBLIC。 ACC_SUPER用以表明invokespecial語義,Sun公司老的JAVA編譯器沒有設置ACC_SUPER,并且老的JVM 忽略ACC_SUPER位,但新的編譯器應該實現invokespecial語義。 其他未指明的位保留將來使用,并且編譯器應當將其置為0,同時Java虛擬機應當忽略他們。 this_class: constant_pool中的索引值,指向的元素的cp_info等價為CONSTANT_Class_info CONSTANT_Class_info { u1 tag; //必須為CONSTANT_Class (7) u2 name_index; //為指向constant_pool中的一個索引值 } name_index :指向的元素的cp_info等價為CONSTANT_Utf8_info CONSTANT_Utf8_info { u1 tag; //必須為CONSTANT_Utf8 (1) u2 length; u1 bytes[length]; //Utf8編碼的字符串 } field_info { u2 access_flags; //訪問控制權 u2 name_index; //constant_pool中的索引,對應于CONSTANT_Utf8_info描述。 u2 descriptor_index; //constant_pool中的索引,對應于CONSTANT_Utf8_info描述。 u2 attributes_count; attribute_info attributes[attributes_count]; //attribute_info將在mothods后描述。 } field_info中access_flages意義如下: ACC_PUBLIC 0x0001 ACC_PRIVATE 0x0002 ACC_PROTECTED 0x0004 ACC_STATIC 0x0008 ACC_FINAL 0x0010 ACC_VOLATILE 0x0040 ACC_TRANSIENT 0x0080 其中很顯然不能同時為ACC_FINAL和ACC_VOLATILE ;且前三項是互斥的。 interface必須置ACC_PUBLIC, ACC_STATIC,ACC_FINAL位,且不能置其他位。 其他未指明的位保留將來使用,并且編譯器應當將其置為0,同時Java虛擬機應當忽略他們。 methods指明了類中的所有方法。 method_info { u2 access_flags; u2 name_index; //指向constant_pool的入口,對應為CONSTANT_Utf8_info u2 descriptor_index; //指向constant_pool的入口,對應為CONSTANT_Utf8_info u2 attributes_count; attribute_info attributes[attributes_count]; //此處只能出現Code、Exceptions、Synthetic、Deprecated四種類型的屬性 } access_flags訪問權描述如下: ACC_PUBLIC 0x0001 ACC_PRIVATE 0x0002 ACC_PROTECTED 0x0004 ACC_STATIC 0x0008 ACC_FINAL 0x0010 ACC_SYNCHRONIZED 0x0020 ACC_NATIVE 0x0100 ACC_ABSTRACT 0x0400 ACC_STRICT 0x0800 attribute_info { u2 attribute_name_index; //constant_pool中的索引,對應于CONSTANT_Utf8_info描述。 u4 attribute_length; u1 info[attribute_length]; } 現在已經預定義的屬性有: 1. SourceFile : attribute_info被替代為: SourceFile_attribute { u2 attribute_name_index; u4 attribute_length; u2 sourcefile_index; //指向constant_pool中的一個CONSTANT_Utf8_info 結構。 } 2. ConstantValue : attribute_info被替代為: ConstantValue_attribute { u2 attribute_name_index; u4 attribute_length; //必須為2 u2 constantvalue_index; } 對于constantvalue_index意義如下: longCONSTANT_Long floatCONSTANT_Float double CONSTANT_Double int, short, char, byte, boolean CONSTANT_Integer String CONSTANT_String ConstantValue用于field_info 中,用于描述一個static常量, 且此時field_info的access_flags應為ACC_STATIC 3. Code : attribute_info被替代為: Code_attribute { u2 attribute_name_index; u4 attribute_length; u2 max_stack; //執行此函數時可用的棧的最大深度 u2 max_locals; //執行此函數可用到的最大本地變量數目,包括參數。 // 注意:一個long/double相當于2個變量數目. u4 code_length; //本函數用到的代碼長度。 u1 code[code_length]; //實現本函數的真正字節碼 u2 exception_table_length; { u2 start_pc; u2 end_pc; //捕獲違例時執行代碼數組中的[start_pc, end_pc)部分 u2 handler_pc; //現在還不大明白他是干嘛的!! u2 catch_type; //指向constant_pool的索引,對應CONSTANT_Class_info }exception_table[exception_table_length]; u2 attributes_count; attribute_info attributes[attributes_count]; } CONSTANT_Class_info { u1 tag; //必須為CONSTANT_Class (7) u2 name_index; //不用我再說了吧? } Code屬性用于method_info結構中。 4. Exceptions : attribute_info被替代為: Exceptions_attribute { u2 attribute_name_index; u4 attribute_length; u2 number_of_exceptions; u2 exception_index_table[number_of_exceptions]; } 5. InnerClasses : attribute_info被替代為: InnerClasses_attribute { u2 attribute_name_index; u4 attribute_length; u2 number_of_classes; { u2 inner_class_info_index; u2 outer_class_info_index; u2 inner_name_index; u2 inner_class_access_flags; } classes[number_of_classes]; } 6. Synthetic : attribute_info被替代為: Synthetic_attribute { u2 attribute_name_index; //不用廢話了吧? u4 attribute_length; //必須為0 } Synthetic用在 field_info、 method_info 中, 一個沒有出現在源程序中的變量必須使用Synthetic標記。 7. LineNumberTable : attribute_info被替代為: LineNumberTable_attribute { u2 attribute_name_index; u4 attribute_length; u2 line_number_table_length; { u2 start_pc; //代碼數組中的開始處 u2 line_number; //源文件中的行號(對于每一非空行都有這么一項) } line_number_table[line_number_table_length]; } LineNumberTable用于Code屬性中,通常用于調試。 8. LocalVariableTable : attribute_info被替代為: LocalVariableTable_attribute { u2 attribute_name_index; u4 attribute_length; u2 local_variable_table_length; { u2 start_pc; u2 length; //當解釋到代碼數組的[start_pc,start_pc+length] //時變量必須被賦值?? u2 name_index; u2 descriptor_index; u2 index; //到本地變量數組的一個索引 } local_variable_table[local_variable_table_length]; } 9. Deprecated : attribute_info被替代為: Deprecated_attribute { u2 attribute_name_index; u4 attribute_length; //必須為0 } 當然你也可以定義自己的屬性,但要你自己的編譯器和虛擬機實現。JVM將忽略自己不認可的屬性。 來實踐一下吧!編寫一個最簡單的程序:class Test{ public static void main(String[] args) { System.out.println('Hello World!'); }} c:work>javac Test.java c:work>filedump Test.class File Dump V0.3 Beta by cloud (safesuite@363.net). 01:00 ca fe ba be 00 03 00 2d 00 1d 0a 00 06 00 0f 09 .......-........01:01 00 10 00 11 08 00 12 0a 00 13 00 14 07 00 15 07 ................01:02 00 16 01 00 06 3c 69 6e 69 74 3e 01 00 03 28 29 ........()01:03 56 01 00 04 43 6f 64 65 01 00 0f 4c 69 6e 65 4e V...Code...LineN01:04 75 6d 62 65 72 54 61 62 6c 65 01 00 04 6d 61 69 umberTable...mai01:05 6e 01 00 16 28 5b 4c 6a 61 76 61 2f 6c 61 6e 67 n...([Ljava/lang01:06 2f 53 74 72 69 6e 67 3b 29 56 01 00 0a 53 6f 75 /String;)V...Sou01:07 72 63 65 46 69 6c 65 01 00 09 54 65 73 74 2e 6a rceFile...Test.j>d02:00 61 76 61 0c 00 07 00 08 07 00 17 0c 00 18 00 19 ava.............02:01 01 00 0c 48 65 6c 6c 6f 20 57 6f 72 6c 64 21 07 ...Hello World!.02:02 00 1a 0c 00 1b 00 1c 01 00 04 54 65 73 74 01 00 ..........Test..02:03 10 6a 61 76 61 2f 6c 61 6e 67 2f 4f 62 6a 65 63 .java/lang/Objec02:04 74 01 00 10 6a 61 76 61 2f 6c 61 6e 67 2f 53 79 t...java/lang/Sy02:05 73 74 65 6d 01 00 03 6f 75 74 01 00 15 4c 6a 61 stem...out...Lja02:06 76 61 2f 69 6f 2f 50 72 69 6e 74 53 74 72 65 61 va/io/PrintStrea02:07 6d 3b 01 00 13 6a 61 76 61 2f 69 6f 2f 50 72 69 m;...java/io/Pri>d03:00 6e 74 53 74 72 65 61 6d 01 00 07 70 72 69 6e 74 ntStream...print03:01 6c 6e 01 00 15 28 4c 6a 61 76 61 2f 6c 61 6e 67 ln...(Ljava/lang03:02 2f 53 74 72 69 6e 67 3b 29 56 00 20 00 05 00 06 /String;)V. ....03:03 00 00 00 00 00 02 00 00 00 07 00 08 00 01 00 09 ................03:04 00 00 00 1d 00 01 00 01 00 00 00 05 2a b7 00 01 ............*...03:05 b1 00 00 00 01 00 0a 00 00 00 06 00 01 00 00 00 ................03:06 01 00 09 00 0b 00 0c 00 01 00 09 00 00 00 25 00 ..............%.03:07 02 00 01 00 00 00 09 b2 00 02 12 03 b6 00 04 b1 ................>d04:00 00 00 00 01 00 0a 00 00 00 0a 00 02 00 00 00 05 ................04:01 00 08 00 06 00 01 00 0d 00 00 00 02 00 0e ..............> 解讀一下: ca fe ba be magic00 03 00 2d 次主版本號,換算一下: 45.3 (注意,不是高字節在前,別犯職業病!)00 1d constant_pool元素個數加一 : 29 那么constant_pool就是[1-28]constant_pool: 1-28 1. 0a 00 06 00 0f 0x0a :CONSTANT_InterfaceMethodref 0x06 :class index 0x0f :name-type-index2. 09 00 10 00 11 0x09 : CONSTANT_Fieldref 0x10: . . . 0x11 :. . . .3. 08 00 12 0x08 : CONSTANT_String 0x12 : string_index4. 0a 00 13 00 14 0x0a同于1.5. 07 00 15 0x07 : CONSTANT_Class 0x15 : name_index6. 07 00 167. 01 00 06 3c 69 6e 69 74 3e 01 ... 0x01 CONSTANT_Utf8 0x06 : string length '' : 構造函數8. 01 00 03 28 29 56 ...()V 函數,無參數 0x01 . . . . . . 0x03 : . . . . '()V' : .. .9. 01 00 04 43 6f 64 65 ...Code10. 01 00 0f 4c 69 6e 65 4e 75 6d 62 65 72 54 61 62 6c 65 ...LineNumberTable11. 01 00 04 6d 61 69 6e ...main12. 01 00 16 28 5b 4c 6a 61 76 61 2f 6c 61 6e 67 2f 53 74 72 69 6e 67 3b 29 56 ...([Ljava/lang/String;)V 函數,參數為String[]類型13. 01 00 0a 53 6f 75 72 63 65 46 69 6c 65 ...SourceFile14. 01 00 09 54 65 73 74 2e 6a 61 76 61 ...Test.java15. 0c 00 07 00 08 0x0c:CONSTANT_NameAndType 07 : name-index 08:name-type-index16. 07 00 1717. 0c 00 18 00 1918. 01 00 0c 48 65 6c 6c 6f 20 57 6f 72 6c 64 21 ...Hello World!19. 07 00 1a20. 0c 00 1b 00 1c21. 01 00 04 54 65 73 74 ...Test22. 01 00 10 6a 61 76 61 2f 6c 61 6e 67 2f 4f 62 6a 65 63 74 ...java/lang/Object23. 01 00 10 6a 61 76 61 2f 6c 61 6e 67 2f 53 79 73 74 65 6d ...java/lang/System24. 01 00 03 6f 75 74 ...out25. 01 00 15 4c 6a 61 76 61 2f 69 6f 2f 50 72 69 6e 74 53 74 72 65 61 6d 3b ...Ljava/io/PrintStream;26. 01 00 13 6a 61 76 61 2f 69 6f 2f 50 72 69 6e 74 53 74 72 65 61 6d...java/io/PrintStream27. 01 00 07 70 72 69 6e 74 6c 6e ...println28. 01 00 15 28 4c 6a 61 76 61 2f 6c 61 6e 67 2f 53 74 72 69 6e 67 3b 29 56 ...(Ljava/lang/String;)V 00 20 access_flags00 05 this_class00 06 super_class00 00 interfaces_count00 00 fields_count00 02 methods_count methods[2]: method_info { u2 access_flags; u2 name_index; u2 descriptor_index; u2 attributes_count; attribute_info attributes[attributes_count];}0. 00 00 access_flags; 00 07 name_index; 看看constant_pool的第7項: 表明當前描述構造函數 00 08 descriptor_index; 00 01 attributes_count; 00 09 attribute_name_index 0x09 看看constant_pool的第9項,簡單明了Code !! 00 00 00 1d attribute_length = 29 00 01 max_stack 00 01 max_locals 00 00 00 05 code_length 2a b7 00 01 b1 JVM定義的操作碼代碼段數組 00 00 exception_table_length 00 01 attributes_count 一個,接下來是attribute_info結構 00 0a attribute_name_index 看看constant_pool的第10項: LineNumberTable(顯然調試用) 00 00 00 06 attribute_length 00 01 line_number_table_length 00 00 start_pc 00 01 line_number 1. 00 09 access_flags PUBLIC & STATIC 00 0b name_index; 表明當前描述main函數 00 0c descriptor_index; ...([Ljava/lang/String;)V 00 01 attributes_count; 00 09 attribute_name_index Code 00 00 00 25 attribute_length = 37 00 02 max_stack 00 01 max_locals 00 00 00 09 code_length b2 00 02 12 03 b6 00 04 b1 代碼數組 codeArray1[0-8] 00 00 exception_table_length 00 01 attributes_count 接下來是attribute_info結構 00 0a attribute_name_index LineNumberTable 00 00 00 0a attribute_length 00 02 line_number_table_length 00 00 start_pc 00 05 line_number 00 08 start_pc : codeArray1[8] = 0xb1 return 00 06 line_number 第6行源程序為 } 00 01 attributes_count00 0d attribute_name_index 屬性為SourceFile00 00 00 02 attribute_length00 0e sourcefile_index constant_pool[0x0e] ---> 'Test.java' 接下來我們看看main()函數對應的代碼: b2 00 02 12 03 b6 00 04 b1 0xb2 0x00 0x02 : getstatic #2 看看constant_pool[0x02] :09 00 10 00 11 0x09 : CONSTANT_Fieldref 0x10: class index 0x11 :name-type-index constant_pool[0x10]: constant_pool[0x17] : java/lang/System constant_pool[0x11]: 0x18 : class index 0x19 :name-type-index constant_pool[0x18] : out constant_pool[0x19] : Ljava/io/PrintStream 即 System.out 為 java.io.PrintStream 類型 0x12 0x03 : ldc #3 看看 constant_pool[3] : 08 00 12 0x08 : CONSTANT_String 0x12 : string_index 指向一個字符串 constant_pool[0x12]: 'Hello World!' 故該指令加載了字符串索引到本地棧0xb6 0x00 0x04: invokevirtual #4 -----到constant_pool查查 0x13 :class 0x14 :name-t 看看constant_pool[0x13]:java/io/PrintStream constant_pool[20] : 00 1b 00 1c constant_pool[0x1b]:println . . . . :(Ljava/lang/String;)V 故該指令調用了 java.io.PrintStream.println(java.lang.String) 而參數則為 ldc #3 加載的 'Hello World!'0xb1 : return Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
蜜臀av免费一区二区三区| 国产精品s色| 国产精品久久乐| 日韩在线卡一卡二| 狠狠久久婷婷| 日韩专区一卡二卡| 视频一区中文字幕| 亚洲欧美久久| 蜜臀av性久久久久蜜臀aⅴ流畅| 婷婷综合激情| 欧美日韩精品一本二本三本 | | 日韩欧美中文在线观看| 一区二区三区国产盗摄| 蜜桃视频第一区免费观看| 亚洲精品在线国产| 日本一区中文字幕| 欧美黄色一区| 久久青青视频| 亚洲精品91| 中文字幕成人| 久久精品超碰| 精品久久电影| 亚洲v在线看| 奶水喷射视频一区| 亚洲毛片视频| 国产精品成人国产| 不卡专区在线| 黑丝美女一区二区| 老牛影视一区二区三区| 日韩在线麻豆| 久久久久九九精品影院| 青青久久av| 伊人影院久久| 欧美日韩xxxx| 国产超碰精品| 亚洲日产国产精品| 国产精品成人国产| 日韩一区二区三区免费播放| 欧美精品黄色| 国产乱码精品一区二区三区四区| 精品亚洲免a| 国产99精品| 日本综合精品一区| 欧美国产偷国产精品三区| 免费精品国产| 国产欧美久久一区二区三区| 日本欧美不卡| 亚洲精品激情| 国产成人精品一区二区三区视频| 99riav1国产精品视频| 国产日本精品| 久久蜜桃精品| 日韩精品国产欧美| 免费福利视频一区二区三区| 亚洲影视一区二区三区| 成人黄色av| 国产亚洲在线观看| 麻豆国产一区| 国产亚洲在线| 成人污污视频| 在线一区二区三区视频| 在线看片国产福利你懂的| 亚洲三级av| 日韩不卡在线| 国产日产一区| 丝袜国产日韩另类美女| 日本激情一区| 日韩精品免费观看视频| 中文另类视频| 国产午夜精品一区在线观看| 午夜视频精品| 久久只有精品| 丝袜a∨在线一区二区三区不卡| 高清av不卡| 国产亚洲一卡2卡3卡4卡新区| 女人天堂亚洲aⅴ在线观看| 黄色网一区二区| 日本电影久久久| 亚洲激情久久| 亚洲va中文在线播放免费| 国产欧美大片| 日精品一区二区三区| 午夜国产精品视频| 精品国产乱码久久久久久1区2匹 | 高清av一区二区三区| 日韩中文字幕无砖| 婷婷综合社区| 欧美天堂视频| 国产精品hd| 视频一区二区欧美| 秋霞影视一区二区三区| 麻豆国产精品777777在线| 亚洲精品大片| aa国产精品| 成人日韩精品| 久久只有精品| 国产精品白丝av嫩草影院| 亚洲精品裸体| 欧美日韩国产一区精品一区| 蜜桃视频在线网站| 国产福利亚洲| 日本h片久久| 亚洲在线久久| 国产精品嫩草99av在线| 婷婷国产精品| 久久久久国产一区二区| 精品久久久中文字幕| 国产精品一卡| 欧美一级二级三级视频| 日本不卡高清视频| 蜜桃av一区二区三区电影| 亚洲激情二区| 午夜精品一区二区三区国产| 久久免费大视频| 麻豆91小视频| 午夜欧美精品| 丝袜诱惑制服诱惑色一区在线观看 | 亚洲精品看片| 免费人成在线不卡| 亚洲一区国产一区| 好吊一区二区三区| 色爱av综合网| 久久蜜桃av| 亚洲日本网址| 久久久久国产一区二区| 国产亚洲一区二区手机在线观看 | 国产精品久久久久av蜜臀| 日韩精品视频网站| 国产亚洲观看| 欧美欧美黄在线二区| 欧美一区在线观看视频| 国产情侣久久| 精品亚洲成人| 久久精品国产久精国产爱| 婷婷综合一区| 日韩av一二三| 国产精品久久国产愉拍| 免费在线观看一区| 精品视频免费| 成人亚洲欧美| 久久久国产精品一区二区中文| 成人免费网站www网站高清| 欧美日韩一区二区三区视频播放| 欧美1区免费| 视频一区中文字幕| 日韩av午夜在线观看| 国产伦精品一区二区三区视频| 精品一区二区男人吃奶| 色婷婷精品视频| 天堂av在线| 蜜臀av免费一区二区三区| 久久都是精品| 久久激情五月激情| 国模大尺度视频一区二区| 成人日韩在线| 久久国产成人| 欧美在线看片| 黄色欧美在线| 亚洲高清二区| 日韩在线成人| 成人精品国产亚洲| 午夜欧美理论片| 综合一区av| 精品国产亚洲一区二区三区大结局| 成人影视亚洲图片在线| 狠狠久久婷婷| 欧美日韩午夜电影网| 国产成人免费精品| 欧美日韩国产免费观看| 欧美日本三区| 日韩国产一区| 在线看片不卡| 国产精品片aa在线观看| 亚洲成人国产| 日韩1区2区3区| 中文字幕高清在线播放| 国产模特精品视频久久久久| 国产伦精品一区二区三区视频| 亚洲精品一级二级| 国产亚洲在线| 久久爱www.| 欧美日韩三区| 国产精品一区高清| 欧美亚洲激情| 欧美综合社区国产| 日韩欧美另类一区二区| 日韩专区视频网站| 日韩精品第一区| 综合欧美精品| 亚洲国产欧美日本视频| 亚洲精品看片| 99久久久国产精品美女| 国产欧美日韩视频在线| 日韩一区二区免费看| 久久精品 人人爱| 亚洲欧美日韩高清在线| 精品视频免费| 日韩三级精品| 久久精品二区三区|