摘要:文件解析器解析器的名字隨便起的關(guān)于對編譯后的文件進(jìn)行解析,目前已經(jīng)完成了一大半,可能會(huì)寫文章介紹一下劃重點(diǎn),可能。
Class文件解析器 Ming
解析器的名字[Ming](隨便起的)
關(guān)于對Java編譯后的Class文件進(jìn)行解析,目前已經(jīng)完成了一大半,可能會(huì)寫文章介紹一下(劃重點(diǎn),可能)。
項(xiàng)目地址github: Ming
已知可能存在的問題class文件使用的是MUTF-8的編碼格式,與UTF-8有微妙的不同,在某些情況下可能錯(cuò)在無法解析的情況。
有一些類型雖然聲明了,但是還沒有具體的添加內(nèi)容,(才不是因?yàn)閼心兀绻龅經(jīng)]有實(shí)裝的類型,會(huì)報(bào)錯(cuò),我會(huì)盡量今早將所有的類型進(jìn)行實(shí)裝。
遇到?jīng)]有實(shí)裝類型的錯(cuò)誤類型有兩種
沒有找到指定的屬性類型:"can"t find specific attribute"
沒有找到指定的常量類型:"can"t find specific type tag: [該常量類型所對應(yīng)的具體的數(shù)值]"
使用方法 環(huán)境支持JDK8及其以上版本
測試用例(因?yàn)檫€沒有完全完成這個(gè)解析器,所以如果想要運(yùn)行請盡量使用該示例)Simple.java
public class Simple implements Parent, Child{ private int data; private static final String flag= "HelloWorld"; private static final long num = 1L; private static final double dou = 0.1; public int add(int a, int b) { return a + b; } }
Parent.java
public interface Parent { }
Child.java
public interface Child { }運(yùn)行
參考文件
java com.ming.print.PrintClassInfo.java 具體信息的輸出
java com.ming.test.Test.java 調(diào)用PrintClassInfo#printAll() 打印所有信息
運(yùn)行結(jié)果示例[magic]: cafebabe [minor_version]: 0 [major_version]: 52 [constant_pool_count]: 34 [constant_pool]: [1]: ConstantMethodrefInfo [tag]: 10 [class_index]: 3-java/lang/Object [name_and_type_index]: 28--()V [2]: ConstantClassInfo [tag]: 7 [name_index]: 29-Simple [3]: ConstantClassInfo [tag]: 7 [name_index]: 30-java/lang/Object [4]: ConstantClassInfo [tag]: 7 [name_index]: 31-Parent [5]: ConstantClassInfo [tag]: 7 [name_index]: 32-Child [6]: ConstantUtf8Info [tag]: 1 [length]: 4 [bytes]: data [7]: ConstantUtf8Info [tag]: 1 [length]: 1 [bytes]: I [8]: ConstantUtf8Info [tag]: 1 [length]: 4 [bytes]: flag [9]: ConstantUtf8Info [tag]: 1 [length]: 18 [bytes]: Ljava/lang/String; [10]: ConstantUtf8Info [tag]: 1 [length]: 13 [bytes]: ConstantValue [11]: ConstantStringInfo [tag]: 8 [string_index]: 33-HelloWorld [12]: ConstantUtf8Info [tag]: 1 [length]: 3 [bytes]: num [13]: ConstantUtf8Info [tag]: 1 [length]: 1 [bytes]: J [14]: ConstantLongInfo [tag]: 5 [value]: 01 [16]: ConstantUtf8Info [tag]: 1 [length]: 3 [bytes]: dou [17]: ConstantUtf8Info [tag]: 1 [length]: 1 [bytes]: D [18]: ConstantDoubleInfo [tag]: 6 [value]: 3fb999999999999a [20]: ConstantUtf8Info [tag]: 1 [length]: 6 [bytes]: [21]: ConstantUtf8Info [tag]: 1 [length]: 3 [bytes]: ()V [22]: ConstantUtf8Info [tag]: 1 [length]: 4 [bytes]: Code [23]: ConstantUtf8Info [tag]: 1 [length]: 15 [bytes]: LineNumberTable [24]: ConstantUtf8Info [tag]: 1 [length]: 3 [bytes]: add [25]: ConstantUtf8Info [tag]: 1 [length]: 5 [bytes]: (II)I [26]: ConstantUtf8Info [tag]: 1 [length]: 10 [bytes]: SourceFile [27]: ConstantUtf8Info [tag]: 1 [length]: 11 [bytes]: Simple.java [28]: ConstantNameAndTypeInfo [tag]: 12 [name_index]: 20- [descriptor_index]: 21-()V [29]: ConstantUtf8Info [tag]: 1 [length]: 6 [bytes]: Simple [30]: ConstantUtf8Info [tag]: 1 [length]: 16 [bytes]: java/lang/Object [31]: ConstantUtf8Info [tag]: 1 [length]: 6 [bytes]: Parent [32]: ConstantUtf8Info [tag]: 1 [length]: 5 [bytes]: Child [33]: ConstantUtf8Info [tag]: 1 [length]: 10 [bytes]: HelloWorld [access_flags]: 33 [this_class]: 2 [super_class]: 3 [interfaces_count]: 2 [interfaces]: [0]: 4-Parent [1]: 5-Child [fields_count]: 4 [fields]: [field 1 ]: [access_flags]: 2 [name_index]: 6 [descriptor_index]: 7 [attributes_count]: 0 [field 2 ]: [access_flags]: 26 [name_index]: 8 [descriptor_index]: 9 [attributes_count]: 1 [1]: AttributeConstantValueInfo [attribute_name_index]: 10 [attribute_length]: 2 [constantvalue_index]: 11 [field 3 ]: [access_flags]: 26 [name_index]: 12 [descriptor_index]: 13 [attributes_count]: 1 [1]: AttributeConstantValueInfo [attribute_name_index]: 10 [attribute_length]: 2 [constantvalue_index]: 14 [field 4 ]: [access_flags]: 26 [name_index]: 16 [descriptor_index]: 17 [attributes_count]: 1 [1]: AttributeConstantValueInfo [attribute_name_index]: 10 [attribute_length]: 2 [constantvalue_index]: 18 [methods_count]: 2 [methods]: [method 1 ]: [access_flags]: 1 [name_index]: 20 [descriptor_index]: 21 [attributes_count]: 1 [1]: AttributeCodeInfo [attribute_name_index]: 22 [attribute_length]: 29 [max_stack]: 1 [max_locals]: 1 [code_length]: 5 42-aload_0 183-invokespecial 0-nop 1-aconst_null 177-return_ [exception_table_length]: 0 [attributes_count]: 1 [method 2 ]: [access_flags]: 1 [name_index]: 24 [descriptor_index]: 25 [attributes_count]: 1 [1]: AttributeCodeInfo [attribute_name_index]: 22 [attribute_length]: 28 [max_stack]: 2 [max_locals]: 3 [code_length]: 4 27-iload_1 28-iload_2 96-iadd 172-ireturn [exception_table_length]: 0 [attributes_count]: 1 [attributes_count]: 1 [attributes]: [0]: AttributeSourceFileInfo [attribute_name_index]: 26 [attribute_length]: 2 [sourcefile_index]: 27
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/69535.html
摘要:最終形成可以被虛擬機(jī)最直接使用的類型的過程就是虛擬機(jī)的類加載機(jī)制。即重寫一個(gè)類加載器的方法驗(yàn)證驗(yàn)證是連接階段的第一步,這一階段的目的是為了確保文件的字節(jié)流中包含的信息符合當(dāng)前虛擬機(jī)的要求,并且不會(huì)危害虛擬機(jī)自身的安全。 《深入理解Java虛擬機(jī):JVM高級(jí)特性與最佳實(shí)踐(第二版》讀書筆記與常見相關(guān)面試題總結(jié) 本節(jié)常見面試題(推薦帶著問題閱讀,問題答案在文中都有提到): 簡單說說類加載過...
摘要:什么是爬蟲網(wǎng)絡(luò)爬蟲也叫網(wǎng)絡(luò)蜘蛛,是一種自動(dòng)化瀏覽網(wǎng)絡(luò)的程序,或者說是一種網(wǎng)絡(luò)機(jī)器人。 什么是爬蟲 網(wǎng)絡(luò)爬蟲也叫網(wǎng)絡(luò)蜘蛛,是一種自動(dòng)化瀏覽網(wǎng)絡(luò)的程序,或者說是一種網(wǎng)絡(luò)機(jī)器人。它們被廣泛用于互聯(lián)網(wǎng)搜索引擎或其他類似網(wǎng)站,以獲取或更新這些網(wǎng)站的內(nèi)容和檢索方式。它們可以自動(dòng)采集所有其能夠訪問到的頁面內(nèi)容,以供搜索引擎做進(jìn)一步處理(分檢整理下載的頁面),而使得用戶能更快的檢索到他們需要的信息。簡...
摘要:需要說明的是在設(shè)計(jì)模式一書中將工廠模式分為兩類工廠方法模式與抽象工廠模式,將簡單工廠模式看為工廠方法模式的一種特例,兩者歸為一類。工廠模式的作用工廠模式的作用封裝變化創(chuàng)建邏輯有可能變化,封裝成工廠類之后,創(chuàng)建邏輯的變更對調(diào)用者透明。1、什么是工廠模式Define an interface for creating an object,but let subclasses decide whi...
摘要:在屬性中,和分別用于存儲(chǔ)字節(jié)碼長度和字節(jié)碼指令,每條指令即一個(gè)字節(jié)類型。在虛擬機(jī)執(zhí)行時(shí),通過讀取中的一個(gè)個(gè)字節(jié)碼,并將字節(jié)碼翻譯成相應(yīng)的指令。另外,雖然是一個(gè)類型的值,但是實(shí)際上一個(gè)方法不允許超過條字節(jié)碼指令。 最近在寫一個(gè)私人項(xiàng)目,名字叫做SmallVM,SmallVM的目的在于通過實(shí)現(xiàn)一個(gè)輕量級(jí)的Java虛擬機(jī),加深對Java虛擬機(jī)的認(rèn)知和理解。在Java虛擬機(jī)加載類的過程中,需要...
閱讀 796·2021-11-12 10:36
閱讀 3376·2021-09-08 10:44
閱讀 2748·2019-08-30 11:08
閱讀 1405·2019-08-29 16:12
閱讀 2676·2019-08-29 12:24
閱讀 900·2019-08-26 10:14
閱讀 686·2019-08-23 18:32
閱讀 1176·2019-08-23 17:52