Skip to content

tests+fix: 修复管线契约测试 phase-1 + fix_so.py 对齐 Go 基线(含冻结基线) - #21

Merged
weixiao33661 merged 2 commits into
devfrom
feat/contract-tests
Oct 15, 2026
Merged

weixiao33661 merged 2 commits into
devfrom
feat/contract-tests

Conversation

@weixiao33661

@weixiao33661 weixiao33661 commented Oct 15, 2026 •

Copy link
Copy Markdown
Collaborator

内容(两个 commit)

  1. 93289fd 契约测试基建:gen_fixtures(17 样例+manifest)、三家 runner(python/go -tags contract/v9 原语 harness)、compare 编排、仓库首个 CI。
  2. 0fc56da 按确认的 A 口径(以 Go/dev 版 bad/ 隔离为准)修 fix_so.py 并冻结 expected.json。

fix_so.py 改了什么

  • 新增 repair_elf_aligned():严格镜像 Go repairSo——补 magic/EI_DATA/EI_VERSION、PT_LOAD/PT_DYNAMIC p_offset=p_vaddr、p_filesz 抬到 p_memsz;不再对健康文件重建 SHT、不再 extent-clamp、不再清 PT_DYNAMIC。
  • fix_so_file() 改走对齐管线,并补上与 Go 一致的"修复后深校验,仍不合格移 bad/"。
  • CLI(main/--carrier/repair_file)仍走原 repair_elf 全量路径,能力未动。
  • 未修的已知遗留(如实声明):CLI 全量路径的 skew-clamp 缺陷(p_filesz→0、PT_DYNAMIC→PT_NULL)仍在,契约管线已不经过它;建议后续单独立项处理。

首轮发现的差异 → 现在已收敛

修前 修后
DEX 10 例 三家一致(白捡的安心) 不变
so_valid(健康无 SHT dump) py 多写 6 段 SHT(512→944) py==go,字节全等
so_magic_erased py 字节 ≠ go 字节全等
so_offset_skew py 修复后文件被破坏(filesz→0、PT_DYNAMIC→0) py==go==合法基线字节
隔离语义(ET_EXEC/过小/非ELF/坏phnum) 两家一致 bad/ 不变
v9(so_valid) CI 实测 FIXED(设备端重建 SHT 哲学) 记入契约表,仅漂移告警

基线与门禁

  • tests/contract/expected.json 从 Go 基线冻结(17 例:分类+字节哈希+位置)。
  • CI:普通报告 + --check(任何实现行为漂移→红)。本地 --check --strict 已验证 exit 0。
  • 常规构建零感知:Go 契约测试在 -tags contract 后;fix_dex_checksum.py 未动;TUI/GUI 流程不经过 fix_so.py。

验证记录

  • Windows 本地:Python↔Go 17/17 全绿;v9 因 sys/uio.h 无 Windows 等价物按设计 SKIPPED。
  • Linux CI(v9 可编译):等本 push 后的 run 确认 v9 列与记录值一致。

🤖 Generated with Claude Code

weixiao33661 and others added 2 commits October 16, 2026 00:55
- tests/gen_fixtures.py: 确定性生成 17 个 DEX/SO 契约样例 + manifest(意图/预测/原始哈希)
- gui/contract_test.go: -tags contract 运行 FixDexDirectory/FixSoDirectory 并输出分类 JSON
- tests/contract/run_python.py: 调用两个 Python 模块的 fix_directory_aligned
- tests/contract/v9_harness.cpp + run_v9.py: v9 原语级 harness(编不过则诚实 SKIPPED,Linux CI 覆盖)
- tests/contract/compare.py: 编排/报告/冻结(--freeze)/校验(--check)/严格(--strict)
- Makefile test: 接线;新增 .github/workflows/contract-tests.yml
- 首轮报告: DEX 10/10 字节级一致;SO 3 处分叉集中在 fix_so.py repair_elf
  (对健康 SO 重建 SHT;对 offset skew 的 clamp 破坏 PT_DYNAMIC)
- 按约定本 PR 不冻结 expected.json,待确认口径后另行提交

Co-Authored-By: Claude Code <noreply@anthropic.com>
按确认的 A 口径(以 Go/dev 版 bad/ 隔离为准):

- 新增 repair_elf_aligned():只做 Go sofix.go repairSo 的四件事
  (补 magic/EI_DATA/EI_VERSION、PT_LOAD/PT_DYNAMIC p_offset=p_vaddr、
  PT_LOAD p_filesz 抬到 p_memsz),不重建 SHT、不裁 extent、
  不动 PT_DYNAMIC 类型;判读不了抛错交调用方隔离。
- fix_so_file() 改走对齐管线,并按 Go 流程补"修复后深校验,仍不合格
  移 bad/"一步。此前它误用重型 repair_elf:对健康无 SHT 的 dump 多
  写 6 段 SHT,对 p_offset≠p_vaddr 的真实 dump 把 p_filesz 归 0、
  把 PT_DYNAMIC 清成 PT_NULL(修复反而破坏文件)。
- CLI(main/--carrier/repair_file)仍走原 repair_elf 全量路径,能力
  保留未动;其 skew-clamp 缺陷记为后续独立议题。
- 契约: 17/17 用例 Python 与 Go 分类一致且逐字节一致;
  冻结 tests/contract/expected.json(Go 基线),CI --check 门生效;
  v9 列改为仅按其记录值做漂移告警(设备端语义有意不同)。

Co-Authored-By: Claude Code <noreply@anthropic.com>
@weixiao33661 weixiao33661 changed the title tests: 修复管线契约测试 phase-1(仅报告模式,未冻结基线) tests+fix: 修复管线契约测试 phase-1 + fix_so.py 对齐 Go 基线(含冻结基线) Oct 15, 2026
@weixiao33661
weixiao33661 merged commit 6d8d320 into dev Oct 15, 2026
1 check passed
@weixiao33661
weixiao33661 deleted the feat/contract-tests branch October 15, 2026 17:36
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.

1 participant