精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

2019男人天堂| 蜜臀av.com| 一区二区三区在线观看av| 国产一区二区三区天码| 欧美精品第1页| 日本一区午夜艳熟免费| 高清国产福利在线观看| 国产一区二区三区蝌蚪| 欧美孕妇孕交黑巨大网站| 日本女人性生活视频| jizz国产精品| 欧美调教femdomvk| 精品丰满人妻无套内射| 99免在线观看免费视频高清| 成人久久久精品乱码一区二区三区 | 亚洲精品.www| 日韩中文字幕1| 久久久综合av| 日本黄色小说视频| 精品国产一区二区三区久久久樱花| 91麻豆精品91久久久久同性| 六月激情综合网| 日本大胆在线观看| 中文字幕日韩一区| 欧美一二三四五区| 国产av一区二区三区| 日韩在线卡一卡二| 777午夜精品福利在线观看| 神马久久精品综合| 精品日本12videosex| 亚洲激情自拍图| 国产精品99久久久精品无码| 福利一区和二区| 欧美体内谢she精2性欧美| 在线播放豆国产99亚洲| 精品视频二区| 91丨九色丨蝌蚪富婆spa| 亚洲在线www| 国产精品无码白浆高潮| 久久在线精品| 欧美怡红院视频一区二区三区 | 国产精品一线二线三线| 欧美性videos| 国产精品免费丝袜| 日韩中文一区| 国产香蕉在线| 久久九九99视频| 欧美美乳视频网站在线观看| 五月婷婷丁香网| 91在线观看下载| 精品国产二区在线| 午夜小视频在线播放| aaa亚洲精品一二三区| 国产一区二区三区免费不卡| 成人午夜视频一区二区播放| 国产99久久久国产精品潘金| 91日韩久久| 精品国产va久久久久久久| 国产一区二区在线视频| 91免费在线观看网站| 超碰在线观看99| 成人动漫视频在线| 国产一区二区三区四区五区加勒比| 亚洲精品一区二区三区蜜桃| 岛国精品一区二区| 国产欧美丝袜| 青青久在线视频免费观看| 91美女蜜桃在线| 欧美一区亚洲二区| 无遮挡的视频在线观看| 综合电影一区二区三区| 日韩视频一二三| 免费在线看电影| 五月天亚洲婷婷| 波多野结衣乳巨码无在线| 亚洲淫成人影院| 欧美在线一二三四区| 中文字幕成人免费视频| 免费观看亚洲天堂| 亚洲高清久久久久久| 在线观看国产三级| 欧美精品一二| 欧美大尺度激情区在线播放| 日韩欧美亚洲视频| 日本免费新一区视频| 成人字幕网zmw| 中文字幕日韩精品久久| 麻豆明星ai换脸视频| 激情成人亚洲| 日本三级韩国三级久久| 一级片在线免费观看视频| 国产a视频精品免费观看| 九色综合婷婷综合| 日韩黄色影院| 亚洲国产精品尤物yw在线观看| 北条麻妃在线视频观看| 国产日本久久| 亚洲国产精品高清久久久| 成人片黄网站色大片免费毛片| 婷婷亚洲最大| 热久久免费视频精品| 国产一区二区麻豆| 91免费看片在线观看| 亚洲天堂电影网| 国产精品vvv| 在线不卡的av| 精品成人av一区二区三区| 亚洲精品一二三区区别| 日本久久91av| 人人妻人人玩人人澡人人爽| 中国av一区二区三区| 欧美黑人经典片免费观看| 伊人国产精品| 亚洲男人7777| 日本网站免费观看| 国产美女视频一区| 午夜精品亚洲一区二区三区嫩草 | 精品九九在线| 韩国精品美女www爽爽爽视频| 亚洲综合精品国产一区二区三区| 99精品视频免费在线观看| 男人天堂成人网| 日本黄色成人| 国产午夜一区二区| 青青草av在线播放| 福利视频网站一区二区三区| 亚洲一区二区精品在线观看| 午夜日韩成人影院| 亚洲精品国精品久久99热| 九九视频在线观看| 国产综合一区二区| 一区二区三区观看| 99热播精品免费| 亚洲欧美中文字幕| 国产成人精品无码播放| 91一区二区视频| 国产婷婷一区二区| 国产又黄又大又粗视频| 精品五月天堂| 午夜欧美不卡精品aaaaa| 亚洲av无码一区二区乱子伦| 亚洲色欲色欲www在线观看| 国产精品视频分类| 成人免费在线观看av| 国产精品嫩草影院久久久| 黄网在线观看| 91久久香蕉国产日韩欧美9色| 少妇毛片一区二区三区| 国产欧美丝祙| 免费国产一区| 欧美aaa视频| 国产亚洲精品久久| 一区二区乱子伦在线播放| 国产亚洲欧美日韩在线一区| 999香蕉视频| 超碰成人久久| 成人信息集中地欧美| 免费在线午夜视频| 欧美一区二区三区喷汁尤物| www.毛片com| 成人综合在线观看| 无罩大乳的熟妇正在播放| 亚州av日韩av| 国产精品久久久91| 2021av在线| 欧美一区二区三区日韩| 日本亚洲色大成网站www久久| caoporn国产一区二区| 欧美污视频网站| 成人av国产| 成人一区二区电影| 蜜臀av在线| 日韩麻豆第一页| 一卡二卡三卡在线| 一个色综合av| 一卡二卡三卡四卡| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲永久激情精品| 一区中文字幕电影| 国产91精品不卡视频| 福利在线视频导航| 日韩一区二区在线观看视频| 精品成人免费视频| 中文字幕欧美日韩一区| 久久久久亚洲av无码专区首jn| 99在线精品视频在线观看| 日本不卡久久| 一区二区三区视频播放| 欧美美女网站色| 亚洲在线一区二区| 激情网站在线| 国产一区二区三区直播精品电影 | 色综合亚洲图丝熟| 中文字幕欧美精品在线| 精品二区在线观看| 色先锋资源久久综合| 成人在线观看小视频| 91性感美女视频| 亚洲一区二区三区四区精品| 新67194成人永久网站| 国产美女视频免费| 女厕嘘嘘一区二区在线播放 | 亚洲人成色777777精品音频| 欧美日韩另类一区| 91久久国产视频| 综合分类小说区另类春色亚洲小说欧美 | 国v精品久久久网| 黑人粗进入欧美aaaaa| 狠色狠色综合久久| 自拍另类欧美| 国产亚洲一卡2卡3卡4卡新区 | 我看黄色一级片| 国产99视频精品免视看7| 国产区在线观看| 亚洲一区二区黄| 日韩永久免费视频| 欧美一级二级三级蜜桃| 日韩xxx视频| 欧美日韩国产页| 欧美三级 欧美一级| 亚洲欧洲色图综合| 国产av自拍一区| 99热99精品| 国产精品日日摸夜夜爽| 久久成人免费电影| 免费看黄色一级大片| 亚洲最黄网站| cao在线观看| 国产综合网站| 69精品丰满人妻无码视频a片| 天天操综合网| 亚洲视频sss| 妖精视频一区二区三区免费观看 | 国产乱淫a∨片免费观看| 国产精品日本| www.射射射| 欧美日韩调教| 亚洲色婷婷久久精品av蜜桃| 国产精品88久久久久久| 亚洲国产精品视频一区| 日韩精品四区| 午夜精品一区二区三区在线观看| 国产中文字幕一区二区三区| 免费看污久久久| 自拍视频一区| 日本一区二区精品视频| 精品毛片免费观看| 亚洲欧美国产不卡| 99精品一区| 青青草原国产免费| 亚洲精品a级片| 水蜜桃在线免费观看| 亚洲欧美综合| cao在线观看| 亚洲制服少妇| 中文字幕第36页| 美日韩一区二区三区| 亚洲欧美日本一区二区三区| 久久se精品一区精品二区| 免费在线观看污网站| 国产精品中文字幕日韩精品| 色婷婷激情视频| 国产成人免费在线视频| 黄色国产在线视频| 91在线精品一区二区| 亚洲精品国产91| 国产精品高清亚洲| 69av视频在线| 天天综合日日夜夜精品| 丁香社区五月天| 欧美日韩精品高清| www.97av| 亚洲男女性事视频| 素人av在线| 欧美大片免费看| 手机在线理论片| 国产欧美日韩视频| 亚洲欧美在线人成swag| 成人资源视频网站免费| 亚洲自拍都市欧美小说| 天天干天天操天天干天天操| 在线观看的日韩av| 蜜臀久久99精品久久久酒店新书| 捆绑调教美女网站视频一区| 国产人妖在线观看| 久久久精品综合| 欧美成人精品欧美一| 精品免费在线视频| 91国内精品视频| 亚洲国产精久久久久久 | 亚洲一区网址| 欧美在线视频二区| 午夜精品av| 天堂av在线网站| 成人免费的视频| 欧美激情一区二区三区成人 | 日韩成人av在线| 日本综合在线| 97在线免费观看视频| 另类一区二区| 精选一区二区三区四区五区| 日韩精品免费一区二区在线观看| 日本熟妇人妻xxxx| 蜜桃视频免费观看一区| 国产精品成人无码专区| 国产精品国产成人国产三级| 国产精品视频123| 日韩三级高清在线| 在线观看免费网站黄| 2023亚洲男人天堂| 一区中文字幕电影| 一区二区三区电影| 丝袜亚洲精品中文字幕一区| 蜜臀视频在线观看| 亚洲婷婷综合久久一本伊一区| 国产美女激情视频| 精品久久人人做人人爽| 免费在线观看黄色网| 日韩美女视频在线观看| 成人精品动漫一区二区三区| 黄色高清视频网站| 麻豆中文一区二区| 亚洲欧美va天堂人熟伦| 第一福利永久视频精品| 亚洲第一黄色片| 欧美成人中文字幕在线| av一级久久| 伊人av成人| 麻豆国产欧美日韩综合精品二区| 日本少妇高潮喷水xxxxxxx| 欧美日韩免费观看中文| 黑人精品一区二区三区| 欧美大片大片在线播放| 精品国产亚洲一区二区三区在线| 亚洲啪啪av| 免费观看在线综合色| 在哪里可以看毛片| 91国偷自产一区二区使用方法| 亚洲av成人无码久久精品老人| 国内成人精品一区| 国产伦精品一区二区三区免费优势 | 九九在线视频| 国产成人精品在线视频| 亚欧美在线观看| 国产精品77777| 我要看黄色一级片| 69精品人人人人| 亚洲无线看天堂av| 成人h视频在线观看| 欧美色图首页| 日本不卡视频一区| 欧美日韩国产区| 免费观看成年在线视频网站| 国产91色在线|| 欧美一级本道电影免费专区| 狠狠热免费视频| 国产精品短视频| 国产999久久久| 国内精品久久久久久中文字幕| 精品午夜电影| 国产一区视频免费观看| 国产日本一区二区| 亚洲熟女乱色一区二区三区久久久| 久久精品人人做人人爽| 玖玖玖电影综合影院| 日韩精品视频在线观看视频| 91麻豆成人久久精品二区三区| 亚洲中文字幕无码爆乳av| 日韩亚洲欧美中文在线| 激情视频亚洲| 热99这里只有精品| 久久这里都是精品| 91theporn国产在线观看| 欧美激情久久久| 精品亚洲成人| xxxx国产视频| 一本色道久久综合精品竹菊| 91露出在线| 成人区精品一区二区| 亚洲综合精品四区| 日韩免费av一区| 亚洲成人aaa| 全球最大av网站久久| 天堂а√在线中文在线| 久久免费视频一区| 国产人妻精品一区二区三区| 97精品国产97久久久久久| sdde在线播放一区二区| 亚洲成人激情小说| 色综合久久综合网97色综合| 黄色小网站在线观看| 精品久久久久久乱码天堂| 美女一区二区三区| 日本午夜小视频| 久久精品99久久久久久久久 | va婷婷在线免费观看| 一区二区三区在线观看视频 | 国产精品久久乐| www.av毛片| 亚洲欧美怡红院|