Repository navigation
Conversation
|
THIS MESSAGE WAS GENERATED BY AN AUTOMATED PROCESS Validation record for head
Merge order: binaries#196, then the backward-compatible angr#6948 consumer, then CLE#789. Merging CLE first would expose its new exception-directory source to older angr versions. Re-keyed 2026-08-29 to head
When the The repair for that belongs on the What was red earlier, since the record did not say. Two runs at the previous head
2026-08-30: that run finished green, and the Attempt 1 is what the paragraph above was watching, and it failed on a different missing The What that leaves is a standing requirement rather than a fact about today: once the angr tree Measured at 2026-08-30T13:25Z, it does. This paragraph is timestamped because it has been wrong twice, in opposite directions, while The Re-keyed 2026-08-30 to head Measured at
The same two suites at Not run locally: the angr suite that Re-keyed 2026-09-02 to head CI at this head is green. Run 33582200386, event Merge order is unchanged: Re-keyed 2026-09-05 to head The conflict was The rebase left the patch where it was — 80 added and removed lines on each side, identical — and then one further change was made on top of it, so this is not a bare replay: Two corrections to the record above.
Public reproducers, added because the record only ever cited a fixture on an unmerged pull request. Both files are on
The merge order, measured rather than asserted. With angr master and
Hosted CI is re-running at this head; run 33582200386 above describes Re-keyed 2026-09-30 to head The rebase. One hunk conflicted, in The PE That also closes a hole this branch had. No real object was affected either way: across 1,030 objects carrying an Measured at this head, in a nix build of the branch against
|
|
Corpus decompilation diffs can be found at angr/dec-snapshots@master...angr/cle_789 |
|
THIS MESSAGE WAS GENERATED BY AN AUTOMATED PROCESS Dependency-aware CI is now green on the unchanged head The earlier run's macOS/Windows jobs used the GitHub now reports the PR |
|
Dear agent, can you please tell me what exact behaviors on which binary you are trying to fix, the intended behaviors of cle and angr, and how the current implementation in cle fails? |
|
THIS MESSAGE WAS GENERATED BY AN AUTOMATED PROCESS The reproducer is the stripped 32-bit MinGW PE CLE's intended behavior is to expose that FDE as angr's intended behavior is to treat a GNU FDE start as authoritative even when CFGFast has already assigned those bytes to an enclosing function. On the baseline, CFGFast finds the block at Current CLE never parses GNU The focused CLE regression is |
1ada205 to
89ae8c1
Compare
|
THIS MESSAGE WAS GENERATED BY AN AUTOMATED PROCESS Full function-hint state for the unnamed target at Before — PE GNU FDEs are not parsed and native unwind records use the wrong source identity: CLE baselineAfter — the GNU FDE and native records are distinct: with this change |
|
THIS MESSAGE WAS GENERATED BY AN AUTOMATED PROCESS Rebased onto cle master The conflict was the import block of The change itself did not move: comparing the branch's own diff before and after the rebase with context discarded gives a byte-identical set of added and removed lines. Validation at the new head: I also added the merge order to the description, which stated the dependency only as a |
bb0d2e9 to
2e72aa8
Compare
|
THIS MESSAGE WAS GENERATED BY AN AUTOMATED PROCESS
New head |
60e49e9 to
53b8596
Compare
|
THIS MESSAGE WAS GENERATED BY AN AUTOMATED PROCESS @ltfish — I answered this in August at #issuecomment-5448139941, but the answer leaned on a binary that only exists on the unmerged angr/binaries#196, so you could not run any of it. Here it is again on two files that are on The binary. What cle does now, and what it should do: import cle
o = cle.Loader("binaries/tests/i386/windows/known_patterns_wdk_ksud.exe", auto_load_libs=False).main_object
print(len(o.function_hints))
# cle master 0e77ade3: 0
# this branch: 81, every one FunctionHintSource.EH_FRAMEAll 81 lie inside The second half, the relabel. On Why that name matters to angr, rather than being cosmetic. Measured on that x86-64 PE, angr master,
1,824 functions added, 57 removed. That is a large behaviour change and it is the reason the description says this must not land ahead of angr#6948 — without it, the two addresses angr master asserts are not recovered, Where the unmerged fixture still earns its place. Neither public binary shows the case the change was originally written for: an FDE whose start CFGFast has already given to an enclosing function. On |
53b8596 to
9de1a5e
Compare
THIS MESSAGE WAS GENERATED BY AN AUTOMATED PROCESS
Problem
CLE does not read a PE's GNU
.eh_frameat all, and it labels native exception-directory recordsEH_FRAME, which is the name angr reserves for something else.Both halves reproduce on binaries already on
angr/binariesmaster, so this needs nothing unmerged to see:The
.eh_frameofknown_patterns_wdk_ksud.exeis not visible to a grep of its section headers: the name is nine characters, a header field is eight, so it is stored as/4and resolved through the COFF string table.The new fixture on angr/binaries#196 covers the case those two cannot: an FDE whose start address CFGFast has already assigned to an enclosing function. In it the wrapper at
0x401006tail-jumps to an unnamed six-byte function at0x40100awhose FDE is the only record that it is a function at all.Root cause
The PE backend never parsed GNU
.eh_frame. Its only function hints came from the native unwind directory, so downstream angr could not distinguish the precise GNU FDE start from lower-confidence native unwind entries.Fix
Parse GNU PE FDEs as
EH_FRAMEhints and classify native unwind records asEXCEPTION_DIRECTORY. This gives angr the source distinction needed to preserve an occupied authoritative boundary.This has a merge order: it must not land ahead of angr's pull request 6948. With this change and without that one, separating the two CLE hint sources turns all 4,219 exception-directory records of
tests/x86_64/windows/7995a0325b446c462bdb6ae10b692eee2ecadd8e888e9d7729befe4412007afbinto named function hints, and angr's existing assertion that0x140032fd3is not recovered fails. Land angr 6948 first, or land the two together.EXCEPTION_DIRECTORYis 4 rather than 3 because 3 isMACHO_FUNCTION_STARTS, which cle#810 added to this same class.Testing
test_gnu_eh_frame_function_hintsassertsFunctionHint(0x40100a, 6, EH_FRAME)on the angr/binaries#196 fixture, andtest_exception_directory_function_hint_sourcepreserves all 4,219 native hints asEXCEPTION_DIRECTORYon a binary already on binaries master. The coordinated angr regression preserves a separate function and decompilesreturn 42;. Validation: #789 (comment)sync: angr/angr#6948
sync: angr/binaries#196
session: sharpen