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

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

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

实例解析Java class文件格式

發(fā)布時(shí)間:2023/12/19 java 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实例解析Java class文件格式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

 1)Class文件是有8個(gè)字節(jié)為基礎(chǔ)的字節(jié)流構(gòu)成的,這些字節(jié)流之間都嚴(yán)格按照規(guī)定的順序排列,并且字節(jié)之間不存在任何空隙,對(duì)于超過(guò)8個(gè)字節(jié)的數(shù)據(jù),將按 照Big-Endian的順序存儲(chǔ)的,也就是說(shuō)高位字節(jié)存儲(chǔ)在低的地址上面,而低位字節(jié)存儲(chǔ)到高地址上面,其實(shí)這也是class文件要跨平臺(tái)的關(guān)鍵,因?yàn)?PowerPC架構(gòu)的處理采用Big-Endian的存儲(chǔ)順序,而x86系列的處理器則采用Little-Endian的存儲(chǔ)順序,因此為了Class文 件在各中處理器架構(gòu)下保持統(tǒng)一的存儲(chǔ)順序,虛擬機(jī)規(guī)范必須對(duì)起進(jìn)行統(tǒng)一。

 2) Class文件結(jié)構(gòu)采用類似C語(yǔ)言的結(jié)構(gòu)體來(lái)存儲(chǔ)數(shù)據(jù)的,主要有兩類數(shù)據(jù)項(xiàng),無(wú)符號(hào)數(shù)和表,無(wú)符號(hào)數(shù)用來(lái)表述數(shù)字,索引引用以及字符串等,比如 u1,u2,u4,u8分別代表1個(gè)字節(jié),2個(gè)字節(jié),4個(gè)字節(jié),8個(gè)字節(jié)的無(wú)符號(hào)數(shù),而表是有多個(gè)無(wú)符號(hào)數(shù)以及其它的表組成的復(fù)合結(jié)構(gòu)。可能大家看到這里 對(duì)無(wú)符號(hào)數(shù)和表到底是上面也不是很清楚,不過(guò)不要緊,等下面實(shí)例的時(shí)候,我會(huì)再以實(shí)例來(lái)解釋。

  明確了上面的兩點(diǎn)以后,我們接下來(lái)后來(lái)看看Class文件中按照嚴(yán)格的順序排列的字節(jié)流都具體包含些什么數(shù)據(jù):

  

  (上圖來(lái)自The Java Virtual Machine Specification Java SE 7 Edition)

  在看上圖的時(shí)候,有一點(diǎn)我們需要注意,比如cp_info,cp_info表示常量池,上圖中用 constant_pool[constant_pool_count-1]的方式來(lái)表示常量池有constant_pool_count-1個(gè)常量,它 這里是采用數(shù)組的表現(xiàn)形式,但是大家不要誤以為所有的常量池的常量長(zhǎng)度都是一樣的,其實(shí)這個(gè)地方只是為了方便描述采用了數(shù)組的方式,但是這里并不像編程語(yǔ) 言那里,一個(gè)int型的數(shù)組,每個(gè)int長(zhǎng)度都一樣。明確了這一點(diǎn)以后,我們?cè)诨剡^(guò)頭來(lái)看看上圖中每一項(xiàng)都具體代表了什么含義。

  1)u4 magic 表示魔數(shù),并且魔數(shù)占用了4個(gè)字節(jié),魔數(shù)到底是做什么的呢?它其實(shí)就是表示一下這個(gè)文件的類型是一個(gè)Class文件,而不是一張JPG圖片,或者AVI的電影。而Class文件對(duì)應(yīng)的魔數(shù)是0xCAFEBABE.

  2)u2 minor_version 表示Class文件的次版本號(hào),并且此版本號(hào)是u2類型的無(wú)符號(hào)數(shù)表示。

  3) u2 major_version 表示Class文件的主版本號(hào),并且主版本號(hào)是u2類型的無(wú)符號(hào)數(shù)表示。major_version和minor_version主要用來(lái)表示當(dāng)前的虛擬 機(jī)是否接受當(dāng)前這種版本的Class文件。不同版本的Java編譯器編譯的Class文件對(duì)應(yīng)的版本是不一樣的。高版本的虛擬機(jī)支持低版本的編譯器編譯的 Class文件結(jié)構(gòu)。比如Java SE 6.0對(duì)應(yīng)的虛擬機(jī)支持Java SE 5.0的編譯器編譯的Class文件結(jié)構(gòu),反之則不行。

  4) u2 constant_pool_count 表示常量池的數(shù)量。這里我們需要重點(diǎn)來(lái)說(shuō)一下常量池是什么東西,請(qǐng)大家不要與Jvm內(nèi)存模型中的運(yùn)行時(shí)常量池混淆了,Class文件中常量池主要存儲(chǔ)了字 面量以及符號(hào)引用,其中字面量主要包括字符串,final常量的值或者某個(gè)屬性的初始值等等,而符號(hào)引用主要存儲(chǔ)類和接口的全限定名稱,字段的名稱以及描 述符,方法的名稱以及描述符,這里名稱可能大家都容易理解,至于描述符的概念,放到下面說(shuō)字段表以及方法表的時(shí)候再說(shuō)。另外大家都知道Jvm的內(nèi)存模型中 有堆,棧,方法區(qū),程序計(jì)數(shù)器構(gòu)成,而方法區(qū)中又存在一塊區(qū)域叫運(yùn)行時(shí)常量池,運(yùn)行時(shí)常量池中存放的東西其實(shí)也就是編譯器長(zhǎng)生的各種字面量以及符號(hào)引用, 只不過(guò)運(yùn)行時(shí)常量池具有動(dòng)態(tài)性,它可以在運(yùn)行的時(shí)候向其中增加其它的常量進(jìn)去,最具代表性的就是String的intern方法。

  5)cp_info 表示常量池,這里面就存在了上面說(shuō)的各種各樣的字面量和符號(hào)引用。放到常量池的中數(shù)據(jù)項(xiàng)在The Java Virtual Machine Specification Java SE 7 Edition 中一共有14個(gè)常量(除去JDK 1.7之后的CONSTANT_InvokeDynamic和CONSTANT_InvokeDynamicTrans兩個(gè)),每一種常量都是一個(gè)表(Tag,1 ~ 12,缺少標(biāo)志為2的數(shù)據(jù)類型),并且每種常量都用一個(gè)公共的部分tag來(lái)表示是哪種類型的常量。

  CONSTANT_Utf8_info tag標(biāo)志位為1, UTF-8編碼的字符串

  CONSTANT_Integer_info tag標(biāo)志位為3, 整形字面量

  CONSTANT_Float_info tag標(biāo)志位為4, 浮點(diǎn)型字面量

  CONSTANT_Long_info tag標(biāo)志位為5, 長(zhǎng)整形字面量

  CONSTANT_Double_info tag標(biāo)志位為6, 雙精度字面量

  CONSTANT_Class_info tag標(biāo)志位為7, 類或接口的符號(hào)引用

  CONSTANT_String_info tag標(biāo)志位為8,字符串類型的字面量

  CONSTANT_Fieldref_info tag標(biāo)志位為9, 字段的符號(hào)引用

  CONSTANT_Methodref_info tag標(biāo)志位為10,類中方法的符號(hào)引用

  CONSTANT_InterfaceMethodref_info tag標(biāo)志位為11, 接口中方法的符號(hào)引用

  CONSTANT_NameAndType_info tag 標(biāo)志位為12,字段和方法的名稱以及類型的符號(hào)引用

常量項(xiàng)目類型描述
CONSTANT_Utf8_infotagu1值為1
lengthu2UTF-8編碼的字符串占用的字節(jié)數(shù)
bytesu1長(zhǎng)度為length的UTF-8編碼的字符串
CONSTANT_Integer_infotagu1值為3
bytesu4按照高位在前存儲(chǔ)的int值
CONSTANT_Float_infotagu1值為4
bytesu4按照高位在前存儲(chǔ)的float值
CONSTANT_Long_infotagu1值為5
bytesu8按照高位在前存儲(chǔ)的long值
CONSTANT_Double_infotagu1值為6
bytesu8按照高位在前存儲(chǔ)的double值
CONSTANT_Class_infotagu1值為7
indexu2指向全限定名常量項(xiàng)的索引
CONSTANT_String_infotagu1值為8
indexu2指向字符串字面量的索引
CONSTANT_Fieldref_infotagu1值為9
indexu2指向聲明字段的類或接口描述符CONSTANT_Class_info的索引項(xiàng)
indexu2指向字段描述符CONSTANT_NameAndType的索引項(xiàng)
CONSTANT_Methodref_infotagu1值為10
indexu2指向聲明方法的類或接口描述符CONSTANT_Class_info的索引項(xiàng)
indexu2指向名稱及類型CONSTANT_NameAndType的索引項(xiàng)
CONSTANT_InterfaceMethodref_infotagu1值為11
indexu2指向聲明字段的類或接口描述符CONSTANT_Class_info的索引項(xiàng)
indexu2指向名稱及類型CONSTANT_NameAndType的索引項(xiàng)
CONSTANT_NameAndType_infotagu1值為12
indexu2指向該字段或方法名稱常量項(xiàng)的索引
indexu2指向該字段或方法描述符常量項(xiàng)的索引

  6) u2 access_flags 表示類或者接口的訪問(wèn)信息,具體如下圖所示:

 

  7)u2 this_class 表示類的常量池索引,指向常量池中CONSTANT_Class_info的常量

  8)u2 super_class 表示超類的索引,指向常量池中CONSTANT_Class_info的常量

  9)u2 interface_counts 表示接口的數(shù)量

  10)u2 interface[interface_counts]表示接口表,它里面每一項(xiàng)都指向常量池中CONSTANT_Class_info常量

  11)u2 fields_count 表示類的實(shí)例變量和類變量的數(shù)量

  12) field_info fields[fields_count]表示字段表的信息,其中字段表的結(jié)構(gòu)如下圖所示:

  

  上圖中access_flags表示字段的訪問(wèn)表示,比如字段是public,private,protect 等,name_index表示字段名 稱,指向常量池中類型是CONSTANT_UTF8_info的常量,descriptor_index表示字段的描述符,它也指向常量池中類型為 CONSTANT_UTF8_info的常量,attributes_count表示字段表中的屬性表的數(shù)量,而屬性表是則是一種用與描述字段,方法以及 類的屬性的可擴(kuò)展的結(jié)構(gòu),不同版本的Java虛擬機(jī)所支持的屬性表的數(shù)量是不同的。

  13) u2 methods_count表示方法表的數(shù)量

  14)method_info 表示方法表,方法表的具體結(jié)構(gòu)如下圖所示:

  

  其中access_flags表示方法的訪問(wèn)表示,name_index表示名稱的索引,descriptor_index表示方法的描述 符,attributes_count以及attribute_info類似字段表中的屬性表,只不過(guò)字段表和方法表中屬性表中的屬性是不同的,比如方法 表中就Code屬性,表示方法的代碼,而字段表中就沒(méi)有Code屬性。其中具體Class中到底有多少種屬性,等到Class文件結(jié)構(gòu)中的屬性表的時(shí)候再 說(shuō)說(shuō)。

  15) attribute_count表示屬性表的數(shù)量,說(shuō)到屬性表,我們需要明確以下幾點(diǎn):

  屬性表存在于Class文件結(jié)構(gòu)的最后,字段表,方法表以及Code屬性中,也就是說(shuō)屬性表中也可以存在屬性表

  屬性表的長(zhǎng)度是不固定的,不同的屬性,屬性表的長(zhǎng)度是不同的

#################上面說(shuō)完了Class文件結(jié)構(gòu)中每一項(xiàng)的構(gòu)成以后,我們以一個(gè)實(shí)際的例子來(lái)解釋以下上面所說(shuō)的.###################

  

package com.ejushang.TestClass; public class TestClass implements Super { private static final int staticVar = 0; private int instanceVar=0; public int instanceMethod(int param) { return param+1; } } interface Super{ }

  通過(guò)jdk1.6.0_37的javac 編譯后的TestClass.java對(duì)應(yīng)的TestClass.class的二進(jìn)制結(jié)構(gòu)如下圖所示:

  

  下面我們就根據(jù)前面所說(shuō)的Class的文件結(jié)構(gòu)來(lái)解析以下上圖中字節(jié)流。

  1)魔數(shù)

  從Class的文件結(jié)構(gòu)我們知道,剛開(kāi)始的4個(gè)字節(jié)是魔數(shù),上圖中從地址00000000h-00000003h的內(nèi)容就是魔數(shù),從上圖可知Class的文件的魔數(shù)是0xCAFEBABE。

  2)主次版本號(hào)

  接下來(lái)的4個(gè)字節(jié)是主次版本號(hào),有上圖可知從00000004h-00000005h對(duì)應(yīng)的是0×0000,因此Class的minor_version 為0×0000,從00000006h-00000007h對(duì)應(yīng)的內(nèi)容為0×0032,因此Class文件的major_version版本為 0×0032,這正好就是jdk1.6.0不帶target參數(shù)編譯后的Class對(duì)應(yīng)的主次版本。

  3)常量池的數(shù)量

  接下來(lái)的2個(gè)字節(jié)從00000008h-00000009h表示常量池的數(shù)量,由上圖可以知道其值為0×0018,十進(jìn)制為24個(gè),但是對(duì)于常量池的數(shù)量 需要明確一點(diǎn),常量池的數(shù)量是constant_pool_count-1,為什么減一,是因?yàn)樗饕?表示class中的數(shù)據(jù)項(xiàng)不引用任何常量池中的常 量。

  4)常量池

  我們上面說(shuō)了常量池中有不同類型的常量,下面就來(lái)看看TestClass.class的第一個(gè)常量,我們知道每個(gè)常量都有一個(gè)u1類型的tag標(biāo)識(shí)來(lái)表示 常量的類型,上圖中0000000ah處的內(nèi)容為0x0A,轉(zhuǎn)換成二級(jí)制是10,有上面的關(guān)于常量類型的描述可知tag為10的常量是 Constant_Methodref_info,而Constant_Methodref_info的結(jié)夠如下圖所示:

  

第一個(gè)常量池 :0A 00 04 00 13

  • 0A——tag值為10,表示第一個(gè)常量類型是CONSTANT_Methodref_info
  • 00 04——#4?聲明當(dāng)前方法類描述符索引值為4;
  • 00 13——#19當(dāng)前方法的名稱和類型索引值為19;
第二個(gè)常量池 :09 00 03 00 14

  • 09——tag值為9,類型為CONSTANT_Fieldref_info
  • 00 03——#3?聲明當(dāng)前方法類描述符索引值為3;
  • 00 14——#20?字段描述符的名稱和類型索引值為20;

第三個(gè)常量池 :07 00 15?

  • 07——tag值為7,類型為CONSTANT_Class_info
  • 00 15——#21?類型為“類或接口符號(hào)引用”,所以全限定名常量索引為21;

第四個(gè)常量池 :07 00 16?

  • 07——tag值為7,類型為CONSTANT_Class_info
  • 00 16——#16?類型為“類或接口符號(hào)引用”,所以全限定名常量索引為16;

第五個(gè)常量池 :07 00 17

  • 07——tag值為7,類型為CONSTANT_Class_info
  • 00 17——#17?類型為“類或接口符號(hào)引用”,所以全限定名常量索引為17;

第六個(gè)常量池 :01 00 09 73 74 61 74 69 63 56 61 72

  • 01——tag值為1,類型為CONSTANT_Utf8_info
  • 00 09——這個(gè)UTF-8編碼的常量字符串長(zhǎng)度為9;
  • 73——隨后1個(gè)字節(jié)表示
    73 -> (asc 碼)115-> 字母 s ? ? ? 74
    ->(asc 碼)116-> 字母 t ? ? ???61 ->?(asc 碼)97-> 字母 a ? ? ?? 74?->?(asc 碼)116-> 字母t ? ????69 ->?(asc 碼)105-> 字母 i ? ? ? ? ? ???63 ->?(asc 碼)99-> 字母 c ? ??? 56?->?(asc 碼)86-> 字母 v ? ? ???61 ->?(asc 碼)97-> 字母 ?a ? ? ?? 72?->?(asc 碼)114-> 字母 r ? ? ? ====>字符串staticVar? ?

第七個(gè)常量池 :01 00 01 49

  • 01——tag值為1,類型為CONSTANT_Utf8_info
  • 00 01——這個(gè)UTF-8編碼的常量字符串長(zhǎng)度為1;
  • 49——隨后1個(gè)字節(jié)表示 ? ? ??49-> (asc 碼)73-> 字母 I

第八個(gè)常量池 :01 00 0D 43 6F 6E 73 74 61 6E 74 56 61 6C 75 65

  • 01——tag值為1,類型為CONSTANT_Utf8_info
  • 00 0D——這個(gè)UTF-8編碼的常量字符串長(zhǎng)度為13;
  • 43?6F 6E 73 74 61 6E 74 56 61 6C 75 65 表示instanceMethod

第九個(gè)常量池 :03 00 00 00 00

  • 03——tag值為3,類型為CONSTANT_Integer_info
  • 00 00 00 00—— 說(shuō)明存在int 常量 而且初始化 int 值 0;

第十個(gè)常量池 :01 00 0B 69 6E 73 74 61 6E 63 65 56 61 72

  • 01——tag值為1,類型為CONSTANT_Utf8_info
  • 00 0B——這個(gè)UTF-8編碼的常量字符串長(zhǎng)度為11;
  • 69 6E 73 74 61 6E 63 65 56 61 72 表示instanceVar

第十一個(gè)常量池 :01 00 06 3C 69 6E 69 74 3E

  • 01——tag值為1,類型為CONSTANT_Utf8_info
  • 00 0B——這個(gè)UTF-8編碼的常量字符串長(zhǎng)度為11;
  • 3C 69 6E 69 74 3E?表示<init>

第十二常量池 :01 00 03 28 29 58

  • 01——tag值為1,類型為CONSTANT_Utf8_info
  • 00 03——這個(gè)UTF-8編碼的常量字符串長(zhǎng)度為3;
  • 28 29 56 ?表示()x

第十三常量池 :01 00 04 43 6F 64 65

  • 01——tag值為1,類型為CONSTANT_Utf8_info
  • 00 04——這個(gè)UTF-8編碼的常量字符串長(zhǎng)度為4;
  • 43 6F 64 65 表示Code

第十四常量池 :01 00 0F 4C 69 6E 65 4E 75 6D 62 65 72 54 61 62 6C 65?

  • 01——tag值為1,類型為CONSTANT_Utf8_info
  • 00 0F——這個(gè)UTF-8編碼的常量字符串長(zhǎng)度為15;
  • 4C 69 6E 65 4E 75 6D 62 65 72 54 61 62 6C 65表示LineNumber Table

第十五常量池 :09 00 0E 69 6E 73 74 61 6E 63 65 4D 65 74 68 6F 64

  • 01——tag值為1,類型為CONSTANT_Utf8_info
  • 00 0E——這個(gè)UTF-8編碼的常量字符串長(zhǎng)度為14;
  • 69 6E 73 74 61 6E 63 65 4D 65 74 68 6F 64 表示instanceMethod

第十六常量池 :01 00 04 28 49 29 49


  • 01——tag值為1,類型為CONSTANT_Utf8_info
  • 00 04——這個(gè)UTF-8編碼的常量字符串長(zhǎng)度為4;
  • 28 49 29 49—表示;(I)I

第十七常量池 :01 00 0A 53 6F 75 72 63 65 46 69 6C 65

  • 01——tag值為1,類型為CONSTANT_Utf8_info
  • 00 0A——這個(gè)UTF-8編碼的常量字符串長(zhǎng)度為11;
  • 53 6F 75 72 63 65 46 69 6C 65?表示sourceFile

第十八常量池 :01 00 0E 54 65 73 74 43 6C 61 73 73 2E 6A 61 76 61?

  • 01——tag值為1,類型為CONSTANT_Utf8_info
  • 00 0E——這個(gè)UTF-8編碼的常量字符串長(zhǎng)度為14;
  • 54 65 73 74 43 6C 61 73 73 2E 6A 61 76 61?表示TestClass/java

第十九常量池 :09 00 03 00 14

第二十常量池 :09 00 03 00 14

第二十一常量池 :01 00 20 ......


  • 01——tag值為1,類型為CONSTANT_Utf8_info
  • 00 20——這個(gè)UTF-8編碼的常量字符串長(zhǎng)度32; ???上圖字符串表示:com/ejushang/TestClass/TestClass ? 記錄testclass

第二十二常量池 :01 00 10 ......


  • 01——tag值為1,類型為CONSTANT_Utf8_info
  • 00 10——這個(gè)UTF-8編碼的常量字符串長(zhǎng)度16; ? ? ? ? ?上圖字符串表示:java/lang/object/ ? 記錄java中根類 object

第二十三常量池 :01 00 1C ......


  • 01——tag值為1,類型為CONSTANT_Utf8_info
  • 00 1C——這個(gè)UTF-8編碼的常量字符串長(zhǎng)度28; ? 上圖字符串表示:com/ejushang/TestClass/Super ?記錄父類

  接下來(lái)又可以通過(guò)同樣的方法來(lái)找到常量池中的所有常量。不過(guò)JDK提供了一個(gè)方便的工具可以讓我們查看常量池中所包含的常量。通過(guò)javap -verbose TestClass 即可得到所有常量池中的常量,截圖如下:

  

  從上圖我們可以清楚的看到,TestClass中常量池有24個(gè)常量,不要忘記了第0個(gè)常量,因?yàn)榈?個(gè)常量被用來(lái)表示 Class中的數(shù)據(jù)項(xiàng)不引用任何常量池中的常量。從上面的分析中我們得知TestClass的第一個(gè)常量表示方法,其中class_index指向的第四 個(gè)常量為java/lang/Object,name_and_type_index指向的第19個(gè)常量值為:()V,從這里可 以看出第一個(gè)表示方法的常量表示的是java編譯器生成的實(shí)例構(gòu)造器方法。通過(guò)同樣的方法可以分析常量池的其它常量。

OK,分析完常量池,我們接下來(lái)再分 析下access_flags。

  5)u2 access_flags 表示類或者接口方面的訪問(wèn)信息,比如Class表示的是類還是接口,是否為public,static,final等。具體訪問(wèn)標(biāo)示的含義之前已經(jīng)說(shuō)過(guò) 了,下面我們就來(lái)看看TestClass的訪問(wèn)標(biāo)示。Class的訪問(wèn)標(biāo)示是從0000010dh-0000010e,期值為0×0021,根據(jù)前面說(shuō)的 各種訪問(wèn)標(biāo)示的標(biāo)志位,我們可以知道:0×0021=0×0001|0×0020 也即ACC_PUBLIC 和 ACC_SUPER為真,其中ACC_PUBLIC大家好理解,ACC_SUPER是jdk1.2之后編譯的類都會(huì)帶有的標(biāo)志。

訪問(wèn)標(biāo)志: ??00 21(如果你比較熟悉,你寫(xiě)的類是public而且都有object父類,直接定位到字節(jié)碼稍后面的部分上這兩個(gè)字節(jié))該類的訪問(wèn)標(biāo)志為:0x0021 = 0x0020 | 0x0001 = ACC_SUPER | ACC_PUBLIC


  6)u2 this_class 表示類的索引值,用來(lái)表示類的全限定名稱,類的索引值如下圖所示:

  

  從上圖可以清楚到看到,類索引值為0×0003,對(duì)應(yīng)常量池的第三個(gè)常量,通過(guò)javap的結(jié)果,我們知道第三個(gè)常量為 CONSTANT_Class_info類型的常量,通過(guò)它可以知道類的全限定名稱為:com/ejushang/TestClass /TestClass

  7)u2 super_class 表示當(dāng)前類的父類的索引值,索引值所指向的常量池中類型為CONSTANT_Class_info的常量,父類的索引值如下圖所示,其值為0×0004, 查看常量池的第四個(gè)常量,可知TestClass的父類的全限定名稱為:java/lang/Object

  

  8)interfaces_count和 interfaces[interfaces_count]表示接口數(shù)量以及具體的每一個(gè)接口,TestClass的接口數(shù)量以及接口如下圖所示,其中 0×0001表示接口數(shù)量為1,而0×0005表示接口在常量池的索引值,找到常量池的第五個(gè)常量,其類型為CONSTANT_Class_info,其 值為:com/ejushang/TestClass/Super

  

  • 類索引:引用于確定這個(gè)類的全限定名;
  • 父類索引:引用于確定這個(gè)類的父類的全限定名(因?yàn)镴ava語(yǔ)言不支持多繼承,所有的類都繼承于java.lang.Object,除了java.lang.Object類,所有類的父索引都不為0);
  • 接口索引集:接口索引的格式一般格式是:interfaces_count ( u2 ) + interfaces ( u2 ) * n;( n – interfaces_count ),這里interfaces_count表示當(dāng)前類繼承了多少接口,是接口計(jì)數(shù)器,后邊每一個(gè)u2類型的正數(shù)就是每一個(gè)接口的接口索引;
? ? 00 01 ?00 05 表示一個(gè)接口,接口字符索引是 00 05 =?5

  9)fields_count 和 field_info, fields_count表示類中field_info表的數(shù)量,而field_info表示類的實(shí)例變量和類變量,這里需要注意的是 field_info不包含從父類繼承過(guò)來(lái)的字段,field_info的結(jié)構(gòu)如下圖所示:

  

  其中access_flags表示字段的訪問(wèn)標(biāo)示,比如public,private,protected,static,final等,access_flags的取值如下圖所示:

  

  其中name_index 和 descriptor_index都是常量池的索引值,分別表示字段的名稱和字段的描述符,字段的名稱容易理解,但是字段的描述符如何理解呢?其實(shí)在JVM 規(guī)范中,對(duì)于字段的描述符規(guī)定如下圖所示:

  

  其中大家需要關(guān)注一下上圖最后一行,它表示的是對(duì)一維數(shù)組的描述符,對(duì)于String[][]的描述符將是[[ Ljava/lang/String,而對(duì)于int[][]的描述符為[[I。接下來(lái)的attributes_count以及 attribute_info分別表示屬性表的數(shù)量以及屬性表。下面我們還是以上面的TestClass為例,來(lái)看看TestClass的字段表吧。

  首先我們來(lái)看一下字段的數(shù)量,TestClass的字段的數(shù)量如下圖所示:

  

  從上圖中可以看出TestClass有兩個(gè)字段,查看TestClass的源代碼可知,確實(shí)也只有兩個(gè)字段,接下來(lái)我們看看第一個(gè)字段,我們知道第一個(gè)字段應(yīng)該為private int staticVar,它在Class文件中的二進(jìn)制表示如下圖所示:

  

? ? 注意:每一個(gè)屬性是8個(gè)字節(jié)表示,但是如果是常量屬性,那么另加8個(gè)字節(jié)表示ConstantValue,下面緊接著介紹

  其中0x001A表示訪問(wèn)標(biāo)示,通過(guò)查看access_flags表可知,其為ACC_PRIVATE,ACC_STATIC,ACC_FINAL,接下 來(lái)0×0006和0×0007分別表示常量池中第6和第7個(gè)常量,通過(guò)查看常量池可知,其值分別為:staticVar和I,其中staticVar為字 段名稱,而I為字段的描述符,通過(guò)上面對(duì)描述符的解釋,I所描述的是int類型的變量,接下來(lái)0×0001表示staticVar這個(gè)字段表中的屬性表的 數(shù)量,從上圖可以staticVar字段對(duì)應(yīng)的屬性表有1個(gè),0×0008表示常量池中的第8個(gè)常量,查看常量池可以得知此屬性為 ConstantValue屬性,而ConstantValue屬性的格式如下圖所示:

  

  其中attribute_name_index表述屬性名的常量池索引,本例中為ConstantValue,而ConstantValue的 attribute_length固定長(zhǎng)度為2,而constantValue_index表示常量池中的引用,本例中,其中為0×0009,查看第9個(gè) 常量可以知道,它表示一個(gè)類型為CONSTANT_Integer_info的常量,其值為0。

  上面說(shuō)完了private static final int staticVar=0,下面我們接著說(shuō)一下TestClass的private int instanceVar=0,在本例中對(duì)instanceVar的二進(jìn)制表示如下圖所示:

  

  其中0×0002表示訪問(wèn)標(biāo)示為ACC_PRIVATE,0x000A表示字段的名稱,它指向常量池中的第10個(gè)常量,查看常量池可以知道字段名稱為 instanceVar,而0×0007表示字段的描述符,它指向常量池中的第7個(gè)常量,查看常量池可以知道第7個(gè)常量為I,表示類型為 instanceVar的類型為I,最后0×0000表示屬性表的數(shù)量為0.

  10)methods_count 和 method_info ,其中methods_count表示方法的數(shù)量,而method_info表示的方法表,其中方法表的結(jié)構(gòu)如下圖所示:

  

 從上圖可以看出method_info和field_info的結(jié)構(gòu)是很類似的,方法表的access_flag的所有標(biāo)志位以及取值如下圖所示:

  

  其中name_index和descriptor_index表示的是方法的名稱和描述符,他們分別是指向常量池的索引。這里需要結(jié)解釋一下方法的描述 符,方法的描述符的結(jié)構(gòu)為:(參數(shù)列表)返回值,比如public int instanceMethod(int param)的描述符為:(I)I,表示帶有一個(gè)int類型參數(shù)且返回值也為int類型的方法,接下來(lái)就是屬性數(shù)量以及屬性表了,方法表和字段表雖然都有 屬性數(shù)量和屬性表,但是他們里面所包含的屬性是不同。接下來(lái)我們就以TestClass來(lái)看一下方法表的二進(jìn)制表示。首先來(lái)看一下方法表數(shù)量,截圖如下:

  

  從上圖可以看出方法表的數(shù)量為0×0002表示有兩個(gè)方法,接下來(lái)我們來(lái)分析第一個(gè)方法,我們首先來(lái)看一下TestClass的第一個(gè)方法的access_flag,name_index,descriptor_index,截圖如下:

  

  從上圖可以知道access_flags為0×0001,從上面對(duì)access_flags標(biāo)志位的描述,可知方法的access_flags的取值為 ACC_PUBLIC,name_index為0x000B,查看常量池中的第11個(gè)常量,知道方法的名稱為,0x000C表示 descriptor_index表示常量池中的第12常量,其值為()V,表示方法沒(méi)有參數(shù)和返回值,其實(shí)這是編譯器自動(dòng)生成 的實(shí)例構(gòu)造器方法。接下來(lái)的0×0001表示方法的方法表有1個(gè)屬性,屬性截圖如下:

  

  從上圖可以看出0x000D對(duì)應(yīng)的常量池中的常量為Code,表示的方法的Code屬性,所以到這里大家應(yīng)該明白方法的那些代碼是存儲(chǔ)在Class文件方法表中的屬性表中的Code屬性中。接下來(lái)我們?cè)诜治鲆幌翪ode屬性,Code屬性的結(jié)構(gòu)如下圖所示:

  

  其中attribute_name_index指向常量池中值為Code的常量,attribute_length的長(zhǎng)度表示Code屬性表的長(zhǎng)度(這里 需要注意的時(shí)候長(zhǎng)度不包括attribute_name_index和attribute_length的6個(gè)字節(jié)的長(zhǎng)度)。

  max_stack表示最大棧深度,虛擬機(jī)在運(yùn)行時(shí)根據(jù)這個(gè)值來(lái)分配棧幀中操作數(shù)的深度,而max_locals代表了局部變量表的存儲(chǔ)空間。

  max_locals的單位為slot,slot是虛擬機(jī)為局部變量分配內(nèi)存的最小單元,在運(yùn)行時(shí),對(duì)于不超過(guò)32位類型的數(shù)據(jù)類型,比如 byte,char,int等占用1個(gè)slot,而double和Long這種64位的數(shù)據(jù)類型則需要分配2個(gè)slot,另外max_locals的值并 不是所有局部變量所需要的內(nèi)存數(shù)量之和,因?yàn)閟lot是可以重用的,當(dāng)局部變量超過(guò)了它的作用域以后,局部變量所占用的slot就會(huì)被重用。

  code_length代表了字節(jié)碼指令的數(shù)量,而code表示的時(shí)候字節(jié)碼指令,從上圖可以知道code的類型為u1,一個(gè)u1類型的取值為0×00-0xFF,對(duì)應(yīng)的十進(jìn)制為0-255,目前虛擬機(jī)規(guī)范已經(jīng)定義了200多條指令。

  exception_table_length以及exception_table分別代表方法對(duì)應(yīng)的異常信息。

  attributes_count和attribute_info分別表示了Code屬性中的屬性數(shù)量和屬性表,從這里可以看出Class的文件結(jié)構(gòu)中,屬性表是很靈活的,它可以存在于Class文件,方法表,字段表以及Code屬性中。

  接下來(lái)我們繼續(xù)以上面的例子來(lái)分析一下,從上面init方法的Code屬性的截圖中可以看出,屬性表的長(zhǎng)度為 0×00000026,max_stack的 值為0×0002,max_locals的取值為0×0001,code_length的長(zhǎng)度為0x0000000A,那么00000149h- 00000152h為字節(jié)碼,接下來(lái)exception_table_length的長(zhǎng)度為0×0000,而attribute_count的值為 0×0001,00000157h-00000158h的值為0x000E,它表示常量池中屬性的名稱,查看常量池得知第14個(gè)常量的值為 LineNumberTable,LineNumberTable用于描述java源代碼的行號(hào)和字節(jié)碼行號(hào)的對(duì)應(yīng)關(guān)系,它不是運(yùn)行時(shí)必需的屬性,如果通 過(guò)-g:none的編譯器參數(shù)來(lái)取消生成這項(xiàng)信息的話,最大的影響就是異常發(fā)生的時(shí)候,堆棧中不能顯示出出錯(cuò)的行號(hào),調(diào)試的時(shí)候也不能按照源代碼來(lái)設(shè)置斷 點(diǎn),接下來(lái)我們?cè)倏匆幌翷ineNumberTable的結(jié)構(gòu)如下圖所示:

  

  其中attribute_name_index上面已經(jīng)提到過(guò),表示常量池的索引,attribute_length表示屬性長(zhǎng)度,而 start_pc和 line_number分表表示字節(jié)碼的行號(hào)和源代碼的行號(hào)。本例中LineNumberTable屬性的字節(jié)流如下圖所示:

  

  上面分析完了TestClass的第一個(gè)方法,通過(guò)同樣的方式我們可以分析出TestClass的第二個(gè)方法,截圖如下:

  

  其中access_flags為0×0001,name_index為0x000F,descriptor_index為0×0010,通過(guò)查看常量池可 以知道此方法為public int instanceMethod(int param)方法。通過(guò)和上面類似的方法我們可以知道instanceMethod的Code屬性為下圖所示:

  

  最后我們來(lái)分析一下,Class文件的屬性,從00000191h-00000199h為Class文件中的屬性表,其中0×0011表示屬性的名稱,查看常量池可以知道屬性名稱為SourceFile,我們?cè)賮?lái)看看SourceFile的結(jié)構(gòu)如下圖所示:

  

  其中attribute_length為屬性的長(zhǎng)度,sourcefile_index指向常量池中值為源代碼文件名稱的常量,在本例中SourceFile屬性截圖如下:

  

  其中attribute_length為0×00000002表示長(zhǎng)度為2個(gè)字節(jié),而soucefile_index的值為0×0012,查看常量池的第18個(gè)常量可以知道源代碼文件的名稱為T(mén)estClass.java

?


總結(jié)

以上是生活随笔為你收集整理的实例解析Java class文件格式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

成人av免费看 | 啪啪小视频网站 | 五月天综合色激情 | 欧美一二三区在线观看 | 色网站在线免费观看 | 久草免费资源 | 99热国产精品 | 中文字幕视频观看 | 日日干 天天干 | 成年人免费看av | 成人在线观看资源 | 91九色porn在线资源 | 国产免费a | 中文字幕av免费观看 | 国语久久 | 午夜精品福利一区二区三区蜜桃 | www.狠狠色 | 国产日韩中文字幕 | 日日干日日操 | 久久性生活片 | 手机av看片| 一区二区三区在线免费观看 | 精品999在线观看 | 国产自偷自拍 | 国产亚洲精品成人av久久ww | 五月婷婷视频 | 国产精品久久久久久久久久久久午夜 | 91免费网站在线观看 | 四虎永久国产精品 | 国产精品久久影院 | 黄色免费网站 | 中文有码在线 | 成人毛片在线视频 | 亚洲专区视频在线观看 | 精产嫩模国品一二三区 | 亚洲精品乱码久久久久v最新版 | 国产综合福利在线 | 激情五月婷婷综合 | 成人免费一级片 | 亚洲日本成人网 | 日韩免费视频 | 在线观看91视频 | 亚洲日本成人网 | 在线亚洲观看 | 日本激情视频中文字幕 | 国产精品久久久久久一二三四五 | 国精产品满18岁在线 | 日韩精品一区二区免费视频 | h视频日本 | 成人亚洲网 | 久草在线免费新视频 | 激情综合网色播五月 | 国产精品九九视频 | 亚洲资源在线网 | 久久超碰网 | 在线观看视频你懂 | 亚洲国产欧洲综合997久久, | 亚洲精品免费在线 | 欧美精品一区二区免费 | 中文字幕在线观看免费高清完整版 | 综合天堂av久久久久久久 | 免费福利视频网 | 91精品视频免费 | 精品国内自产拍在线观看视频 | 一区二区在线电影 | 中文字幕丝袜一区二区 | 99视频在线免费 | 在线观看成人一级片 | 国产精品一区二区久久久久 | 天天激情天天干 | 亚洲区另类春色综合小说 | 久久久天堂 | wwwwww黄 | 亚洲最大av在线播放 | 日韩久久午夜一级啪啪 | 欧美日韩在线观看一区二区三区 | 免费av福利| 久久精品视频免费播放 | av超碰免费在线 | 日韩一二三区不卡 | 免费在线观看亚洲视频 | 在线播放国产精品 | 日本久久成人 | 久久天天躁狠狠躁亚洲综合公司 | 99久久99| 国产一区播放 | 天堂av网在线 | 免费电影一区二区三区 | 亚洲涩涩网 | 成人精品电影 | 狠狠综合久久 | 国产在线观看xxx | 国产高清在线免费视频 | 中文字幕在线不卡国产视频 | 久久久久久久久免费视频 | 国产精品国产三级国产aⅴ无密码 | 黄色一级免费 | 视频在线在亚洲 | 深爱激情五月综合 | 黄色小网站在线 | 97自拍超碰| 五月天婷婷狠狠 | 久久久久成人精品亚洲国产 | 日本三级大片 | 一区电影 | 国产高清成人 | 国产电影一区二区三区四区 | 国产字幕av| 欧美在线1区 | 亚洲在线色 | 国产高清 不卡 | 超碰成人网 | 97在线免费 | 亚洲精品99| 97精品视频在线 | 亚洲女人av | 国内精品久久久久久中文字幕 | 久久精品日韩 | 日本一区二区三区免费看 | 尤物一区二区三区 | 久久在线看 | 日本性生活免费看 | 亚洲日韩中文字幕在线播放 | 7777精品伊人久久久大香线蕉 | 91成品视频 | 亚洲视频www| 毛片.com | a√天堂中文在线 | 国产成人久久精品一区二区三区 | av理论电影 | 一区二区三区在线看 | 91中文字幕网 | 亚洲国产精品一区二区久久hs | 伊甸园av在线 | 五月开心综合 | 成人app在线播放 | 麻豆视频国产在线观看 | 国产美女网| 成人午夜剧场在线观看 | www.色就是色 | 四虎免费在线观看视频 | 99热这里只有精品在线观看 | 最近中文字幕免费观看 | 国产成人久久精品77777综合 | 日本在线观看一区二区三区 | 日韩av网站在线播放 | 中文字幕区 | 欧美网站黄色 | 911av视频 | 国产日韩欧美在线一区 | 黄色一级免费网站 | 综合久久久 | 91久久电影| 日韩欧美一区二区三区视频 | 国产精品免费一区二区三区在线观看 | 91黄色在线看 | 精品国精品自拍自在线 | 亚洲欧洲中文日韩久久av乱码 | 国产免费不卡 | 久久亚洲综合国产精品99麻豆的功能介绍 | 午夜 免费| 97成人在线观看 | 欧美精品黑人性xxxx | 91片网| 91九色国产蝌蚪 | h网站免费在线观看 | 中日韩免费视频 | 爱情影院aqdy鲁丝片二区 | 亚洲自拍av在线 | 狠狠躁日日躁 | 一区三区在线欧 | 亚洲高清av在线 | 一区二区三区在线观看中文字幕 | 亚洲不卡在线 | 一区二区三区在线不卡 | 在线精品视频免费播放 | 天天骚夜夜操 | 黄色性av| 日韩精品一区二区三区水蜜桃 | 亚洲精品一区二区三区在线观看 | 亚洲视频一级 | 久久久黄色av | 欧美日韩久久不卡 | 中文永久免费观看 | 欧美激情视频一二三区 | 三级视频国产 | 免费福利在线观看 | 国产精品第三页 | 中文字幕免费观看全部电影 | 91自拍视频在线观看 | 色www.| 久久视频免费观看 | 国产精品免费在线视频 | 四川妇女搡bbbb搡bbbb搡 | 91麻豆精品国产91久久久久 | 国产高清视频在线 | 日韩二区在线播放 | 超碰在线9 | 日韩欧美一区二区三区在线 | 91chinese在线 | 91久久精 | 精品国产亚洲一区二区麻豆 | av成人免费在线看 | 亚洲欧美999| 天天摸天天操天天爽 | 美国三级黄色大片 | 香蕉视频日本 | 天堂视频中文在线 | 亚洲欧美怡红院 | 深爱激情五月网 | 精品视频区 | 在线亚洲成人 | av中文电影 | 蜜臀aⅴ国产精品久久久国产 | 欧美日韩性 | av免费网站观看 | 黄色成人在线 | 91精品视屏 | 天天色天天草天天射 | 久久综合九色99 | 国产精品久久在线观看 | 久久99精品久久久久久清纯直播 | 亚洲精品小视频 | www成人av| 亚洲资源在线 | 婷婷六月天综合 | 国产a级免费 | 三级av在线 | 黄色片毛片 | 成人黄色资源 | 欧美成人一二区 | 在线免费国产视频 | 黄a在线观看 | 久久久久免费精品国产 | 日韩欧美高清一区二区 | 国产精品自产拍在线观看网站 | 国产一级二级在线观看 | 黄色小说网站在线 | 亚洲人成人99网站 | 狠狠操狠狠操 | 成人在线你懂得 | 中文字幕免费观看视频 | 国内精品久久久久久久久久久 | 亚洲精品国偷拍自产在线观看蜜桃 | .精品久久久麻豆国产精品 亚洲va欧美 | 精品视频99 | 久久99久久99 | 日韩欧美国产免费播放 | 日韩欧美视频在线播放 | 国产精品久久久久久吹潮天美传媒 | 狠色狠色综合久久 | 精品久久久久久一区二区里番 | 69av免费视频 | 中文字幕日韩一区二区三区不卡 | 二区三区在线观看 | 激情五月婷婷综合网 | 欧美午夜寂寞影院 | 精品在线观看视频 | 黄网站www| 99视频国产精品免费观看 | 激情欧美xxxx | 一级一片免费视频 | 国产精品美女视频 | 成人av手机在线 | 日韩精品久久久久久中文字幕8 | 免费网站在线观看人 | 首页中文字幕 | 最近中文字幕在线中文高清版 | 香蕉久久久久久久 | 99视频在线免费观看 | 亚洲国产人午在线一二区 | 涩涩网站免费 | 久久激情综合 | 国产成人av网址 | 日韩丝袜在线观看 | 日韩午夜av电影 | 69久久久久久久 | 中文字幕人成乱码在线观看 | 天天拍天天爽 | 欧美一级在线观看视频 | 久久精品成人欧美大片古装 | 午夜视频99 | 五月天婷婷视频 | 国产福利精品视频 | 久久久精品一区二区 | 日韩av在线免费播放 | 伊人官网| 欧美午夜性生活 | 中文在线免费看视频 | 日韩特黄一级欧美毛片特黄 | 亚洲综合国产精品 | 一区二区三区高清在线 | 色偷偷网站视频 | 综合久久精品 | 日韩精品五月天 | 日韩中文字幕免费视频 | 欧美激精品 | 婷婷丁香花| 四虎国产精品免费 | 伊人国产视频 | 国产精品精品久久久久久 | 91成人精品一区在线播放 | 国产成人一二三 | 国产一二三精品 | 久久久久欠精品国产毛片国产毛生 | 日韩色爱 | 亚洲桃花综合 | 国产高清视频在线 | 综合久久久久久久久 | 中文字幕在线国产 | 国产69精品久久久久久 | 91人人澡人人爽人人精品 | 国产在线黄色 | 久久免费视频这里只有精品 | 日韩免费福利 | 最近中文字幕免费视频 | 国产激情小视频在线观看 | 中文在线免费看视频 | 国产成人精品av在线观 | www国产精品com | 九九视频免费观看视频精品 | 久免费| 香蕉视频国产在线 | 黄色小视频在线观看免费 | 天天插日日操 | 九色porny真实丨国产18 | 国产在线精 | 韩日精品在线观看 | 国产精品一码二码三码在线 | 国内精品久久天天躁人人爽 | 2019中文字幕网站 | 国产成人精品一区在线 | 色婷婷99| 日韩丝袜在线观看 | 免费黄色小网站 | 国产婷婷| 美女网站在线观看 | 日韩一区二区三区在线看 | 久久精彩免费视频 | 欧美坐爱视频 | 可以免费观看的av片 | 96精品视频| 国产一级片久久 | 国产精品久久久久久久免费大片 | 黄色成人在线网站 | av综合站 | 色狠狠一区二区 | 亚洲欧美视频在线 | 精品国产一区二区三区免费 | 国产精品久久久久国产精品日日 | 在线视频 一区二区 | 精品久久久久久久久久久久久久久久 | 精品亚洲男同gayvideo网站 | 国产明星视频三级a三级点| 在线观看av中文字幕 | 一区二区视频免费在线观看 | 免费看精品久久片 | 国产区av在线 | 日韩成人高清在线 | 成人a级大片 | 日女人电影| 国产精品久久久久久久久蜜臀 | 一区二区不卡在线观看 | 在线视频精品播放 | 伊人丁香| 亚洲精品男人天堂 | 91久久偷偷做嫩草影院 | av片子在线观看 | 久久草视频 | 中文字幕高清免费日韩视频在线 | 97电影院在线观看 | 国产高清99| 99视频在线免费播放 | 日韩一区二区免费视频 | 亚洲aⅴ乱码精品成人区 | 99色视频在线| 欧洲精品一区二区 | 久久久久久久影视 | 欧美成人一区二区 | 久久中文精品视频 | 91激情视频在线播放 | 免费观看www小视频的软件 | 超碰精品在线 | 日韩亚洲欧美中文字幕 | 99精品亚洲 | 亚洲国产成人精品在线观看 | 在线免费观看成人 | 欧洲精品一区二区 | 日韩精品在线视频免费观看 | 五月婷婷中文字幕 | 国产69精品久久久久久久久久 | 日本精品二区 | 国产99久久久国产精品成人免费 | 91精品国产欧美一区二区成人 | 人人干在线 | 欧美成人精品三级在线观看播放 | 玖草在线观看 | 成年人电影免费在线观看 | 精品视频免费看 | 中文字幕视频免费观看 | 深爱激情久久 | av电影不卡在线 | 亚洲成a人片77777kkkk1在线观看 | 99视频国产在线 | 国产第一福利 | 激情文学综合丁香 | 久久免费视频在线 | 日韩簧片在线观看 | 久久人人97超碰精品888 | 久国产在线播放 | www.xxx.性狂虐 | 国产精品免费视频久久久 | 不卡视频在线 | 中文乱码视频在线观看 | 午夜av在线| 日韩乱码在线 | 国产一级h | 久久久久久蜜av免费网站 | 日韩欧三级 | 国产成人综合精品 | 91热| 国产99久久| 国产精品欧美久久久久三级 | 中文字幕精品视频 | 999成人免费视频 | 亚洲人成网站精品片在线观看 | 久久小视频 | 中文字幕免费高清 | 国产亚洲精品久久久久秋 | 国产欧美日韩精品一区二区免费 | 久久99国产精品视频 | 色婷婷狠狠 | 久久久精品国产免费观看一区二区 | 91完整视频| 九九av| 日韩在线视频观看 | 国产网站av | 国产最新91| www日韩| 国产一区精品在线观看 | 久久精品这里都是精品 | 激情电影影院 | 激情婷婷综合网 | 女人18毛片a级毛片一区二区 | 天天射天天舔天天干 | 国产精品美女在线观看 | 深夜国产福利 | 久久精品国产精品亚洲 | 国产特级毛片aaaaaa毛片 | 欧美性受极品xxxx喷水 | 看污网站 | 亚洲在线观看av | 久久一区二区三区国产精品 | 久久夜视频 | 亚洲国产精品一区二区久久,亚洲午夜 | 日韩av电影国产 | 成人av在线资源 | 在线观看视频一区二区三区 | av久久在线| 国产美女在线观看 | 美女黄濒| 欧美人zozo | 国产成人黄色在线 | 91av中文| 国产精品丝袜久久久久久久不卡 | 日本中文乱码卡一卡二新区 | 久久国产一区二区三区 | 99免费观看视频 | 丁香激情视频 | 国产高清久久久 | 亚洲年轻女教师毛茸茸 | 国产高清久久久久 | 国产亚洲在 | 国产色综合 | 91久久精品一区二区二区 | 不卡av电影在线观看 | 青青河边草免费直播 | av不卡免费在线观看 | www黄色av| 国产精品久久久久9999吃药 | 欧美一区二区三区在线视频观看 | 成人午夜精品福利免费 | 在线免费观看视频 | 日韩精品一区二区三区高清免费 | 国产亚洲片 | 国产一区二区网址 | 中文字幕 91 | 免费福利视频网 | 最新av免费在线观看 | 亚洲精品国偷自产在线99热 | 色五丁香| av成人免费在线观看 | av在线免费观看网站 | 欧美日韩精品区 | 国产精品亚洲人在线观看 | 亚洲最新av在线 | 天天舔天天搞 | 操操操日日 | 国产精品成人免费精品自在线观看 | 久久在线| 欧美高清成人 | 亚洲精区二区三区四区麻豆 | 欧美激情精品久久 | 久久r精品 | 五月天亚洲综合 | 国产日韩精品一区二区 | 日本黄色免费大片 | 色视频网站免费观看 | 午夜精品一区二区三区四区 | 国产精品a久久 | 欧美日在线 | 五月综合激情婷婷 | 天天舔天天射天天操 | 免费情缘 | 在线一区观看 | 青春草视频在线播放 | 国产精品永久在线 | 免费在线一区二区 | 西西www444| 午夜久久久精品 | 国产精品资源网 | 久久久久久99精品 | 91精品中文字幕 | 97成人精品视频在线观看 | 女人18毛片a级毛片一区二区 | 久热电影| 日韩免费一级电影 | 国产中文字幕久久 | 亚洲一区 影院 | 成人免费观看大片 | 日韩三级视频在线观看 | 亚洲成人午夜在线 | av在线播放网址 | 亚洲综合丁香 | 国产精品18久久久久久vr | 最新中文字幕在线资源 | 国产视频中文字幕在线观看 | 日韩伦理片hd | 亚洲精品日韩av | 少妇自拍av | 97国产精品久久 | 国产成人精品一区二区三区免费 | 久久曰视频 | 免费的黄色的网站 | 99热最新精品| 欧洲精品久久久久毛片完整版 | 欧美人zozo| 国产精品一区二区三区免费看 | 91天天操 | 国产在线观看污片 | 亚洲欧洲精品视频 | 欧美久草视频 | 日韩精品三区四区 | 成人国产精品入口 | 亚洲国产一二三 | 波多野结衣一区二区三区中文字幕 | 欧美日韩破处 | 午夜影视剧场 | av福利第一导航 | 永久免费看av| 91福利专区 | 国产精品一区二区免费视频 | 人人爽人人片 | 日日干天天爽 | 国产一区二区三精品久久久无广告 | 国产亚洲久一区二区 | 美女网站视频免费都是黄 | 玖玖视频国产 | 国产香蕉视频在线播放 | 国产成人一区二区三区久久精品 | 日日夜夜精品免费 | 99精品视频精品精品视频 | 色视频在线免费观看 | 狠狠的日 | 久久久国产精品成人免费 | 97超碰人人澡人人 | 国产精品久久久久久久久久白浆 | 久久色视频| 亚洲干视频在线观看 | 人人看人人草 | 波多野结衣精品视频 | 中字幕视频在线永久在线观看免费 | 久久久久久久久毛片精品 | 91影视成人 | 日韩精品在线播放 | 国内精品久久久久久久久久清纯 | 天天色天天干天天色 | 又黄又爽又无遮挡的视频 | 在线色亚洲| 91av视频在线观看免费 | 国产精品午夜久久久久久99热 | 国产高清不卡一区二区三区 | 国产婷婷精品av在线 | 免费日韩一级片 | 欧美日韩不卡一区二区三区 | 69视频在线播放 | 深爱激情五月网 | 成人av影视 | 免费av试看 | 国产999精品久久久 免费a网站 | 美女久久久久久久久久 | 国产区精品在线观看 | 国产97视频| 黄色成人av网址 | 日韩国产在线观看 | 日本在线观看中文字幕无线观看 | 欧美乱码精品一区 | 免费看污在线观看 | 亚洲japanese制服美女 | 久久精品福利视频 | 黄色一级大片在线免费看国产一 | 国产视频精选在线 | 国产精品久久二区 | 国产99视频在线观看 | 97精品国自产拍在线观看 | 日韩在线视频一区二区三区 | 久久久久久久久黄色 | 中文字幕精品一区二区精品 | 91桃色视频 | 三级av小说| 国产黄色观看 | 精品国产一区二区三区在线 | 天天操婷婷| 日韩欧美xxx | 国内精品久久久久国产 | www.黄色 | 亚洲日本三级 | av片免费播放 | 视频二区在线视频 | 天天天干 | 久久精品久久久久久久 | 99久久99久久精品免费 | 日韩v在线91成人自拍 | 日韩动漫免费观看高清完整版在线观看 | 91视频在线国产 | 久久久久久国产精品免费 | 一级黄色在线视频 | 国产精品一区二区av日韩在线 | 天天射天天搞 | www.玖玖玖| 精品在线你懂的 | 国产91av视频在线观看 | 99久久久国产精品美女 | 亚洲一区二区三区在线看 | 美女福利视频网 | 国产精品资源在线观看 | 在线观看一区 | 三级a毛片 | 手机av电影在线 | 国产精品乱码久久久久久1区2区 | 综合婷婷丁香 | 日韩中字在线 | 婷婷国产一区二区三区 | 99r精品视频在线观看 | 中文字幕一区在线 | 丁香婷婷射 | 国产精品成人a免费观看 | 91福利免费 | 91免费在线视频 | 日韩中文字幕免费在线播放 | 亚洲精品tv久久久久久久久久 | 国产午夜一级毛片 | 国产视频亚洲精品 | 久久精品电影院 | 欧美一级片在线播放 | 久久香蕉电影网 | 99爱这里只有精品 | 91尤物在线播放 | 午夜色场 | 玖玖玖精品 | 精品久久久亚洲 | 国产系列精品av | 久久综合色影院 | 五月导航 | 久久精品国产一区 | 在线成人高清电影 | 国产香蕉久久精品综合网 | 国产免费视频一区二区裸体 | 国产成人精品综合 | 国产在线小视频 | 日韩中文在线电影 | 夜夜爽天天爽 | 久久免费片 | 国产精品成人国产乱一区 | 最近日本字幕mv免费观看在线 | www.五月天婷婷.com | 亚洲第一区精品 | 国产精品久久久久婷婷二区次 | 欧美激情视频一二区 | 欧美日本不卡高清 | 中文字幕在线观看免费 | 天天操天天射天天操 | www亚洲视频 | 久久欧美视频 | 免费人成在线观看网站 | 正在播放五月婷婷狠狠干 | 4438全国亚洲精品观看视频 | 国产经典三级 | 91久色蝌蚪 | 最近久乱中文字幕 | 精品在线视频观看 | 日本久久久久久 | 人人爽人人澡人人添人人人人 | 国产精品自产拍在线观看 | 色九九在线 | 国产黄色精品视频 | 五月婷婷丁香在线观看 | 手机看片福利 | 亚洲综合婷婷 | 亚洲欧美国产视频 | 91桃色免费观看 | 麻豆av一区二区三区在线观看 | 国产又黄又爽又猛视频日本 | 久久精品一级片 | 99在线精品视频观看 | 欧美孕妇与黑人孕交 | 国产视频精选在线 | 日色在线视频 | 激情影院在线观看 | 亚洲精品国产成人av在线 | 很黄很色很污的网站 | 麻花传媒mv免费观看 | 久久久黄色免费网站 | 婷婷综合五月天 | 亚洲第一香蕉视频 | 精品999在线观看 | 99色精品视频 | 国产一区二区三区午夜 | 久久精品国产久精国产 | 国产在线中文字幕 | 国产乱码精品一区二区三区介绍 | 国产精品中文字幕在线 | 婷婷日日| 成年人毛片在线观看 | 日本99精品 | 91麻豆.com| 国产福利在线免费观看 | 成人在线播放网站 | 国产精成人品免费观看 | 国产精品视频最多的网站 | 久久免费视频6 | 国产一级电影免费观看 | av免费网站 | 综合网色 | 99九九热只有国产精品 | 精品999久久久 | 狠狠色丁香婷婷综合欧美 | 国产在线观看不卡 | 五月香视频在线观看 | 黄色aa久久 | 91桃花视频| 国产一区二区在线免费 | 日韩午夜精品福利 | 国产精品系列在线 | 天天色天天综合网 | 国产精品12 | 亚州精品成人 | 国产香蕉av | 在线a人片免费观看视频 | www五月| 九热在线 | 久久a级片 | 99热高清| 婷婷六月天天 | 伊人狠狠色 | 在线国产91 | 国产中文自拍 | 亚洲另类人人澡 | 久久免费视频国产 | 精品国产一区二区三区蜜臀 | 蜜臀精品久久久久久蜜臀 | 色综合久久久网 | 黄色软件在线看 | 久久草草热国产精品直播 | 国产精品第2页 | 中文字幕一区二区三区乱码在线 | 久久精品国产一区二区电影 | 一本—道久久a久久精品蜜桃 | 美女网站色免费 | 亚洲闷骚少妇在线观看网站 | 精品1区2区3区 | 精品视频中文字幕 | 成年人黄色av| 天天狠狠操 | 首页av在线 | 麻豆精品传媒视频 | 91成人精品国产刺激国语对白 | 国产一区二区在线免费播放 | 国产精品久久久久久久久毛片 | 色婷婷在线播放 | 午夜私人影院 | 97成人在线视频 | 久久综合狠狠综合久久狠狠色综合 | 国产精品久久人 | 深夜国产福利 | 精品久久久久一区二区国产 | 亚洲激情电影在线 | 久久久观看 | 天堂av网址 | 欧美一区二区日韩一区二区 | 国产精品国产三级国产aⅴ入口 | 日韩精品一区二区三区在线视频 | 在线视频 国产 日韩 | 激情婷婷综合网 | 日韩精品视频在线观看网址 | 国产一区欧美在线 | 天堂成人在线 | 久久久激情网 | 亚洲精品国产自产拍在线观看 | 久久国产精品久久国产精品 | 福利片视频区 | 久久精品99视频 | 国产一区二区三区视频在线 | 久久高清国产视频 | 欧洲精品视频一区二区 | 国产精品成人自拍 | 欧美成人性网 | 亚洲精选视频在线 | 视频99爱| 国产精品成人一区二区三区吃奶 | 欧美一级艳片视频免费观看 | 又黄又爽的免费高潮视频 | 精品一区二区免费视频 | 美女一区网站 | 国产一区精品在线 | 亚洲国产天堂av | 伊人久久一区 | 国产精品18久久久久vr手机版特色 | 一级久久精品 | 综合久久影院 | 麻豆国产网站 | 久久久资源网 | 少妇精69xxtheporn | 在线观看免费日韩 | 超碰97人| 自拍超碰在线 | 久久99国产精品免费网站 | 色婷婷激婷婷情综天天 | 99精品视频网 | 国产亚洲欧美在线视频 | 91免费国产在线观看 | 亚洲精品视频久久 | 天天综合网在线 | 久久97超碰 | 天天操天天操天天操天天操天天操 | 91高清免费观看 | 亚洲天天综合 | 久久网站免费 | 国产精品久久久久影院 | 亚洲精品国偷拍自产在线观看 | 欧美精品v国产精品v日韩精品 | 日本中文字幕在线免费观看 | 久草综合在线观看 | 久久在线免费观看 | 2023国产精品自产拍在线观看 | 色中色综合 | 黄色av电影 | 黄色av一级片| www91在线 | 奇米影音四色 | av免费看在线 | 国产97色| 久热超碰 | 精品国产乱码久久久久久1区二区 | 永久av免费在线观看 | 中文字幕视频一区二区 | 91色吧 | av久久久久久 | 在线观看一区二区视频 | 精品国产成人在线 | 久久99精品国产麻豆婷婷 | 贫乳av女优大全 | 精品99久久久久久 | 欧美在线观看禁18 | 色婷婷狠| 亚洲在线精品视频 | 国产一区二区在线免费 | 国产成人一区二区三区电影 | 色婷婷亚洲精品 | 欧美一级大片在线观看 | 女人魂免费观看 | 男女视频国产 | 伊人亚洲综合网 | 久久五月婷婷综合 | 免费观看国产成人 | 日韩免费av在线 | 亚洲 欧美 综合 在线 精品 | 日韩欧美在线第一页 | 欧美激情xxxx | 91精品视频免费看 | 久久国产欧美日韩 | 在线观看av国产 | 久久久综合九色合综国产精品 | 色五月成人 | 插婷婷| 在线观看欧美成人 | 青青草国产精品视频 | 国产精品一区二区av影院萌芽 | 中文字幕资源网 国产 | 午夜久久久久久久久 | 亚洲精品综合在线 | 欧美日韩高清 | 免费91麻豆精品国产自产在线观看 | 伊人视频 | 77国产精品 | 看v片 | 在线观看免费高清视频大全追剧 | 久久国语 | 国产麻豆视频网站 | 日本狠狠干 | 婷婷在线看 | 久久无码精品一区二区三区 | 51精品国自产在线 | 欧美久久久影院 | 在线成人观看 | 日韩免费在线观看视频 | 中文字幕久久精品一区 | 91大神在线观看视频 | 91九色蝌蚪国产 | 亚洲精品视频在线观看网站 | 久久久亚洲国产精品麻豆综合天堂 | 久久永久免费视频 | 日韩电影久久久 | 96看片 | 91精品久久久久久久99蜜桃 | 精品一区二区精品 | 视频一区二区在线 | 亚洲视频六区 | 九九九国产 | 91视频大全 | 国产传媒一区在线 | 九九免费精品视频在线观看 | 亚洲一区网站 | 狠狠色狠狠色综合系列 | 激情图片久久 | 激情视频免费观看 | 顶级bbw搡bbbb搡bbbb | 亚洲精品影视在线观看 | 欧美,日韩| 波多野结衣亚洲一区二区 | 成人a视频片观看免费 | 久久久久精 | 国产精品原创在线 | 激情www| 色综合久久88色综合天天人守婷 | 国产一级高清视频 | 免费高清无人区完整版 | 视频直播国产精品 | av国产在线观看 | 九九一级片 | 又污又黄的网站 | 四虎影视8848aamm | 一区二区三区四区在线 | 国产精品三级视频 | 草久在线观看视频 | 波多野结衣在线视频免费观看 | 91黄在线看 | 九色最新网址 | 久操视频在线 | 91综合久久一区二区 | 久久精品小视频 | 中文字幕免费观看 | 不卡视频在线看 | 亚洲视频axxx| 日韩av一区二区在线播放 | 亚洲成av人片一区二区梦乃 | 久久免费在线观看视频 | 在线观看色视频 | 香蕉视频免费在线播放 | 玖玖国产精品视频 | 97人人超碰在线 | 在线视频一区观看 | 国产免费久久av | 欧美一级片在线 | 四虎成人精品永久免费av | 91大神dom调教在线观看 | 精品v亚洲v欧美v高清v | 91日韩在线视频 | 视频在线观看国产 | 久草网在线观看 | 日韩av有码在线 | 91大神电影| 人人添人人澡 | 狠狠色丁香久久婷婷综合五月 | 成人福利av| 99久久久国产精品免费99 | 欧美另类xxx| 激情中文字幕 | 午夜丰满寂寞少妇精品 | 在线观看的黄色 | 69精品人人人人 | 伊人开心激情 | 视频一区视频二区在线观看 | 成人精品影视 | 国内三级在线 | 最近免费在线观看 | 天堂在线一区 | 91亚洲精品在线观看 |