精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

自己動手實現一個Java Class解析器

開發 后端
最近在寫一個私人項目,名字叫做ClassAnalyzer,ClassAnalyzer的目的是能讓我們對Java Class文件的設計與結構能夠有一個深入的理解。主體框架與基本功能已經完成,還有一些細節功能日后再增加。實際上JDK已經提供了命令行工具javap來反編譯Class文件,但本篇文章將闡明我實現解析器的思路。

最近在寫一個私人項目,名字叫做ClassAnalyzerClassAnalyzer的目的是能讓我們對Java Class文件的設計與結構能夠有一個深入的理解。主體框架與基本功能已經完成,還有一些細節功能日后再增加。實際上JDK已經提供了命令行工具javap來反編譯Class文件,但本篇文章將闡明我實現解析器的思路。

[[183173]]

Class文件

作為類或者接口信息的載體,每個Class文件都完整的定義了一個類。為了使Java程序可以“編寫一次,處處運行”,Java虛擬機規范對Class文件進行了嚴格的規定。構成Class文件的基本數據單位是字節,這些字節之間不存在任何分隔符,這使得整個Class文件中存儲的內容幾乎全部是程序運行的必要數據,單個字節無法表示的數據由多個連續的字節來表示。

根據Java虛擬機規范,Class文件采用一種類似于C語言結構體的偽結構來存儲數據,這種偽結構中只有兩種數據類型:無符號數和表。Java虛擬機規范定義了u1u2u4u8來分別表示1個字節、2個字節、4個字節和8個字節的無符號數,無符號數可以用來描述數字、索引引用、數量值或者是字符串。表是由多個無符號數或者其它表作為數據項構成的符合數據類型,表用于描述有層次關系的符合結構的數據,因此整個Class文件本質上就是一張表。在ClassAnalyzeru1u2u4u8分別對應于byteshortintlongClass文件被描述為如下Java類。

public class ClassFile {

    public U4 magic;                            // magic
    public U2 minorVersion;                     // minor_version
    public U2 majorVersion;                     // major_version
    public U2 constantPoolCount;                // constant_pool_count
    public ConstantPoolInfo[] cpInfo;           // cp_info
    public U2 accessFlags;                      // access_flags
    public U2 thisClass;                        // this_class
    public U2 superClass;                       // super_class
    public U2 interfacesCount;                  // interfaces_count
    public U2[] interfaces;                     // interfaces
    public U2 fieldsCount;                      // fields_count
    public FieldInfo[] fields;                  // fields
    public U2 methodsCount;                     // methods_count
    public MethodInfo[] methods;                // methods
    public U2 attributesCount;                  // attributes_count
    public BasicAttributeInfo[] attributes;     // attributes

}

如何解析

組成Class文件的各個數據項中,例如魔數、Class文件的版本等數據項、訪問標志、類索引、父類索引,它們在每個Class文件中都占用固定數量的字節,在解析時只需要讀取相應數量的字節。除此之外,需要靈活處理的主要包括4部分:常量池、字段表集合、方法表集合和屬性表集合。字段和方法都可以具備自己的屬性,Class本身也有相應的屬性,因此,在解析字段表集合和方法表集合的同時也包含了屬性表的解析。

常量池占據了Class文件很大一部分的數據,用于存儲所有的常量信息,包括數字和字符串常量、類名、接口名、字段名和方法名等。Java虛擬機規范定義了多種常量類型,每一種常量類型都有自己的結構。常量池本身是一個表,在解析時有幾點需要注意。

  • 每個常量類型都通過一個u1類型的tag來標識。
  • 表頭給出的常量池大小(constantPoolCount)比實際大1,例如,如果constantPoolCount等于47,那么常量池中有46項常量。
  • 常量池的索引范圍從1開始,例如,如果constantPoolCount等于47,那么常量池的索引范圍為1~46。設計者將第0項空出來的目的是用于表達“不引用任何一個常量池項目”。
  • CONSTANT_Utf8_info型常量的結構中包含u1類型的tagu2類型的length和由lengthu1類型組成的bytes,這length字節的連續數據是一個使用MUTF-8Modified UTF-8)編碼的字符串。MUTF-8UTF-8并不兼容,主要區別有兩點:一是null字符會被編碼成2字節(0xC00x80);二是補充字符是按照UTF-16拆分為代理對分別編碼的,相關細節可以看這里(變種UTF-8)。

屬性表用于描述某些場景專有的信息,Class文件、字段表和方法表都有相應的屬性表集合。Java虛擬機規范定義了多種屬性,ClassAnalyzer目前實現了對常用屬性的解析。和常量類型的數據項不同,屬性并沒有一個tag來標識屬性的類型,但是每個屬性都包含有一個u2類型的attribute_name_indexattribute_name_index指向常量池中的一個CONSTANT_Utf8_info類型的常量,該常量包含著屬性的名稱。在解析屬性時,ClassAnalyzer正是通過attribute_name_index指向的常量對應的屬性名稱來得知屬性的類型。

字段表用于描述類或者接口中聲明的變量,字段包括類級變量以及實例級變量。字段表的結構包含一個u2類型的access_flags、一個u2類型的name_index、一個u2類型的descriptor_index、一個u2類型的attributes_countattributes_countattribute_info類型的attributes。我們已經介紹了屬性表的解析,attributes的解析方式與屬性表的解析方式一致。

Class的文件方法表采用了和字段表相同的存儲格式,只是access_flags對應的含義有所不同。方法表包含著一個重要的屬性:Code屬性。Code屬性存儲了Java代碼編譯成的字節碼指令,在ClassAnalyzer中,Code對應的Java類如下所示(僅列出了類屬性)。

public class Code extends BasicAttributeInfo {

    private short maxStack;
    private short maxLocals;
    private long codeLength;
    private byte[] code;
    private short exceptionTableLength;
    private ExceptionInfo[] exceptionTable;
    private short attributesCount;
    private BasicAttributeInfo[] attributes;
    ...

    private class ExceptionInfo {
        public short startPc;
        public short endPc;
        public short handlerPc;
        public short catchType;
          ...
    }
}

Code屬性中,codeLengthcode分別用于存儲字節碼長度和字節碼指令,每條指令即一個字節(u1類型)。在虛擬機執行時,通過讀取code中的一個個字節碼,并將字節碼翻譯成相應的指令。另外,雖然codeLength是一個u4類型的值,但是實際上一個方法不允許超過65535條字節碼指令。

代碼實現

ClassAnalyzer的源碼已放在了GitHub上。在ClassAnalyzerREADME中,我以一個類的Class文件為例,對該Class文件的每個字節進行了分析,希望對大家的理解有所幫助。

責任編輯:張燕妮 來源: tinylcy
相關推薦

2023-12-30 13:33:36

Python解析器JSON

2022-10-20 11:00:52

SQL解析器

2024-12-06 09:58:09

2022-06-28 08:17:10

JSON性能反射

2019-07-05 08:39:39

GoSQL解析器

2017-03-02 13:31:02

監控系統

2023-07-25 14:24:33

元素JSX解析器

2014-05-15 09:45:58

Python解析器

2024-03-08 12:45:00

C#Web服務器

2022-01-04 11:08:02

實現Localcache存儲

2011-11-28 15:40:52

wiresharkRDP解析器

2015-02-10 14:32:37

XSS漏洞XSS

2021-12-08 07:31:40

設計Localcache緩存

2015-06-02 09:51:40

iOS網絡請求封裝接口

2015-06-02 10:24:43

iOS網絡請求降低耦合

2023-10-10 13:28:44

Pythonpygame

2020-12-02 10:13:45

JacksonJDK解析器

2020-03-31 20:23:46

C語言TCP服務器

2022-08-29 14:22:03

bpmn.jsVue流程

2021-04-26 07:31:22

SpringMVCweb框架
點贊
收藏

51CTO技術棧公眾號

久久尤物视频| 牛牛视频精品一区二区不卡| 中文字幕一区二区三区在线不卡| 亚洲一区亚洲二区| 日韩精品一区二区不卡| 少妇精品久久久| 欧美日本高清视频在线观看| 日韩黄色短视频| 国产中文字幕在线播放| 国产一区二区在线视频| 97超级碰在线看视频免费在线看| 日韩丰满少妇无码内射| 日韩在线网址| 色噜噜狠狠一区二区三区果冻| 日本三日本三级少妇三级66| 亚洲av片在线观看| 激情欧美一区二区| 欧美中文在线免费| 欧美激情精品久久| 俺要去色综合狠狠| 亚洲精品国产精品乱码不99按摩| 亚洲天堂国产视频| 日本久久免费| 亚洲国产毛片aaaaa无费看 | 少妇一级淫片日本| 国自产拍偷拍福利精品免费一| 国产一区二区三区日韩欧美| 视频免费在线观看| 国产不卡精品| 欧美日韩另类国产亚洲欧美一级| 五十路熟女丰满大屁股| 黄色在线观看网站| 国产欧美一区二区精品婷婷| 国产精品免费一区二区三区在线观看| 亚洲综合一区中| 午夜亚洲性色视频| 欧美激情乱人伦| 国产精品夜夜夜爽阿娇| 加勒比久久综合| 亚洲国产精品热久久| 亚洲av无码久久精品色欲| 国产精品99久久久久久董美香 | www.国产在线播放| 黄色av电影在线播放| 亚洲国产成人一区二区三区| 欧美动漫一区二区| 亚洲三区在线播放| av一区二区三区四区| 国产厕所精品在线观看| 99久久精品国产一区色| 韩国午夜理伦三级不卡影院| 国产精品女主播视频| 性色av一区二区三区四区| 久久天堂成人| 日韩免费观看av| 午夜精品免费观看| 久久国产免费| 日韩av日韩在线观看| 欧美一区二区激情视频| 国产欧美亚洲一区| 国产69久久精品成人| 久久久精品福利| 视频一区视频二区中文| 国产成人短视频| 欧美日韩在线视频播放| 奇米色777欧美一区二区| 国产欧美精品在线播放| 91资源在线视频| 麻豆精品新av中文字幕| 成人做爽爽免费视频| 国产三级精品在线观看| 福利视频网站一区二区三区| 国产成人精品日本亚洲11 | 91精品网站在线观看| 欧美妇女性影城| 99国产精品免费视频| 成人影院中文字幕| 亚洲理论在线a中文字幕| 国产成人精品无码免费看夜聊软件| 国内黄色精品| 久久艳片www.17c.com | 日韩在线资源| 亚洲黄色在线视频| 鲁一鲁一鲁一鲁一色| 性欧美videohd高精| 欧美三级蜜桃2在线观看| 日韩欧美中文视频| 久久夜色电影| 中文日韩电影网站| 欧美性猛交xxxxx少妇| 亚洲三级影院| 国产精品日韩欧美| 性生活视频软件| 久久久精品天堂| 亚洲美女自拍偷拍| 最新国产在线拍揄自揄视频| 亚洲视频免费观看| 妺妺窝人体色www在线小说| 99久久久国产精品免费调教网站| 日韩三级免费观看| a毛片毛片av永久免费| 天天影视欧美综合在线观看| 国内伊人久久久久久网站视频| 波多野结衣小视频| 国产+成+人+亚洲欧洲自线| 日本高清不卡三区| 欧美xxxx黑人又粗又长| 欧美中文字幕不卡| 最新版天堂资源在线| 大片网站久久| 韩剧1988在线观看免费完整版| 一级一级黄色片| 成人av先锋影音| 一区二区三区视频| 亚洲午夜天堂| 精品久久国产97色综合| 亚洲一级二级片| 亚洲一区欧美二区| 成人动漫视频在线观看完整版| 国产视频网站在线| 午夜精品福利在线| 性一交一黄一片| 日韩.com| 国产精品96久久久久久| 污视频网站免费观看| 亚洲色图制服诱惑| 污视频网站观看| 国产91一区| 777国产偷窥盗摄精品视频| 99久久精品无免国产免费 | 免费看特级毛片| 日韩精品成人一区二区在线| 久久国产日韩欧美| 久久免费电影| 日韩欧美国产1| 国产精品九九九九九九| 久久精品国产一区二区三| 欧美一区二区在线| 亚洲永久av| 精品亚洲国产成av人片传媒| 国产一二三四在线| 国产经典欧美精品| 国产精品无码电影在线观看| www欧美在线观看| 日韩最新在线视频| 中文字幕久久网| 国产精品每日更新| 婷婷丁香激情网| 欧美日韩伦理| 国产精品欧美一区二区三区奶水| 国内精品在线视频| 91国内精品野花午夜精品| 日本二区在线观看| 日韩国产欧美在线播放| 亚洲国产日韩欧美| 成人日韩av| 日韩视频中文字幕| 国产精品一区二区免费视频| 亚洲视频在线观看三级| 在线免费看v片| 午夜久久福利| 国产伦精品一区二区三区视频黑人| 免费网站在线观看人| 精品久久人人做人人爽| 国产特黄大片aaaa毛片| 久久久久国产一区二区三区四区 | 成人在线视频播放| 一区二区三区四区在线观看视频| 国产精品欧美综合| 成人免费在线视频观看| 日本少妇一区二区三区| 激情丁香综合| 欧美日韩一区二区三| www.久久.com| 欧美成人精品h版在线观看| 高h调教冰块play男男双性文| 精品久久久精品| 亚洲人成人无码网www国产 | 免费看91视频| 国产精品美女久久久| 欧美一级二级三级九九九| 国产成人精选| 欧美激情中文网| 天堂在线免费av| 欧美日韩一区三区| 久久久久久激情| 国产亚洲欧美在线| 伊人免费视频二| 在线午夜精品| 一区二区av| 国产精品高潮呻吟久久久久| 国产精品xxx视频| а√中文在线8| 亚洲美女在线视频| 国产人妖一区二区| 欧美性xxxxxxx| 91人妻一区二区三区蜜臀| 成人美女在线观看| 另类小说色综合| 亚洲精品孕妇| 男人的天堂成人| 久久av资源| 国产成人精品免费视频大全最热| 亚洲a∨精品一区二区三区导航| 久久久国产影院| 九色在线播放| 精品少妇一区二区三区日产乱码| 久久久久在线视频| 一区二区三区高清| jizzjizzjizz国产| 久久综合久久鬼色| avtt中文字幕| 蜜臀91精品一区二区三区 | 亚洲第一国产精品| 久久久久久av无码免费看大片| 亚洲一本大道在线| 四虎永久免费地址| 久久精品欧美一区二区三区不卡| 韩国一区二区三区四区| 精品一区二区久久久| 女人天堂av手机在线| 国内成人在线| 懂色av一区二区三区四区五区| 国产欧美亚洲精品a| 国新精品乱码一区二区三区18| 日韩欧乱色一区二区三区在线 | 天天操夜夜操视频| 亚洲第一av色| 国产大学生自拍| 最好看的中文字幕久久| 欧美亚洲色综久久精品国产| 久久精品一区二区三区不卡牛牛 | 97超碰人人模人人人爽人人爱| 色综合色综合色综合色综合色综合| 国产第一页在线播放| 亚洲美女视频在线| 日本裸体美女视频| 国产精品视频麻豆| 1024手机在线观看你懂的| 久久久久久久网| 亚洲久久久久久| gogo大胆日本视频一区| 91精品人妻一区二区三区四区| 国产在线麻豆精品观看| 成人黄色一级大片| 精品一区二区在线观看| 亚洲精品免费一区亚洲精品免费精品一区 | 亚洲精品一区中文字幕乱码| 天天综合天天色| 日韩h在线观看| 亚洲三区在线观看无套内射| 亚洲精品v欧美精品v日韩精品| 黄色aaa大片| 亚洲激情在线观看视频免费| 香蕉av在线播放| 亚洲精品一区在线观看香蕉| 国产综合视频一区二区三区免费| 亚洲人成网站777色婷婷| 国产一级免费在线观看| 中文字幕日韩精品在线| 精品美女在线观看视频在线观看 | 久久av红桃一区二区禁漫| 成人免费在线视频观看| 免看一级a毛片一片成人不卡| 一个色综合av| 国产精品老女人| 91九色02白丝porn| 成人黄色免费网| 欧美福利电影网| 欧美一级淫片aaaaaa| 日韩精品一区二区视频| 国产女人在线观看| 中文字幕日韩欧美在线视频| 超碰在线免费播放| 久久久久女教师免费一区| 丝袜诱惑一区二区| 国产精品美女久久久久av超清| 国产精品久久久久久av公交车| 99理论电影网| 国产伦一区二区三区| 久久久一二三四| 亚洲免费黄色| 午夜免费一区二区| 国产毛片精品国产一区二区三区| 男女一区二区三区| 中文字幕欧美激情| 久久丫精品久久丫| 色菇凉天天综合网| 99久久久无码国产精品免费| 亚洲精品成人网| 免费黄色网址在线观看| 91精品国产91久久久久久| 成人四虎影院| 国产精品福利视频| 欧美肉体xxxx裸体137大胆| 日韩专区第三页| 亚洲一区欧美激情| 国产老头和老头xxxx×| 久久久久久久久免费| 久草免费在线观看视频| 欧美在线观看18| 黑人精品一区二区三区| 中文字幕日本欧美| 国产资源在线观看入口av| 国产欧美在线观看| 香蕉久久夜色精品国产更新时间| 性做爰过程免费播放| 久热re这里精品视频在线6| 中文字幕第六页| 欧美激情在线观看视频免费| 久草精品视频在线观看| 欧美久久久久久久久| 丝袜视频国产在线播放| 欧美情侣性视频| 97精品国产99久久久久久免费| 精品网站在线看| 亚洲成人一区| 国产精品视频分类| 久久综合给合久久狠狠狠97色69| 久草网视频在线观看| 欧美日韩美少妇| 成人精品福利| 人九九综合九九宗合| 国产精品tv| 2021狠狠干| 久久91精品久久久久久秒播| 波多野结衣av在线观看| 精品日本美女福利在线观看| 性一交一乱一乱一视频| 欧美成人精品在线视频| 欧美视频精品| 视频一区二区三区在线观看| 另类天堂av| 亚洲久久久久久| 亚洲一区二区精品3399| 精品人妻aV中文字幕乱码色欲| 日韩在线小视频| av激情成人网| 日本免费高清一区| 美日韩精品视频| 亚洲第一成人网站| 福利一区视频在线观看| 香蕉国产在线视频| 欧美专区日韩视频| 五月激激激综合网色播| 131美女爱做视频| 99re6这里只有精品视频在线观看| 久久国产在线视频| 欧美成人bangbros| 国产桃色电影在线播放| 懂色av一区二区三区在线播放| 欧美成人久久| 中文字幕第九页| 午夜视频久久久久久| 天堂网av2014| 日韩美女av在线免费观看| 久久99高清| 91插插插插插插插插| 国产精品国产三级国产a| 波多野结衣一区二区三区四区| 一本一本久久a久久精品牛牛影视| 青青热久免费精品视频在线18| 天堂√在线观看一区二区| 开心九九激情九九欧美日韩精美视频电影| 国产精品av久久久久久无| 91麻豆精品国产91| 污的网站在线观看| 国产伦精品一区二区三区| 亚洲一区欧美二区| 美国一级黄色录像| 91精品国产乱码久久蜜臀| 欧美xxxx免费虐| 欧美不卡三区| 精品一区二区三区视频 | 精品人伦一区二区三区蜜桃免费 | 久久天天躁狠狠躁老女人| 欧美影院视频| 欧美日韩在线视频一区二区三区| 国产日韩欧美制服另类| 99国产精品欲| 欧美一级bbbbb性bbbb喷潮片| 欧美丝袜一区| 在线观看一区二区三区视频| 精品日韩视频在线观看| 日本在线观看网站| 国产精品免费一区二区| 日本成人超碰在线观看| 国产av无码专区亚洲av毛网站| 亚洲国产成人精品久久久国产成人一区| 午夜裸体女人视频网站在线观看| 在线成人性视频| 99精品久久只有精品| 一级全黄少妇性色生活片| 欧美激情久久久| 成人综合久久| 国产视频久久久久久| 欧美老肥妇做.爰bbww| 松下纱荣子在线观看| 综合视频在线观看| 99精品久久只有精品|