diff options
| author | blasty <blasty@local> | 2026-07-26 21:02:47 +0200 |
|---|---|---|
| committer | blasty <blasty@local> | 2026-07-26 21:02:47 +0200 |
| commit | 07a73abf918711bb776eec9b524bae58dafbd826 (patch) | |
| tree | 058f2b6facccb2240e429e78bf0b6e18fbb7dd74 /tools | |
| parent | arm: find Thumb entry points from a vector table (Shift+T) (diff) | |
| download | ida-tui-main.tar.gz ida-tui-main.tar.xz ida-tui-main.zip | |
The suite edits the database — defines code, undefines items, renames, comments —
and IDA saves all of it. Running that against targets/echo.i64 meant every run
inherited the last one's damage.
That cost real time twice. decomp_follow_self "started failing" with no code
change, and stayed failing until the .i64 was deleted; an edit-position check
looked flaky about one run in three and I nearly reported it as an async race.
Both were the database drifting. A suite whose result depends on its own history
cannot be trusted to accuse the code — and it had been quietly laundering bad
conclusions for however long.
Now the suite copies the binary into a temp dir and seeds it from a golden
database (<target>.pristine.i64) that nothing ever writes back to. Every run
starts from identical bytes; the tracked target is never opened.
The golden copy is built once, on first run, by analysing and saving before any
scenario runs — so it costs one analysis rather than one per run. Rebuilt
automatically if the binary is newer.
Verified: two consecutive full runs both 209/0; targets/echo.i64 no longer
exists after a run; a deliberately corrupted targets/echo.i64 is ignored
completely (11/0 with junk in place, and the junk untouched afterwards); no temp
directories leak.
The other suites were already clean for the same reason, by different means:
test_blob_ui builds a throwaway binary, test_project_ui stages copies, and
test_thumb_ui deletes the .i64 before each phase because the T flag and the
segment's bitness are saved in it.
Diffstat (limited to '')
0 files changed, 0 insertions, 0 deletions
