Files
IC.Rebuild/diagnostics/2026-10-11-opcode-671-697-558.md

65 lines
4.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 0.1.10:高频未知 Opcode 核对
基线:国际服 2026.09.15.0000.0000;样本为原 capture-018.jsonl(SHA256 224AE627F6F6E613662745300C01493E411BDBE02CBA72366CCBD373DD28ECFF)。本次只读取原样本及游戏磁盘文件,没有新增 Hook、调用游戏函数或写入原始样本/映射缓存。
## 分派入口定位
PacketDispatcher RVA 0x18D9500 的主分派在 0x18DA549 附近:Opcode 减 101 后,以 0x18DD980 为 uint32 RVA 跳转表,读取对应分支。目标三项如下:
| Opcode | 样本数/长度 | 分派分支 RVA | 游戏处理函数 RVA | 本地补充名称 |
| --- | --- | --- | --- | --- |
| 671 | 51 / 72 字节 | 0x18DAD1E | 0xB4AC90 | DOWN_UpdateHate |
| 558 | 50 / 264 字节 | 0x18DAD4F | 0xB4ACF0 | DOWN_UpdateHater |
| 697 | 51 / 24 字节 | 0x18DAF7E | 0xB39090 | DOWN_EffectResultBasic |
分支均先调用录像记录入口,再将 IPC 缓冲区+0x10 作为业务载荷交给处理函数。主分派前的字段变换路径(0x18DA02C 起)处理的是 607、637、658、778 等值,这三种不会经过其字段变换。
本地 IDA 源码表的旧函数名作为交叉参考;实际地址由当前跳转表及当前机器代码取得,没有直接复用旧地址。
## 671:目标仇恨列表
0xB4AC90 读取业务偏移 0 的 byte 数量;从偏移 4 开始、步长 8 读取 uint32 对象标识及偏移 +4 的 byte 仇恨值。它将结果写入 UIState.Hate 的每项 EntityId/Enmity 和 HateArrayLength:实际数组起点 0x142ACBF28,计数 0x142ACC028,符合 Hate 的 0x100 计数字段。
样本固定 72 字节,数量为 0 或 1。当前解析限定 72 字节,以 4 字节前缀、8 字节步长限制最多 8 项;其余保留字节不解释。客户端 Hate 可容纳 32 项不代表本次这个固定大小包也容纳 32 项。仇恨值按原函数的 byte 读取,不把后面的填充字节拼成 uint32,也不额外推断百分比约束。
## 558:自身敌对列表
0xB4ACF0 采用相同网络条目布局:数量 byte,条目从 +4 开始,每项 8 字节,对象 uint32、仇恨 byte。处理后保存到 UIState.Hater 的 0x48 字节条目:其中前 0x40 字节的名称是客户端另行查找,并非包中的文本。HaterCount 写入 0x142ACC930。
样本固定 264 字节、数量均为 1。解析限定 264 字节、最多 32 项;不把它用于雷达、自动选敌或名单操作,仅展示网络记录中的已核实字段。
## 697:精简效果结果
0xB39090 按业务偏移 0 的 byte 数量循环,条目步长 0x10。相对于第一个条目:
- 业务 +4 的 uint32 用于匹配 ActionEffectHandler 中的动作全局序列;
- 业务 +0x10 的 byte 用于匹配目标序号;
- 业务 +0x0C 的 uint32 写入角色 +0x1AC,对应当前 CharacterData.Health;
- 其余字段继续保留,不凭偏移猜命名。
0x901EC0 根据匹配结果更新效果来源/目标确认标记,进一步支持“效果结果确认”的语义。样本均为 24 字节、数量 1;当前解析限定此固定包、最多 1 项,不据此支持其他数量变体。固定包中的 4 字节尾部不解释。
## 实现边界
三个映射与之前的 PingRsp 一起集中到 CurrentProtocolEvidence。仅当完整客户端版本匹配、Opcode 未被占用且名称尚不存在时补充,来源显示本机核实的新增项数。尊重用户或远程文件中已有的显式映射,缓存 JSON 不改写。
解析同样限定当前完整版本,检查固定长度与数量上限。显示已核实字段不代表所有字节都已解释。8 的状态屏蔽保持不可用;本轮没有把仇恨或动作确认包误当状态列表。
## 验证与进度
Release 构建通过,0 警告、0 错误;64 项离线测试通过,新增容量、步长、byte 字段、版本隔离、映射冲突和 1500 个任意长度/计数输入检查。
原 891 条记录回放:
| 项目 | 0.1.9 | 0.1.10 |
| --- | --- | --- |
| 有名称 | 724 | 876 |
| 未知记录 | 167 | 15 |
| Parsed=true | 512 | 664 |
| 已支持格式拒绝 | 0 | 0 |
| Ping 配对 | 8 | 8 |
新识别的 152 条全部通过当前有限字段解析;完整汇总保存为 2026-10-11-capture-018-v0110.json,不含真实载荷、坐标或对象标识。仍有 212 条已命名包未实现解析;Parsed=true 也不表示全字段解释完成。
剩余未知:614(16 字节,10 条)、788(16 字节,4 条)、214(16 字节,1 条)。对应当前分派线索分别为 0x18DD1FE → 0x8FE360、0x18DAF0E → 0xB38BB0、0x18DAFCC → 0xB39480;名称及完整语义下一轮核对,当前不补猜测映射。