Skip to content

docs: Control-Flow Recognition section and punpcklqdq clarification - #206

Merged
NaC-L merged 1 commit into
mainfrom
docs/control-flow-recognition
May 2, 2026
Merged

NaC-L merged 1 commit into
mainfrom
docs/control-flow-recognition

Conversation

@NaC-L

@NaC-L NaC-L commented May 2, 2026

Copy link
Copy Markdown
Owner

Summary

Doc-only follow-up to #205 closing two gaps that came up in the post-merge audit:

Verification

docs/-only — no build or test impact. Sanity-checked the rendered Markdown via read to confirm structure, and grep'd for \u2014-style escape leaks (none).

Why a separate PR

#205 had already merged when the user asked the doc-update question. Splitting the doc work into its own PR keeps the original PR's diff focused on code/tests and gives the doc text a clean review surface.

Two doc updates following #205:

ARCHITECTURE.md gains a 'Control-Flow Recognition' section covering
the lift_ret REAL_return / ROP-return classification, the ret-to-IAT
chain pattern (the Themida-virt mitigation that #195/#196/#205 built
out), the lift_jmp direct/indirect dispatch, and the Iced
operand-type quirk that motivates widening SSE accept sets. These
were all undocumented and the ret-to-IAT chain in particular is a
non-trivial structural rewrite that future maintainers should not
have to reverse-engineer from the source.

REWRITE_BASELINE.md's punpcklqdq line now reflects what actually
happened: the handler had been present for a while but silently fell
through to not_implemented for every site because Iced classifies
the source operand by bytes-actually-accessed (low 64), not by
physical XMM width. Fixed in #205 (ba20a39) by widening the accept
set; pre-existing oracle vectors now pass and gate future
regressions.

Doc-only change. Behavior unchanged.
@NaC-L
NaC-L merged commit 841d6bb into main May 2, 2026
7 checks passed
@NaC-L
NaC-L deleted the docs/control-flow-recognition branch May 2, 2026 17:54
NaC-L added a commit that referenced this pull request Sep 22, 2026
…te (#206)

Two doc updates following #205:

ARCHITECTURE.md gains a 'Control-Flow Recognition' section covering
the lift_ret REAL_return / ROP-return classification, the ret-to-IAT
chain pattern (the Themida-virt mitigation that #195/#196/#205 built
out), the lift_jmp direct/indirect dispatch, and the Iced
operand-type quirk that motivates widening SSE accept sets. These
were all undocumented and the ret-to-IAT chain in particular is a
non-trivial structural rewrite that future maintainers should not
have to reverse-engineer from the source.

REWRITE_BASELINE.md's punpcklqdq line now reflects what actually
happened: the handler had been present for a while but silently fell
through to not_implemented for every site because Iced classifies
the source operand by bytes-actually-accessed (low 64), not by
physical XMM width. Fixed in #205 (fcf2702) by widening the accept
set; pre-existing oracle vectors now pass and gate future
regressions.

Doc-only change. Behavior unchanged.
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.

2 participants