ASM 工具包(codechicken.lib.asm)

基本信息

属性 值
包名 codechicken.lib.asm
公开类型数 14
关联配置文件 config/CodeChickenLib.cfg(见 CodeChickenLib.cfg)
ASM 版本标记 Opcodes.ASM4(DependancyLister 使用,DelegatedTransformer.java:157)

功能

这是整个 CodeChicken 生态的地基。上面所有 coremod 变换器——TweakTransformer、RedirectorTransformer——都建立在这 14 个类之上。它对外提供的是「用可读文本描述字节码改动、再自动映射到运行时混淆名」的能力。

类清单

类 作用
ASMBlock 一段带标签的指令块,含标签解析与克隆(get / applyLabels)
ASMHelper 类读写、标签克隆、文本反编译转储;持有全局 ConfigFile
ASMInit 初始化入口
ASMReader 解析 .asm DSL 文本 → Map<String, ASMBlock>
CC_ClassWriter 自定义 ClassWriter,用 ClassHeirachyManager 缓存解析继承关系
ClassConstantPoolParser 常量池扫描,判断字节码是否引用过某 owner(重定向器的触发器)
ClassHeirachyManager 超级类缓存(见 重定向器)
ImportantInsnVisitor / InsnListSection / LocalVariablesSorterVisitor 指令级辅助访问器
InsnComparator 指令序列匹配,核心方法 findOnce(...)
ModularASMTransformer 组合式转换器,内含 MethodReplacer / MethodTransformer / MethodWriter 三个策略
ObfMapping 「类 / MCP 名 / 描述符」三元组,提供 toRuntime() / toSrg() 与 MCPRemapper

关键机制

混淆名映射

ObfMapping 持有 MCP 名与运行时混淆名的双向映射,并从字段/方法映射表反查(ObfMapping.java:57-61)。MCPRemapper(ObfMapping.java:94)负责读取 packaged.srg、fields.csv、methods.csv,目录猜测顺序为 6 次自动 + 3 次询问(DIR_GUESSES = 6、DIR_ASKS = 3,:118-119),全部失败时抛 "Failed to select mappings directory, set it manually in the config"(:115)。

调试转储

ASMHelper.dump(...) 支持 Textifier(可读文本)与 ASMifier(ASM 语法)两种输出,由 config.getTag("textify") 切换(ASMHelper.java:160、:171)。ModularASMTransformer 另有 config.getTag("dump_asm") 开关(ModularASMTransformer.java:50)。

消费者实证

ForgeMultipart(独立仓库,不在本分类内)不直接 import 本包,但整条变换链都建立在此之上。它在自己的 dependencies.gradle:4 声明 implementation("com.github.GTNewHorizons:CodeChickenCore:1.4.19:dev")——注意两点:一是版本 1.4.19 与本分类所引用的源码版本不同,二是带 :dev classifier(该 classifier 具体对应哪套构建产物,本条目无法从源码核实)。

相关条目