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

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

JVM之class文件結構

瀏覽:230日期: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久久,三上悠亚国产精品一区二区三区
国产精品白丝一区二区三区| 涩涩涩久久久成人精品| 日韩国产欧美视频| 欧美精品黄色| 国产精品日本| 亚洲精品人人| 欧美日韩调教| 久久99精品久久久久久园产越南| 免费亚洲婷婷| a国产在线视频| 亚洲精品成人图区| 久久精品国产亚洲夜色av网站| 日韩黄色大片| 欧美日韩国产一区精品一区| 日韩一区二区久久| 亚洲一区二区三区久久久| 日韩综合一区二区| 国产麻豆精品久久| 久久精品亚洲一区二区| 天堂√8在线中文| 激情综合自拍| 免费观看久久久4p| 国产剧情在线观看一区| 高清一区二区三区| 尤物tv在线精品| 中文字幕亚洲影视| 国产精品久久久亚洲一区| 日韩成人精品一区二区| 国产综合精品| 亚洲精品一二| 久久精品五月| 五月精品视频| 日韩精品91亚洲二区在线观看| 91精品国产自产在线丝袜啪| 精品国产一区二| 婷婷综合社区| 国产乱码精品一区二区三区亚洲人 | 不卡中文字幕| 亚洲日本三级| 久久久久久亚洲精品美女| 色老板在线视频一区二区| 亚洲一区日韩| 麻豆精品在线| 亚洲大全视频| 综合欧美精品| 国产一区调教| 欧美久久亚洲| 久久久久国产精品一区二区| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产精品美女午夜爽爽| 日韩精品欧美激情一区二区| 美日韩精品视频| 红杏一区二区三区| 视频一区在线视频| 高清一区二区| 中文字幕乱码亚洲无线精品一区| 精品久久久久中文字幕小说| 中日韩男男gay无套| 欧美精品91| 99国产一区| 麻豆91小视频| 日韩中文字幕不卡| 日本а中文在线天堂| 亚洲精品影院在线观看| 亚洲a在线视频| 国产精品成人**免费视频| 国产精品试看| 水蜜桃久久夜色精品一区| 一区二区国产在线| 色婷婷精品视频| 国产精品毛片aⅴ一区二区三区| 亚洲第一区色| 麻豆中文一区二区| 蜜芽一区二区三区| 蜜臀久久精品| 日韩av字幕| 国产视频一区免费看| 成人一二三区| 欧美中文一区| 在线亚洲激情| 亚洲综合电影| 国产精品一区二区免费福利视频| 好吊视频一区二区三区四区| 黄色网一区二区| 日本午夜精品一区二区三区电影 | 色老板在线视频一区二区| 日韩不卡免费视频| 国产精品日本欧美一区二区三区| 国产夫妻在线| 国产精品chinese| 亚洲网址在线观看| 亚洲精品成人| 欧美日韩一二| 亚洲美女久久精品| 麻豆极品一区二区三区| 日本不卡视频在线观看| 午夜欧美精品久久久久久久| 亚洲成人va| а√天堂中文在线资源8| 国产色噜噜噜91在线精品| 亚洲区国产区| 国产精品美女| 亚洲精品一二三区区别| 色婷婷久久久| 电影天堂国产精品| 亚洲黄色中文字幕| 激情视频网站在线播放色| 久久免费视频66| 嫩草伊人久久精品少妇av杨幂| 日韩动漫一区| 日本欧美一区| 日韩中文字幕无砖| 亚洲精品高潮| 日产欧产美韩系列久久99| 日韩中文字幕| 欧美日韩1区2区3区| 亚洲欧洲日韩| 日韩一区二区三区高清在线观看| 亚洲小说春色综合另类电影| 丝袜国产日韩另类美女| 天堂成人国产精品一区| 久久亚洲风情| 三级亚洲高清视频| 中文字幕一区二区三区四区久久| 久久亚洲影院| 日韩一区中文| 国产精品久久久久久久久久白浆 | 日韩精品亚洲一区二区三区免费| 亚洲精品综合| 日日摸夜夜添夜夜添国产精品| 亚洲aa在线| 欧美日本不卡| 国产精品香蕉| 精品国产午夜| 日韩精品免费一区二区三区| 一区二区自拍| 亚洲午夜免费| 久久国产麻豆精品| 你懂的国产精品| 成人日韩在线| 日韩午夜av| 综合国产精品| 国产欧美丝祙| 久久精品国产99国产精品| 丰满少妇一区| 欧美.日韩.国产.一区.二区| 麻豆成人在线| 久久国际精品| 国产suv精品一区| 91精品国产自产在线观看永久∴| 黑丝一区二区| 日韩和欧美一区二区| 国产精品一级| 麻豆成全视频免费观看在线看| 伊人精品一区| 亚洲日本免费电影| 久久精品国产久精国产爱| 欧美手机在线| 老司机久久99久久精品播放免费| 国产日本精品| 欧产日产国产精品视频| 黄色av一区| 91亚洲无吗| 中国字幕a在线看韩国电影| 狠狠爱www人成狠狠爱综合网| 日韩和欧美的一区| 国产精选在线| 在线看片日韩| 精品女同一区二区三区在线观看| 国产在线成人| 日本电影久久久| 免费观看亚洲| 99国产精品视频免费观看一公开| 在线视频亚洲欧美中文| 精品久久久久中文字幕小说| 亚洲精华国产欧美| 国产精品久久久久久久久免费高清| 久久婷婷一区| 欧美日韩一区自拍| 久久要要av| 青青青国产精品| 99视频精品视频高清免费| 天堂va欧美ⅴa亚洲va一国产| 天堂av在线| 日韩中文字幕| 久久婷婷激情| 国产精品一站二站| 日韩一级精品| 久久精品二区亚洲w码| 国产一级一区二区| 久久精品国产在热久久| 视频在线在亚洲| 日韩国产欧美一区二区| 日韩精品视频一区二区三区| 日韩欧美自拍| 欧美久久亚洲| 亚洲综合三区| 亚洲午夜天堂| 久久国际精品| 在线精品视频一区|