简介
目录
- 第1章 深入剖析 class 文件结构 1
1.1 初探 class 文件 1
1.2 class 文件结构剖析 3
1.2.1 魔数 4
1.2.2 版本号 6
1.2.3 常量池 7
1.2.4 Access flags 18
1.2.5 this_class、super_name、interfaces 19
1.2.6 字段表 20
1.2.7 方法表 23
1.2.8 属性表 25
1.3 使用 javap 查看类文件 30
1.4 小结 32
- 第2章 字节码基础 33
2.1字节码概述 33
2.2 Java 虚拟机栈和栈帧 34
2.3 字节码指令 41
2.3.1 加载和存储指令 41
2.3.2 操作数栈指令 42
2.3.3 运算和类型转换指令 45
2.3.4 控制转移指令 46
2.3.5 for语句的字节码原理 48
2.3.6 switch-case底层实现原理 54
2.3.7 String的switch-case实现的字节码原理 55
2.3.8 i和i 的字节码原理 60
2.3.9 try-catch-finally的字节码原理 63
2.3.10 try-with-resources 的字节码原理 71
2.3.11 对象相关的字节码指令 74
2.4 小结 77
- 第3章 字节码进阶 78
3.1 方法调用指令 78
3.1.1 invokestatic指令 79
3.1.2 invokevirtual指令 79
3.1.3 invokespecial指令 80
3.1.4 invokeinterface指令 80
3.1.5 invokedynamic指令 90
3.2 Lambda 表达式的原理 95
3.3 泛型与字节码 100
3.4 synchronized 的实现原理 102
3.5 反射的实现原理 106
3.5.1 反射方法源码分析 107
3.5.2 反射的inflation机制 109
3.6 小结 110
- 第4章 javac 编译原理简介 111
4.1 javac 源码调试 112
4.2 javac 的七个阶段 114
4.2.1 parse阶段 115
4.2.2 enter阶段 116
4.2.3 process阶段 118
4.2.4 attr阶段 118
4.2.5 flow阶段 121
4.2.6 desugar阶段 122
4.2.7 generate阶段 126
4.3 小结 129
- 第5章 从字节码角度看 Kotlin语言 130
5.1 Metadata 注解 130
5.2 顶层方法 132
5.3 object 单例 133
5.4 扩展方法 134
5.5 接口默认方法 135
5.6 默认参数 137
5.7 高级 for 循环 140
5.8 data class 142
5.9 多返回值 143
5.10 协程的实现原理 144
5.10.1 CPS 介绍 145
5.10.2 suspend 关键字 146
5.11 从字节码分析 Kotlin 编译器的bug 149
5.12 小结 153
- 第6章 ASM 和 Javassist 字节码操作工具 154
6.1 ASM 介绍 154
6.1.1 ASM Core API核心类 156
6.1.2 ASM操作字节码示例 158
6.2 Javassist 介绍 169
6.2.1 Javassist核心API 169
6.2.2 Javassist操作字节码示例 170
6.3 小结 174
- 第7章 Java Instrumentation 原理 175
7.1 Java Instrumentation 简介 175
7.2 Instrumentation 与 -javaagent启动参数 176
7.3 JVM Attach API 介绍 180
7.3.1 JVM Attach API基本使用 181
7.3.2 JVM Attach API的底层原理 183
7.4 小结 190
- 第8章 JSR 269 插件化注解处理原理 191
8.1 JSR 269 简介 191
8.2 抽象语法树操作 API 193
8.2.1 Names介绍 193
8.2.2 JCTree介绍 193
8.2.3 TreeMaker介绍 198
8.2.4 自定义注解处理实战 202
8.3 JSR 269 在常用框架上的应用 207
8.3.1 案例一:ButterKnife 207
8.3.2 案例二:Lombok 209
8.4 小结 212
- 第9章 字节码的应用 213
9.1 cglib 动态代理原理分析 213
9.1.1 cglib核心API介绍 214
9.1.2 cglib原理分析 216
9.2字节码在 Fastjson 上的应用 218
9.3 字节码在 Dubbo 上的应用 221
9.4 字节码在 JaCoCo 代码覆盖率上的应用 222
9.5 字节码在 Mock 上的应用 225
9.6 小结 227
- 第10章 软件破解和防破解 228
10.1 反编译 228
10.2 软件破解 229
10.2.1 破解方式一:直接修改class文件 230
10.2.2 破解方式二:javaagent无痛破解 232
10.3 软件防破解 234
10.3.1 自定义ClassLoader 234
10.3.2 JNI隐藏核心逻辑 237
10.3.3 基于JVMTI的加密方案 239
10.3.4 混淆 245
10.4 小结 250
- 第11章 全链路分布式跟踪与APM 251
11.1 全链路分布式跟踪介绍 251
11.1.1 什么是全链路分布式跟踪 252
11.1.2 OpenTracing基本术语 253
11.1.3 分布式跟踪的实现和上下文传递 254
11.2 见微知著之 APM 260
11.2.1 APM基本概念 260
11.2.2 APM的字节码注入实现 261
11.2.3 其他平台的APM实现 272
11.3 小结 273
- 第12章 Android字节码与 APM 274
12.1 dex 文件结构 274
12.1.1 header 276
12.1.2 string_ids 278
12.1.3 type_ids 280
12.1.4 proto_ids 281
12.1.5 field_ids 282
12.1.6 method_ids 283
12.1.7 class_defs 284
12.1.8 data 288
12.1.9 link_data 288
12.2 Android字节码 288
12.2.1 Android字节码概述 288
12.2.2 常见的字节码指令介绍 289
12.3 Gradle 插件编写 295
12.3.1 自定义Gradle插件 295
12.3.2 独立的 Gradle 插件项目 296
12.4 Android字节码注入原理 297
12.4.1 Transform API介绍 297
12.4.2 字节码注入代码实现 299
12.5 小结 301
- 名称
- 类型
- 大小
光盘服务联系方式: 020-38250260 客服QQ:4006604884
云图客服:
用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问
