Skip to content

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

Open
zardus wants to merge 1 commit into
masterfrom
feature/armel-go-boundserror
Open

Add an ARMEL Go fixture for stack-variable extent recovery#208
zardus wants to merge 1 commit 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 ac9902e6c66688bf8e628f04723ed24f17cb8ab8 against baseline 003e82a2bfa641530924055695b36cec8af483ab. 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

Rebased 2026-09-06; this record is re-keyed to the new head. The branch was replayed from 3de2c41a297606c45be7985aa09b3ae615424d61..f18eeac814ee480010bcd1e50320c4d729c275e2 onto binaries master 003e82a2bfa641530924055695b36cec8af483ab, giving ac9902e6c66688bf8e628f04723ed24f17cb8ab8: git range-diff marks every commit =, the two git diff <merge-base>...<head> outputs hash to the same object, and every path the branch touches has the same blob at the old and the new head, so master left those paths alone. The figures above therefore describe the same bytes on a new base. It moved because a pull request that pins this one is checked out by CI at this branch's tip rather than merged with master, so the consumer was building against a binaries tree missing fixtures that were already on master. angr/binaries runs no pull-request workflow, so there is no run at the new head to cite — check-runs and actions/runs report 0 there, as they do for every pull request in this repository.

session: sharpen

@zardus
zardus force-pushed the feature/armel-go-boundserror branch 2 times, most recently from b640b4e to 720c2a9 Compare August 30, 2026 04:50
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 f18eeac to ac9902e Compare September 6, 2026 05:41
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