Back to firmware evidence

Real firmware. Checkable results.

Two supplied MicroPython v1.24.1 builds for NUCLEO_F411RE contain a controlled change: a 4,096-byte RAM array, an 8,192-byte constant table and a small function that uses them. On 3 October 2026, we checked both ELFs with GNU objdump and compared the independent section totals with FW Mem Guard's 0.3.3 guided-validation and engine source.

Download the guided exampleInspect verification results

ZIP SHA-256 · No board or compiler is needed to compare these files.

The totals agree exactly

Bytes, including allocated RAM reservations. GNU objdump totals and FW Mem Guard totals match for both builds.
MeasureBaselineCurrentDelta
Flash load images292,212300,452+8,240
RAM including reservations22,44026,536+4,096
RAM excluding reservations4,0088,104+4,096
Heap/stack reservations18,43218,4320

The RAM breakdown is calculated from the reference sections. FW Mem Guard reports the combined allocated RAM total; it does not measure runtime heap or stack peaks.

What makes this example useful

Try guided setup

  1. Download and extract the ZIP. Open its folder as a trusted workspace in VS Code with FW Mem Guard 0.3.3 or later.
  2. Run FW Mem Guard: Set Up / Update Project. Select the Map and ELF inside baseline, then the Map and ELF inside current.
  3. Select full FLASH (524,288 bytes) and RAM (114,688 bytes).
  4. Set Flash total/growth limits to 524288 / 8240 and RAM total/growth limits to 114688 / 4096. These are example thresholds in bytes.
  5. Save the project and run Compare Builds if needed. Expect PASS: the growth values exactly equal the allowed limits.
  6. Run FW Mem Guard: Edit Budgets. Lower only RAM growth from 4096 to 4095. Keep Flash total 524288, Flash growth 8240 and RAM total 114688.
  7. Choose Validate and Save: this automatically runs the comparison. Expect RAM growth only to exceed its budget: actual=4096, limit=4095, engine exit code 2.
  8. Restore RAM growth to 4096 with Edit Budgets and choose Validate and Save. The result returns to PASS.

Raw failure JSON · Raw console output · Restored PASS. Exit code 2 is the engine result; the extension displays the budget violation.

The ZIP contains English and Hebrew instructions, original checksums, the change patch, raw reference output and third-party notices. The built-in Run Demo command remains a separate manual-profile example that intentionally exceeds its budgets.

Inspect the reference

Baseline objdump output · Current objdump output · Verified section CSV · Machine-readable verification

The reference counts allocated RAM VMA ranges and loadable Flash LMA ranges. Debug sections and unused region capacity are excluded. The original supplied CSV was checked against fresh GNU objdump output before comparison with FW Mem Guard.

Rebuild and check the sections yourself

On 4 October 2026 we rebuilt both versions on Ubuntu 24.04 x86-64 using the pinned source and toolchain. All 18 allocated section address/size records matched the published reference, including the totals above. The independent checker also rejected a deliberate one-byte change to the reference.

Build instructions · Build script · Independent checker · Source change patch · Build receipt: versions and hashes

Rebuilt baseline objdump · Rebuilt current objdump · One-byte rejection evidence · Pinned submodules

The recipe keeps release optimization -Os -DNDEBUG, changes the release debug-information flag to -g3 for both builds, and reuses build-fwmg after applying the supplied patch. It does not use DEBUG=1. The ZIP includes the scripts and their adjacent reference/patch files.

Scope: this is an exact comparison of allocated section addresses and sizes, not a claim of byte-identical ELF files. The original four firmware files remain unchanged in the download; the rebuild produces separate artifacts.

Provenance and scope

The owner-supplied provenance identifies MicroPython commit ecfdd5d6…, NUCLEO_F411RE, arm-none-eabi-gcc 13.2.1 and -Os -g3. The four firmware files are unchanged from the supplied originals and retain symbols, debug information and build paths. Their checksums are published with the download.

This review ran the 0.3.3 source engine and guided Map/ELF validation code on the supplied artifacts. The added source rebuild is documented above. This review did not execute firmware on a board, run native Windows/Mac binaries, or interactively validate the installed VS Code interface. Earlier owner-reported Windows/WSL runs produced the same deltas; those are separate evidence.

Licenses and attribution

MicroPython's MIT license is included. The ZIP also includes micropython-lib's license and copyright notices for frozen asyncio, dht and onewire modules. The STM32 build also includes components under other terms: ST vendor/USB licenses, ARM CMSIS, library notices and GCC's Runtime Library Exception. Their notices and applicable full license texts are supplied in the ZIP; retain them when redistributing. In particular, ST-specific use restrictions apply. The complete firmware package is not relicensed under MIT. No upstream project or vendor endorses FW Mem Guard.

FW Mem Guard's private engine source is not part of this download. This is a third-party firmware example for analysis.