Skip to content

feat(incision): 新增字节码织入模块#690

Merged
Bkm016 merged 1 commit intoTabooLib:dev/6.3.0from
FxRayHughes:incision-dev
Apr 20, 2026
Merged

feat(incision): 新增字节码织入模块#690
Bkm016 merged 1 commit intoTabooLib:dev/6.3.0from
FxRayHughes:incision-dev

Conversation

@FxRayHughes
Copy link
Copy Markdown
Contributor

Summary

  • 新增 module/incision 模块:基于 JVMTI 的字节码织入框架,支持 @Lead(前置)、@Trail(后置)、@Splice(替换)三种 advice 类型
  • 提供 Accessor API(Lambda 工厂 + Theatre DSL),支持读写任意 private/final 字段、调用 private 方法,完全绕过 JDK 17+ 模块封装
  • 内置 JVMTI → 反射 → Unsafe 三级 fallback,确保各 JDK 版本兼容
  • 包含完整诊断体系(Trauma 异常族 + Forensics 日志)

核心能力

  • 织入注解@Surgeon 标记 handler 类,@Lead/@Trail/@Splice 标记 advice 方法
  • 运行时开关@Operation(id, enabled) 支持热切换 advice
  • 字段/方法访问field<T>(name) / staticField<T>(cls, name) / method<T>(name) Lambda 工厂,解析一次、多次复用
  • Theatre 上下文:handler 通过 Theatre 拿到 self、args、resume、throwable,以及便捷的 field/invoke DSL
  • 跨平台 native:提供 Linux/macOS/Windows 的 JVMTI agent 预编译二进制

Test plan

  • ./gradlew :module:incision:build 编译通过
  • Incision-Test 插件在 Paper 1.21+ 环境下全部用例通过
  • JVMTI 不可用时 fallback 到反射路径正常工作
  • SharpnessHook 示例正确拦截锋利附魔伤害计算

Ray_Hughes

@Bkm016 Bkm016 merged commit fe767c6 into TabooLib:dev/6.3.0 Apr 20, 2026
0 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants