Skip to content

Add an ARMEL Go fixture for stack-variable extent recovery - #208

Open
zardus wants to merge 2 commits into
masterfrom
feature/armel-go-boundserror
Open

Add an ARMEL Go fixture for stack-variable extent recovery#208
zardus wants to merge 2 commits into
masterfrom
feature/armel-go-boundserror

Conversation

@zardus

@zardus zardus commented Aug 27, 2026

Copy link
Copy Markdown
Member

THIS MESSAGE WAS GENERATED BY AN AUTOMATED PROCESS

Adds an ARMEL Go fixture for a decompiler regression test. runtime.boundsError.Error in this Go 1.27.0 linux/arm binary drives an ARM32 register-offset store whose index register may hold a .rodata address; the ssailification traversal pairs the two and models the result as an implausibly large stack variable that swallows the surrounding frame.

The repository already has ARM32 ELFs and Go binaries, but no Go built for ARM32, so this case needs a new fixture rather than an existing one.

Provenance and licensing are recorded beside the binary: the generated program source is MIT, and the statically linked Go runtime and standard library are BSD 3-Clause.

Consumed by angr/angr#6992
Validation: #208 (comment)

session: sharpen

@zardus

zardus commented Aug 27, 2026

Copy link
Copy Markdown
Member Author

THIS MESSAGE WAS GENERATED BY AN AUTOMATED PROCESS

Validation record for head c1fcfbb3fa078e1d413b00844f5b268d94b81cd8. This pull request adds one binary and the provenance note beside it, and contains no code and no test, so there is no suite to run. It is validated by reading the committed artifact back out of the repository and checking it against what the note claims.

  • Artifact: tests/armel/decompiler/errorpaths_go, blob 1986865a3538aa4d520a8d753cc301c6ad0d4bad, 1,471,656 bytes, mode 100755 — the size and mode the note records
  • SHA-256 of the committed blob: a954af2c614288d6d5985c2bec00bcc0f46d8bd96d4a34eb868e42d15d9cf875, matching the value recorded in LICENSE.errorpaths_go.md
  • ELF header, read from that blob rather than from the note: 32-bit, little-endian, e_type 2 (EXEC), e_machine 40 (ARM), e_flags 0x5000002 — EABI version 5 with neither float-ABI flag set, which is why it loads as ARMEL and not ARMHF
  • Licensing, as recorded beside the binary: the generated program source is MIT; the statically linked Go runtime and standard library are BSD 3-Clause, linked from the go1.27.0 tag. Nothing here is redistribution-restricted
  • Fixture target: runtime.boundsError.Error at 0x2744c, which is Go runtime code
  • Not reproduced: the recorded recipe GOOS=linux GOARCH=arm go build -trimpath -ldflags="-s -w" was not re-run and the output was not compared byte for byte against the committed file. So this record asserts that the committed binary is what the note describes, and does not assert that the command reproduces it on another machine
  • Consumer: Bound stack variable extents at a size the ssailification traversal can afford angr#6992 , whose regression test loads this fixture. That pull request's CI resolves this one — its ci / Build fetched refs/pull/208/head, and its coverage job logged checking out angr/binaries at the same ref — and every check on it is green

session: crazybins

@zardus
zardus force-pushed the feature/armel-go-boundserror branch from c1fcfbb to b640b4e Compare August 29, 2026 08:08
runtime.boundsError.Error in this Go 1.27.0 linux/arm binary drives an ARM32
register-offset store whose index register may hold a .rodata address, which the
ssailification traversal models as an ~800 KB stack variable.
@zardus
zardus force-pushed the feature/armel-go-boundserror branch from b640b4e to 720c2a9 Compare August 30, 2026 04:50
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