Skip to content

phase-2: CLI 全量修复入契约+skew 缺陷修复;TUI/GUI 设备目录统一 - #23

Merged
weixiao33661 merged 1 commit into
devfrom
feat/contract-phase2
Oct 16, 2026
Merged

weixiao33661 merged 1 commit into
devfrom
feat/contract-phase2

Conversation

@weixiao33661

Copy link
Copy Markdown
Collaborator

改了什么

1. fix_so.py CLI 全量路径(repair_elf)修掉遗留缺陷

  • 根因:内存 dump 的 p_offset≠p_vaddr 输入,旧流程中 infer_file_layout_offsets 原样透传越界偏移 → clamp_phdr_file_extents 把健康段 p_filesz 归零 → find_dynamic_offset 因此找不到 .dynamic,按"不可救"清掉 PT_DYNAMIC。修复反而破坏文件。
  • 修法:第 0 步 memory-layout 兜底(p_offset≥EOF 且 p_vaddr<size → 先按 Go 基线把 p_offset=p_vaddr),条件保守,真正双越界的截断文件不触发,原有 SHT 重建等能力保留。

2. CLI 路径进入契约网(独立基线,不与 Go 比字节)

  • run_python_cli.py + manifest cli 期望 + expected.json schema 2 新增 python_cli golden(7 例)。
  • 硬不变量:非 REJECTED 产物必须过 validate_elf_deep;输入含 PT_DYNAMIC 修复后必须仍在;4 个坏输入必须被 REJECTED(不许强行修)。
  • --strict/--check 均覆盖;本地 17+7 全绿。

3. TUI/GUI 设备目录统一为 /data/local/tmp/nhdd_dump

  • 与 gui/adb.go 和设备二进制默认值、README 命令行示例一致;消除"两份 dump 存两个地方"的困惑。
  • TUI 保留"每次运行前清理重建 + 本地 run-id 隔离";设备端语义=最近一次运行优先(与设备二进制默认清旧 .dex/.so 行为一致)。
  • README 双语同步。

影响面

  • GUI 修复逻辑、设备端 v8/v9 二进制:未动。
  • fix_so_file(对齐管线):未动(上一轮已镜像 Go)。
  • 手动习惯:adb pull /data/local/tmp/.cache/nhdd 的老路径不再产生新数据(旧数据留在原地,可自行删)。

验证

  • 本地:compare.py --freeze 重冻 + --check --strict exit 0;nhdd_tui.py/fix_so.py 语法检查通过。
  • CI(Linux):等本 PR run 确认 v9 列与 python_cli golden 跨环境一致。

🤖 Generated with Claude Code

fix_so.py repair_elf(CLI 全量路径):
- 新增第 0 步 memory-layout 兜底:p_offset 指向 EOF 之外且 p_vaddr 落在
  文件范围内时,先按 GUI 基线语义把 p_offset 掰回 p_vaddr。修复实测缺陷:
  对 so_offset_skew 契约样例,旧逻辑先被 extent-clamp 把健康段 p_filesz
  归零、find_dynamic_offset 找不到 .dynamic 而误杀 PT_DYNAMIC(修反而坏)。
  对齐管线(repair_elf_aligned)不受影响;真正截断的输入(双 OOB)不触发。

契约测试扩展:
- 新增 run_python_cli.py:以 fix_so.py CLI 语义(classify→repair_elf)跑
  SO 样例,输出独立 golden(expected.json schema 2 新增 python_cli 段)+
  两条硬不变量(修复产物必须过 validate_elf_deep;输入的 PT_DYNAMIC 不得被丢)。
- manifest 增加 cli 期望字段;compare 表格加 python_cli 列,--strict/--check
  覆盖 CLI 不变量与 golden;REJECTED 语义锁死坏输入不被强行修复。
- 基线重冻:17 go/python + 7 python_cli,本地 --check --strict 全绿。

TUI/GUI 设备目录统一:
- nhdd_tui.py DEVICE_DUMP_DIR:/data/local/tmp/.cache/nhdd →
  /data/local/tmp/nhdd_dump,与 gui/adb.go 及设备二进制默认值一致;
  设备端"最近一次运行优先"(TUI 运行前仍清理重建,本地按 run-id 隔离不变)。
- README 双语的设备端流程说明同步改写(不再是"各自管理输出位置")。

Co-Authored-By: Claude Code <noreply@anthropic.com>
@weixiao33661
weixiao33661 merged commit 75a72f2 into dev Oct 16, 2026
1 check passed
@weixiao33661
weixiao33661 deleted the feat/contract-phase2 branch October 16, 2026 01:23
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