mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
[GH-ISSUE #4245] [Feature] Propose CPU architecture and endianness candidates for headerless firmware blobs #1671
Open
opened 2026-10-16 21:08:49 +00:00 by bsakaguchi
·
1 comment
No Branch/Tag specified
main
codex/procedure-reference-stacked
release-please--branches--main--components--rea-agents
release-please--branches--main--components--rea-agents--release-notes
codex/kuna-independent-retry
codex/byte-search-overlay-coverage
codex/open-failure-target-receipt
codex/kuna-xref-evidence
codex/ghidra-ambiguous-procedure-recovery
codex/function-source-bundle
codex/trace-function-integration-prototype
codex/snapshot-source-closure
codex/recorded-evidence-array-pages
codex/evidence-recovery-redesign
codex/trace-feature-address-scope
codex/call-discovery-scope
codex/ghidra-literal-candidate-evidence
codex/decompile-directory-independent-retry
codex/retry-provenance-base
codex/value-flow-capability-experiment
codex/ghidra-containing-instruction
cursor/readme-discord-button-ef9f
dependabot/github_actions/actions/setup-node-7.1.0
dependabot/github_actions/actions/upload-artifact-7.0.2
dependabot/npm_and_yarn/npm-minor-and-patch-d8d97ce6df
codex/kuna-1989
fix/8559-native-ui-fixture-ownership
fix/8555-go-verifier-mcp-ownership
codex/provider-capability-recovery
fix/8642-rizin-target-stdin
codex/ghidra-memory-effect-scope
codex/ghidra-annotation-entry-selector
codex/ghidra-readonly-recovery
codex/ghidra-regex-verifier-recovery
codex/evidence-discovery-view-guidance
fix/8545-bulk-append-overflow
fix/8428-navigation-refusal-alternatives
codex/address-context-recovery
codex/matching-member-limitations
codex/unknown-scope-contract
codex/evidence-view-guidance
feat/8373-native-trace-views
codex/ghidra-snapshot-verifier-binding
codex/elf-export-visibility
codex/evidence-view-recovery
codex/native-reference-cli-help
codex/provider-candidate-observation-scope
codex/kuna-session-verification
codex/ghidra-switch-lifetime-guidance
codex/pseudocode-paging-discovery
codex/clarify-evidence-view-support
codex/kuna-xrefs-selector-recovery
codex/context-capacity-recovery
codex/evidence-closure-large-links
codex/same-function-evidence-identity
codex/ghidra-verifier-inspected-jdk
codex/audit-guided-workflows
codex/crash-prompt-retained-dossiers
codex/analysis-view-error-recovery
codex/kuna-verifier-target-selection
codex/ghidra-selected-project-call-coverage
codex/docs-native-analysis-scope
codex/ghidra-java-socket-boundary
codex/ghidra-retained-snapshot-verifier
codex/ghidra-search-inventory-facts
fix/8284-zero-argument-parameter-bindings
fix/8198-ui-action-handler-offset
fix/8257-elf-entry-label-identity
fix/8304-deferred-output-schema-projection
fix/8277-call-path-computed-target-uncertainty
fix/pr-8089-conflicts
fix/ci-static-duplicate-export
dependabot/npm_and_yarn/lint-staged-17.6.0
dependabot/github_actions/actions/download-artifact-8.0.2
dependabot/npm_and_yarn/write-file-atomic-8.0.0
dependabot/npm_and_yarn/canonicalize-5.1.0
dependabot/github_actions/actions/cache/restore-6.1.0
dependabot/npm_and_yarn/toon-format/toon-4.4.0
dependabot/github_actions/actions/deploy-pages-5.0.1
codex/review-fixes-pr-2403
codex/review-fixes-pr-2400
codex/process-terminal-width
codex/test-brittleness-cleanup
verify/7167-browser-connect-macos
fix/7167-browser-connect
feat/native-matching-allowance-setting
feat/browser-scenario-dry-run
test/managed-caller-parameters-20261024
codex/parser-fortythird-boundaries
fix/6926-pinvoke-platform-decorations-20261023
fix/6889-har-body-encoding-20261023
fix/6888-sqlite-schema-budget-20261023
fix/dependency-security-gates-6708
cursor/evidence-overwrite-rebase-b4ac
feat/4057-verify-native-exports
fix/windows-acl-observer-overhead-20261022
cursor/erlang-beam-restack-4476
cursor/pe-certificate-review-bf32
fix/6116-javascript-application-fs-errors
fix/6061-unmapped-runtime-script-unknown
feat/browser-scenario-summary
fix/pe-certificates
codex/verify-3407
cursor/rebase-5699
cursor/rebase-5352
cursor/rebase-5600
cursor/fix-cli-schema-omission-10a8
codex/audit-hopper-shutdown-reasons-20261021
fix/demangle-swift-omitted-record
fix/nib-boolean-value-types
cursor/cancellation-partial-observation-a5ac
fix/ib-object-limit-reasons
fix/electron-fuse-limit-advice
fix/kuna-doctor-dangling-cache
fix/fixed-budget-refusal-advice
fix/js-ipc-listener-dedup
fix/js-return-member-provenance
fix/dmg-integrity-retry-advice
fix/ida-doctor-readiness
fix/kuna-version-probe-output-drain
fix/legacy-swift-runtime-name-matching
fix/dylib-lazy-load-commands
fix/browser-scenario-startup-cancel
fix/swift-nested-punycode-classification
fix/compare-unselected-scopes
fix/objc-method-budget-coverage
fix/dmg-mounted-root-observations
audit/ci-tests-20261019-round2
release/6.7.0
fix/wabt-cleanup-retry-resolution
fix/electron-fuse-elf-pe-architecture
fix/native-plist-descriptor-ownership
fix/kuna-caller-cleanup-ownership
experiment/atomic-codemode-20261016
review/first-contributor-3776
fix/call-resolution-full-read-cycles
fix/member-mutation-selection-repeat
experiment/atomic-re-tools-20261015
perf/member-mutation-lazy-origins
perf/static-network-mutation-index
fix/hopper-startup-lifecycle
audit/3050-windows-proof-20261015
feat/windows-window-capture-2183
audit/3049-windows-proof-20261015
audit/3735-macos-fixtures-20261015
fix/batch-decompile-null-pseudocode
fix/kuna-inventory-honors-jobs
experiment/browser-codemode-tool-design-20261015
fix/hopper-clean-runtime-argv
codex/review-2049-27f1b367
review-fixes/pr-2787-routing
fix/3360-scoped-this-emitters
fix/3367-replaced-global-effects
fix/3838-compact-any-value-items
test/hopper-download-probe-20261015
codex/windows-runtime-creation-red-green-20261015
codex/windows-readonly-root-red-green-20261015
codex/windows-root-share-red-green-20261015
codex/exp-1685-win-mcp-startup
codex/bug-sweep-20261015
investigate/2190-windows-package-phases
investigate/3543-macos-cli-deadline
perf/3281-reverse-tools-feedback-quality
fix/3406-hopper-doctor-fixture
fix/3341-wrapper-require-test-context
fix/3301-owned-uninstall-fixtures
fix/3164-compiler-input-ownership
fix/pcap-cleanup-stdout-newline-20261014
perf/interface-builder-summary
codex/review-fixes-pr-1977
fix/ghidra-effective-jvm-platform
fix/docs-turkish-rust-link-20261013
fix/main-maintenance-ci-20261010
fix/recover-binary-session-process-effects
codex/review-fixes-pr-2457
codex/ci-required-cancellation-gate
fix/main-format-baseline-20261013
fix/setup-preserve-entry-fields
cursor/restore-main-checks-1ffc
fix/ghidra-bridge-hashmap-import
codex/shared-ci-jadx-json-default-20261013
codex/shared-ci-ghidra-test-groups-20261013
codex/shared-ci-java-fixture-format-20261013
codex/fix-intrinsic-invocation-boundaries
test/release-preflight-reusable-jobs
test/js-parameter-provenance-expectation
fix/linux-hopper-verification-current
test/2419-ghidra-elf-probe-size
followup/pr-1544-native-ida
codex/fold-pr-2230-contribution
docs/readme-responsible-use
fix/issue-2064
fix/issue-2050
fix/issue-2053
fix/issue-1968
fix/issue-1945
experiment/codemode-bridge-20261011
fix/tool-effects-negative-wording-1904-20261012
fix/1842-electron-interop-provenance
feat/recover-javascript-multi-input
refactor/website-i18n-prep
fix/nativeaot-pe-virtual-extent
fix/browser-verifier-ci-hang
fix/pe-resources-input-selection
docs/beginner-friendly-guides
docs/beginner-setup-guide
fix/javascript-analysis-worker-1563
fix/1649-ghidra-duplicate-names
fix/javascript-export-keys-integration-1369
test/maintenance-boundary-contracts-20261011
review/javascript-export-keys-1369
review/process-live-progress-1483
test/javascript-1495-growth-ratio
fix/ci-escape-timing
docs/normalized-terminal-geometry-1450
release/6.3.0
archive/release-6.3.0-pr1381
release/6.2.0
fix/electron-preload-dynamic-override
fix/javascript-self-referential-bundler-edges
release/6.1.0
cursor/grok-client-cherry-pick-0b56
feat/signature-posture
feat/dyld-shared-cache
feat/artifact-integrity-policy
feat/pkg-inventory
release/6.0.0
chore/sync-release-5.0.0
release/5.0.0
cursor/cloud-agent-node-787e
fix/javascript-xhr-open-endpoints
review/pr-711-realpath-fallback-wording
cleanup/replay-confinement
codex/test-suite-performance
codex/issue-foundations
codex/address-open-issues-2026-07-20
agent/javascript-vite-rollup-esbuild-adapters
agent/process-cleanup
agent/triage-integration
agent/unknown-commands-registry
feat/mcp-identity-metadata
morlvps/issue_cleanup
codex/installer-redesign
morl/roadmap-investigation-core
morl/roadmap-investigation-docs
release-please--branches--main--components--rea
rea-agents-6.8.0
rea-agents-6.7.0
rea-agents-6.6.0
experiment/atomic-codemode-wait-runtime-20261016
rea-agents-6.5.0
rea-agents-6.4.0
rea-agents-6.3.0
rea-agents-6.2.0
rea-agents-6.1.0
rea-agents-6.0.0
rea-agents-5.0.0
rea-agents-4.1.0
rea-agents-4.0.1
rea-agents-4.0.0
rea-agents-3.2.1
rea-agents-3.2.0
rea-agents-3.1.0
rea-agents-3.0.0
rea-agents-2.7.0
rea-agents-2.6.0
rea-agents-2.5.1
rea-agents-2.5.0
rea-agents-2.4.0
rea-agents-2.3.0
rea-agents-2.2.0
rea-agents-2.1.0
rea-agents-2.0.0
rea-agents-1.7.0
rea-agents-1.6.0
rea-agents-1.5.0
rea-agents-1.4.0
rea-agents-1.3.0
rea-agents-1.2.0
rea-agents-1.1.0
rea-agents-1.0.0
rea-agents-0.5.0
rea-agents-0.4.0
rea-agents-0.3.0
rea-0.2.1
rea-0.2.0
Labels
Clear labels
area: bridge
area: bridge
area: build
area: build
area: build
area: cli
area: domain
area: evidence
area: mcp
area: native
area: providers
area: runtime
area: server
area: setup
area: tests
bug
design
documentation
enhancement
enhancement
enhancement
experiment
help wanted
i18n
invalid
P0: critical
P1: high
P2: medium
P2: medium
P2: medium
P3: low
performance
provider-request
pull-request
Mirrored from GitHub Pull Request
question
roadmap
triage
No labels
area: bridge
area: bridge
area: build
area: build
area: build
area: cli
area: domain
area: evidence
area: mcp
area: native
area: providers
area: runtime
area: server
area: setup
area: tests
bug
design
documentation
enhancement
enhancement
enhancement
experiment
help wanted
i18n
invalid
P0: critical
P1: high
P2: medium
P2: medium
P2: medium
P3: low
performance
provider-request
pull-request
question
roadmap
triage
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set.
Reference
morluto/rea#1671
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @coygeek on GitHub (Oct 15, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/4245
Before submitting
Area
Native analysis or decompilation
Current limitation
An analyst who extracts a headerless image (a kernel or bootloader blob from a router dump, an RTOS flash image) must already know its CPU family and byte order before REA can analyze it.
open_binary format=raw-binaryrequires a caller-suppliedarchitectureandentry_point, anddocs/raw-binary.mdstates that the interpretation "is not inferred from a.binsuffix or from unrecognized bytes".inspect_firmware_regionspasses Binwalk's free-textdescriptionthrough without parsing any CPU facts (src/firmware/FirmwareReports.ts:150-164), and Binwalk 3.x has no opcode-based architecture scan.inspect_binary_layoutcovers ELF64 x86-64 only, andsearch_bytesneeds an open provider session, which already needs an architecture. Today the analyst leaves REA to guess the CPU with other tools or trial imports.Use cases
ih_arch, but REA does not surface it as a structured fact.e_machinevalues agree on the device's CPU, which also identifies the CPU of a sibling headerless kernel or bootloader blob.bx lr, AArch64ret, MIPSjr ra, PowerPCblr) indicate the instruction set and byte order with useful, but weaker, confidence.Desired outcome and success criteria
A read-only, path-based operation that accepts one local file and returns ranked CPU candidates without opening a provider session or changing
open_binary's explicit-choice contract. Success criteria:unknownwhen the source does not declare it), the detector that produced it, its confidence class, and Evidence locations as file-offset ranges.27 05 19 56, header CRC,ih_arch,ih_comp,ih_load, andih_ep, keeping the rawih_archbyte beside its name. The mapping follows U-Boot'sinclude/image.hnumbering, not Binwalk's description text.e_machinevalues are tallied through REA's existing ELF machine mapping. The result reports the counts, and reports "mixed" rather than a winner when no clear majority exists.open_binary format=raw-binaryarchitecture accepted today (currentlyx86,x86_64,arm,arm64,6502) and suggests those arguments without applying them.ih_comp), not a file-offset-0 mapping of the input.Expected interaction with targets
Read existing files or captured data
Target and scope details (optional)
Static byte inspection of one caller-selected local file. No execution, no extraction, no network, no writes beyond REA's normal Evidence retention. Non-goals: automatically choosing an architecture inside
open_binary, guessing base addresses, vector tables, or memory maps, and adding new raw-binary architectures, which is a separate decision.Verification available so far
I can suggest a sample or manual check
Verification details (optional)
Self-built samples are sufficient:
mkimage -A arm64andmkimage -A mipsuImages wrapping a small payload; a cpio archive holding several cross-compiled ELF executables for one CPU plus one outlier;objcopy -O binarytext sections from cross-compiled ARM, AArch64, MIPS LE/BE, and PowerPC objects; and random bytes as a negative control that must produce an explicit unknown. The census thresholds and the scan cap should be justified by measurement on those samples, perAGENTS.md's performance rules.Alternatives considered
inspect_firmware_regions: it would tie a pure-byte detector to Binwalk on Linux, and its output has a literalcoverage: "signature_scan".src/structures/uimage.rsin Binwalk compared with U-Bootinclude/image.h; source reading only, not observed by running Binwalk).open_binary: contradicts the documented caller-supplied contract and itslanguage_selection: caller-supplied-v1profile.cpu_recor Binwalk v2-A: these would add an unpinned dependency, and Binwalk v2's opcode signatures were not carried into Binwalk 3.Possible direction
A new session-free tool (for example
inspect_raw_architecture_candidates) in pure TypeScript, reusing the ELFe_machinemapping insrc/domain/binaryTarget.tsrather than adding a second table. Classify uImage and ELF facts as observed or derived, and the instruction census as inferred. A suggested detector order is a uImage header check, then an embedded-ELF majority vote (for example at least 75% agreement), then an opcode census (for example at least 10 hits and twice the runner-up) over a bounded prefix of the file, with the thresholds and the cap set by measurement. Validate the uImage header CRC, count only aligned instruction matches, and include Thumb, little-endian PowerPC, RISC-V, and Xtensa signatures alongside the ARM, AArch64, MIPS, big-endian PowerPC, and x86 ones.References
mainat0cc56493be(package 6.5.0):docs/raw-binary.md,src/domain/rawBinary.ts:11-17,src/firmware/FirmwareProvider.ts:297-306,src/domain/binaryTarget.ts:532-566.ih_arch, headerless, "detect/infer architecture/cpu/processor", "raw firmware", and "binwalk -A"; no existing proposal found.@dandgabr commented on GitHub (Oct 16, 2026):
Static triage: this proposal is a separate, session-free byte-analysis operation. The requested U-Boot
uImageand embedded ELF facts can be reported as observed/derived evidence with original file offsets; an opcode census remains an inference and should expose its counts, alignment, confidence class, runner-up and scan coverage. A negative result should be explicitunknownwith the detectors and coverage recorded.This should remain separate from the firmware-provider integrations in #4110.
inspect_firmware_regionscarries provider description text, and Binwalk-NG signature descriptions do not establish a structured CPU/endianness fact.open_binary format=raw-binaryshould continue to require caller-supplied architecture and entry point; candidate detection must not silently choose or open a target.Before implementation, the design should pin the U-Boot architecture mapping and ELF machine mapping to source, validate uImage header CRC and offsets, define measured thresholds/scan bounds with self-built positive and negative fixtures, and preserve the distinction between observed headers, derived tallies and inferred opcode candidates. No part of this capability is included in the current FACT, Unblob or Binwalk-NG work. Please treat it as its own scope/implementation decision under the contribution-scope gate.