Documentation
¶
Overview ¶
Package decompiler 提供 Worker 侧反编译能力:解析/缓存 CFR 反编译器 jar, 并经实例/系统 JDK 受控调起 CFR 把 class/jar 反编译为 Java 源码。
全程只读 + 超时 + 体积上限 + 受控 exec(CFR 静态分析字节码,不加载/运行目标代码、 不写工作目录、不联网执行)。参见 ADR-018。
Index ¶
Constants ¶
const ( // DefaultTimeout 是单次反编译的默认超时。超时 kill 子进程并降级。 DefaultTimeout = 30 * time.Second // MaxOutputBytes 是捕获 CFR stdout 源码的上限,超出截断。 MaxOutputBytes = 4 * 1024 * 1024 )
反编译安全上限(ADR-018 决策 4)。
const (
// CFRVersion 是本 Worker 约定的 CFR 版本。
CFRVersion = "0.152"
)
CFR 版本与内容指纹(构建期常量,升级 CFR 时同步改这三项)。 SHA-256 pin 用于校验「按需下载」的内容可信(不信任传输通道,只信内容指纹, 与 ADR-022 客户端 manifest 信任模型同构)。
Variables ¶
This section is empty.
Functions ¶
func ResolveJavaBin ¶
ResolveJavaBin 解析用于运行 CFR 的 java 可执行文件路径。 优先级:实例绑定 JDK 的 bin(jdkBinPath 或 jdkPath/bin)> 系统候选(systemCandidates)> PATH 上的 java。 返回空串表示无可用 JDK(调用方据此降级)。
Types ¶
type Config ¶
type Config struct {
// ConfigPath 显式 CFR jar 路径(可空)。
ConfigPath string
// CacheDir 数据根下的缓存目录(CFR jar 落地于此,可空则仅用配置/内嵌)。
CacheDir string
// Embedded 返回内嵌 jar 字节(可空)。
Embedded EmbeddedJarFunc
// AllowDownload 是否允许从 Maven Central 按需下载(默认应开启)。
AllowDownload bool
// HTTPClient 按需下载 CFR 所用出站 client(经进程级代理,FR-174/ADR-037)。
// 为 nil 时回退一个 60s 超时的默认 client(向后兼容;测试也可经此注入 httptest client)。
HTTPClient *http.Client
// HTTPClientProvider 运行时出站持有者(FR-185/ADR-043):非空时每次下载取当前 client,
// 使 CP 经心跳下发的代理改动即时生效。优先于 HTTPClient。
HTTPClientProvider func() *http.Client
}
Config 构造 Provider 的参数。
type EmbeddedJarFunc ¶
type EmbeddedJarFunc func() []byte
EmbeddedJarFunc 返回内嵌 CFR jar 字节(缺失返回 nil)。 由调用方注入(worker embed 包),避免本包反向依赖。
type Options ¶
type Options struct {
// JavaBin 是用于运行 CFR 的 java 可执行文件路径(实例绑定 JDK 优先,否则系统 JDK)。
JavaBin string
// CFRJar 是已解析的 CFR jar 路径。
CFRJar string
// Target 是反编译目标的绝对路径(工作目录内 .class 或 .jar,或从 jar 抽出的临时 .class)。
Target string
// JarEntry 非空时表示只反编译 jar 内某 class 条目(传给 CFR 作为「仅该类」过滤)。
// 当 Target 本身是单个 .class(已从 jar 抽出)时留空。
JarEntry string
// Timeout 覆盖默认超时(<=0 用 DefaultTimeout)。
Timeout time.Duration
}
Options 是一次反编译调用的输入。
type Provider ¶
type Provider struct {
// contains filtered or unexported fields
}
Provider 负责解析出一个可用的 CFR jar 路径并缓存结果。 解析优先级(ADR-018 决策 3):
- 显式配置路径(configPath);
- 内嵌 jar(embedded,写到缓存目录复用);
- 数据根缓存(cacheDir/cfr-<ver>.jar);
- 按需下载(download URL + sha256 pin 校验)。
Provider 可被多 goroutine 并发调用 Resolve;首次解析加锁串行,之后走缓存。