外观
BTL Reference 证据方法
1. 基本原则
BTL Reference 采用“声明级证据”而不是“文件级可信度”。同一条记录可以同时存在:
- 物理布局
Confirmed; - 某些字段语义
Confirmed; - 某些 bit
Partial; - 某些异常输入
Unknown; - 写入
NoGo。
因此不能用“这个 Record 已经恢复”替代逐字段状态。
2. 证据来源
2.1 Native parser / constructor
用于回答:
- 字段是否被读取;
- 读取宽度和 signedness;
- section 顺序与长度;
- 记录如何进入 runtime object。
直接 native 读链通常可以确认物理结构,但不自动确认最终玩法含义。
2.2 Native consumer
用于回答:
- 字段进入哪个定义表、状态机或功能路径;
- 是否参与 AI、事件、表现、战斗或其他系统;
- bit/enum 分支的实际控制流。
如果只追到中间 setter 而未追到最终 consumer,语义通常应保持 Partial。
2.3 Original corpus
当前主要 corpus 是 WC4 1.28.0 的 1358 个原版 BTL。
Corpus 可用于确认:
- 实际值域;
- section 组合;
- 引用匹配;
- 版本分布;
- 是否存在正样本。
Corpus 不能单独证明:
- 未出现的值一定非法;
- 恒零字段是 padding;
- 某个 enum 的显示名称;
- 无效输入时原版会如何处理。
2.4 Runtime trace / controlled probe
用于闭合仅靠静态代码无法确定的:
- 实际写集;
- 执行顺序;
- 异常/失败行为;
- 模式条件;
- 结果反馈。
动态证据必须与研究实现、构建、安装和人工行为验收分开记录。
2.5 Cross-architecture
ARM64、x86、UWP 或其他可审计实现之间的一致性可以强化函数身份和字段 consumer,但不能以相似代码替代缺失的直接证据。
2.6 Community material
社区 TXT/XLSM/工具标签只能作为检索线索和历史兼容信息。
如果社区说法与 native/corpus 冲突,Reference 应保留旧说法作为勘误项,并标记 Refuted,不能为了兼容旧工具继续把错误名称当主名称。
3. 状态判定
Confirmed
适合以下情况之一:
- 原版 parser/consumer 存在直接读写链;
- descriptor/native symbol 明确给出结构身份,且与实际 wire 一致;
- 大规模 corpus 与独立实现一致地验证物理关系;
- 动态 trace 明确闭合行为声明。
状态只覆盖被证据直接支持的那句话。
Partial
典型情况:
- 知道字段属于 Frontier override 路径,但不知道所有非零值的精确语义;
- 知道 packed byte 被多个分支使用,但没有闭合所有 bit;
- 知道 protobuf 字段名和编号,但没有完整 consumer;
- 知道 Event action 家族,但部分参数/filter 未闭合。
Unknown
证据不足时使用。不得附带一个看似确定的中文字段名来掩盖 Unknown。
UnknownNoPositiveCorpus
适用于“结构/consumer 已有证据,但当前原版 corpus 没有实际正记录”的情况。它不是 Confirmed 值域。
Refuted
已有明确更强证据否定旧说法时使用。Refuted 条目应说明被否定的是哪一个具体声明,而不是否定整个社区资料来源。
NoGo
用于执行边界:
- 禁止根据未知语义实现自创行为;
- 禁止未经 writer 门禁写回;
- 禁止自动修复无法证明的引用;
- 禁止把实验性观察升级为原版 authority。
4. 写入状态与读取状态分离
建议每个字段至少分开记录:
text
physicalStatus
semanticStatus
consumerStatus
corpusStatus
writeStatus例如某字段可以是:
text
physicalStatus = Confirmed
semanticStatus = Partial
consumerStatus = Partial
corpusStatus = ConfirmedObserved
writeStatus = NoGo这比单一“已知/未知”更准确。
5. 命名优先级
推荐优先级:
- 原版 descriptor / symbol 中可以直接审计的名称;
- 已闭合 consumer 能安全支持的 clean-room 名称;
- 保守描述性名称,例如
Header50Raw; - 社区旧名称,仅作为 alias/勘误;
- 无法命名时继续使用 offset + raw。
不得为了中文可读性创造超过证据范围的新业务名称。
6. 更新规则
每次字段研究闭合后,应同时检查:
- 对应
records/*.md或extension/*.md; community/corrections.md是否存在旧说法;reports/btl_reference/reference_catalog.json的章节/证据入口;- 是否存在已被新证据推翻的报告,需要进入项目 supersession 流程。
如果只是新增证据而没有改变现有结论,不应制造无意义的 supersession。