作品简介

本书一共12章,从逻辑上主要分为字节码原理篇和应用篇两大部分。第1章详细剖析了class文件的内部结构,帮助读者理解本书后面介绍的字节码原理。第2章首先介绍了什么是字节码,接下来介绍了Java虚拟机栈和栈帧的相关内容,然后通过for循环、switch-case、try-catch-finally等语法讲解了字节码指令的用法。第3章介绍了字节码的进阶知识,主要目的是让读者掌握方法调用指令、泛型擦除、synchronized关键字、反射的底层实现原理。第4章介绍了javac编译器的原理。编译原理是计算机科学皇冠上的明珠,只有弄懂了javac才能更好地理解字节码的生成原理。本章一开始介绍了javac源码的调试方法,随后详细介绍了javac编译的七大阶段和各阶段的作用。第5章从字节码角度看Kotlin语言,介绍了常见语法糖和协程等的原理,希望读者在学习其他JVM系语言时可以举一反三,使用类似的思路。

第6章介绍了ASM和Javassist两个字节码操作工具。这两个工具非常重要,被广泛用于中间件框架中,后面关于APM、软件破解的章节都涉及这两个工具的使用。第7章介绍了Java Instrumentation的原理,分两种方式讲解了如何使用Instrumentation,最后介绍了Attach API的底层UNIX域套接字的通信原理。第8章介绍了JSR 269插件化注解处理的原理,希望读者可以通过本章掌握编译期间生成、修改代码的方法,理解Lombok、ButterKnife工具的实现原理。第9章主要介绍了字节码在cglib、Fastjson、Dubbo、JaCoCo、Mock这些框架上的应用,可以让读者接触到更多字节码的使用场景。第10章主要介绍了反编译、破解、防破解和逆向工程的相关内容。了解常见的破解和逆向方法能更好地保护自己的软件产品。第11章介绍了APM的概况、分布式跟踪的基本原理、OpenTracing的基本概念和无埋点字节码插桩的代码实现。如果对APM有兴趣,可以将本章作为入门指导,实现自己的APM产品。第12章详细介绍了Android dex文件的组成结构,以及Android字节码指令与Java字节码指令的区别,最后介绍了Gradle字节码改写实现无侵入插桩的方法。

张亚,资深后端工程师和Java工程师,CVTE(视源股份,股票代码:002841)高级技术经理,带领20多人的研发团队做教育相关的产品。主要方向是JVM调优及故障诊断、TCP源码剖析、高并发系统设计,致力于后端底层技术细节的研究。独立实现了公司级全链路APM产品,在字节码、ASM、软件破解等方向有丰富的实战经验。vim狂热爱好者,热衷分享,是掘金平台的优秀作者,在掘金上撰写过两本关于JVM和TCP底层原理的小册子。

作品目录

  • 前言
  • 第1章 深入剖析class文件结构
  • 1.1 初探class文件
  • 1.2 class文件结构剖析
  • 1.3 使用javap查看类文件
  • 1.4 小结
  • 第2章 字节码基础
  • 2.1 字节码概述
  • 2.2 Java虚拟机栈和栈帧
  • 2.3 字节码指令
  • 2.4 小结
  • 第3章 字节码进阶
  • 3.1 方法调用指令
  • 3.2 Lambda表达式的原理
  • 3.3 泛型与字节码
  • 3.4 synchronized的实现原理
  • 3.5 反射的实现原理
  • 3.6 小结
  • 第4章 javac编译原理简介
  • 4.1 javac源码调试
  • 4.2 javac的七个阶段
  • 4.3 小结
  • 第5章 从字节码角度看Kotlin语言
  • 5.1 Metadata注解
  • 5.2 顶层方法
  • 5.3 object单例
  • 5.4 扩展方法
  • 5.5 接口默认方法
  • 5.6 默认参数
  • 5.7 高级for循环
  • 5.8 data class
  • 5.9 多返回值
  • 5.10 协程的实现原理
  • 5.11 从字节码分析Kotlin编译器的bug
  • 5.12 小结
  • 第6章 ASM和Javassist字节码操作工具
  • 6.1 ASM介绍
  • 6.2 Javassist介绍
  • 6.3 小结
  • 第7章 Java Instrumentation原理
  • 7.1 Java Instrumentation简介
  • 7.2 Instrumentation与-javaagent启动参数
  • 7.3 JVM Attach API介绍
  • 7.4 小结
  • 第8章 JSR 269插件化注解处理原理
  • 8.1 JSR 269简介
  • 8.2 抽象语法树操作API
  • 8.3 JSR 269在常用框架上的应用
  • 8.4 小结
  • 第9章 字节码的应用
  • 9.1 cglib动态代理原理分析
  • 9.2 字节码在Fastjson上的应用
  • 9.3 字节码在Dubbo上的应用
  • 9.4 字节码在JaCoCo代码覆盖率上的应用
  • 9.5 字节码在Mock上的应用
  • 9.6 小结
  • 第10章 软件破解和防破解
  • 10.1 反编译
  • 10.2 软件破解
  • 10.3 软件防破解
  • 10.4 小结
  • 第11章 全链路分布式跟踪与APM
  • 11.1 全链路分布式跟踪介绍
  • 11.2 见微知著之APM
  • 11.3 小结
  • 第12章 Android字节码与APM
  • 12.1 dex文件结构
  • 12.2 Android字节码
  • 12.3 Gradle插件编写
  • 12.4 Android字节码注入原理
  • 12.5 小结
展开全部