v2 dry-run produced correct hit counts but all %f field values printed as 0.000000 — including BP6 threshold which the decomp says must be 0.0871556997f (cos 85°). Root cause: cdb's MASM evaluator returns dwo(addr) as a 32-bit integer; .printf %f expects a 64-bit double; passing the integer to %f produces formatted-zero garbage. Fix: switch all float-reading expressions to @@c++(*(float*)addr). The C++ evaluator dereferences memory as a float pointer, returning a proper float that .printf %f formats correctly. Integer reads (%d) still use MASM dwo() — that works. For double-indirect (pointer args), the form is @@c++(*(float*)(*(unsigned int*)(@esp+N)+offset)) which reads the pointer at [esp+N], adds the offset, and treats the result as a float pointer. v2 capture preserved as retail-v2-zero-floats.log audit trail. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| architecture | ||
| audit | ||
| plans | ||
| research | ||
| superpowers | ||
| bugs.md | ||
| ISSUES.md | ||