一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天。点击查看活动详情
一、前言
近期在工作中接触到了sandbox这个工具,感觉很是强大,所以看了下源码,文章作为笔记,方便以后阅读。文章如有错误还请指正。
二、项目架构
三、项目模块介绍
- sandbox-agent: agent模块 启动一个代理程序,初始化一个jetty服务接受请求等。 由sandbox-core的main方法启动
- sandbox-api:sandbox的基本模型定义 如通用的注解、
Event等通用api,核心的EventListener也是定义在这个模块 - sandbox-common-api: 通用的注解和接口等
- sandbox-core: sandbox核心模块 main方法启动agent模块 定义了核心的类加载器和核心流程实现(如
ClassFileTransformer的实现、加载定义的jar包、 核心工具的实现ACM工具... and等等`) 属于核心模块 - sandbox-debug-module: 看起来是个测试用的模块
- sandbox-mgr-module: 沙箱管理模块 接受 外界的 命令 如
list、detail、flush等 - sandbox-mgr-provider: 自定义模块加载的回调函数实现,在该实现中可以进行文件解密和签名验证等操作
- sandbox-module-starter: starter 空的项目 pom文件中定义了模块版本
- sandbox-provider-api: 自定义模块加载的回调函数api
- sandbox-spy: sandbox的间谍模块 Spy的方法会通过asm插桩到各个需要增强的目标类中
四、项目相关技术和概念
- JVMTI
- java-agent
- asm
- jetty