深入理解JVM字節(jié)碼
本書一共12章,從邏輯上主要分為字節(jié)碼原理篇和應(yīng)用篇兩大部分。第1章詳細(xì)剖析了class文件的內(nèi)部結(jié)構(gòu),幫助讀者理解本書后面介紹的字節(jié)碼原理。第2章首先介紹了什么是字節(jié)碼,接下來介紹了Java虛擬機(jī)棧和棧幀的相關(guān)內(nèi)容,然后通過for循環(huán)、switch-case、try-catch-finally等語法講解了字節(jié)碼指令的用法。第3章介紹了字節(jié)碼的進(jìn)階知識(shí),主要目的是讓讀者掌握方法調(diào)用指令、泛型擦除、synchronized關(guān)鍵字、反射的底層實(shí)現(xiàn)原理。第4章介紹了javac編譯器的原理。編譯原理是計(jì)算機(jī)科學(xué)皇冠上的明珠,只有弄懂了javac才能更好地理解字節(jié)碼的生成原理。本章一開始介紹了javac源碼的調(diào)試方法,隨后詳細(xì)介紹了javac編譯的七大階段和各階段的作用。第5章從字節(jié)碼角度看Kotlin語言,介紹了常見語法糖和協(xié)程等的原理,希望讀者在學(xué)習(xí)其他JVM系語言時(shí)可以舉一反三,使用類似的思路。第6章介紹了ASM和Javassist兩個(gè)字節(jié)碼操作工具。這兩個(gè)工具非常重要,被廣泛用于中間件框架中,后面關(guān)于APM、軟件破解的章節(jié)都涉及這兩個(gè)工具的使用。第7章介紹了JavaInstrumentation的原理,分兩種方式講解了如何使用Instrumentation,最后介紹了AttachAPI的底層UNIX域套接字的通信原理。第8章介紹了JSR269插件化注解處理的原理,希望讀者可以通過本章掌握編譯期間生成、修改代碼的方法,理解Lombok、ButterKnife工具的實(shí)現(xiàn)原理。第9章主要介紹了字節(jié)碼在cglib、Fastjson、Dubbo、JaCoCo、Mock這些框架上的應(yīng)用,可以讓讀者接觸到更多字節(jié)碼的使用場景。第10章主要介紹了反編譯、破解、防破解和逆向工程的相關(guān)內(nèi)容。了解常見的破解和逆向方法能更好地保護(hù)自己的軟件產(chǎn)品。第11章介紹了APM的概況、分布式跟蹤的基本原理、OpenTracing的基本概念和無埋點(diǎn)字節(jié)碼插樁的代碼實(shí)現(xiàn)。如果對(duì)APM有興趣,可以將本章作為入門指導(dǎo),實(shí)現(xiàn)自己的APM產(chǎn)品。第12章詳細(xì)介紹了Androiddex文件的組成結(jié)構(gòu),以及Android字節(jié)碼指令與Java字節(jié)碼指令的區(qū)別,最后介紹了Gradle字節(jié)碼改寫實(shí)現(xiàn)無侵入插樁的方法。
·9萬字