mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 07:47:29 +00:00
[GH-ISSUE #3204] [Bug] Ghidra instruction incoming references include synthetic entry-point metadata #1141
Closed
opened 2026-10-15 18:31:27 +00:00 by bsakaguchi
·
2 comments
No Branch/Tag specified
main
release-please--branches--main--components--rea-agents
release-please--branches--main--components--rea-agents--release-notes
codex/procedure-reference-stacked
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#1141
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 14, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/3204
Before submitting
Area
Native analysis or decompilation
Observed behavior
Source inspection establishes that Ghidra-backed
inspect_native_instructioncollects synthetic entry-point references intoincoming_references, although the field's documented contract excludes them. The separatexrefscollector filters that reference class from the same incoming ReferenceManager query.This is a static-proof-confirmed defect. The real CLI attempt stopped at provider admission with
provider_unavailableand Ghidra diagnosticnot_configuredbecauseGHIDRA_INSTALL_DIRwas unset. It did not reproduce the real-provider output. A focused fake-backed MCP test observed that the production server/provider-parser path preserves both a supplied genuine READ reference and an illustrative entry-reference-shaped item. That test establishes downstream propagation, not Ghidra's actual reference creation, source-address spelling or reference-type spelling.Reproduction
Use a clean checkout at the revision below on supported macOS or Linux. Configure Ghidra 12.1.x and its documented Java/native-decompiler prerequisites, with
GHIDRA_INSTALL_DIRpointing to the extracted installation. These are the complete real-provider reproduction steps; verification did not complete them because Ghidra was not configured.Install the locked dependencies and build the CLI.
Create a one-byte x86-64 RET image and isolated CLI state directories.
Inspect the selected entry address. The raw-binary import maps file offset zero at
0x1000and seeds the entry function there. Wait for normal completed auto-analysis.Query incoming source addresses for the same target and address.
Compare
incoming_referenceswith thexrefssource-address list. Source inspection establishes that a synthetic entry-point reference supplied by Ghidra's ReferenceManager reaches the instruction array, whilexrefsomits it. Do not assume that the synthetic reference originates at0x1000or is a self-reference. Neither its concrete source address nor its type spelling was established by the verifier.Expected behavior
src/domain/native/nativeInstruction.ts:118-124definesincoming_referencesas static references to the exact queried code or data address, excluding synthetic entry-point references. An empty array means the provider examined the address and found no eligible references; null or omission means unavailable.docs/ghidra-provider.md:149also promises omission of synthetic entry-point references without actionable memory sources.Eligible references should retain their source and target addresses, reference type, operand index, access facts and provenance.
docs/raw-binary.md:32-52documents the supported raw architecture, entry and loader mapping used above.Impact and scope
Non-actionable synthetic metadata can reach callers as incoming-reference evidence at registered entry-point addresses, making the instruction result disagree with
xrefs. The supported impact is P2. The defect affects this reference class; verification did not establish severe harm, a general core-workflow failure or a security-boundary crossing.Callers that need genuine incoming source addresses can use
xrefs, whose collector explicitly filters entry-point references. It does not return the full typed reference objects, so it does not replace every use ofincoming_references.REA version
6.4.0 (main at
5830088520)Runtime and platform
Node.js v26.10.0; macOS arm64. No Ghidra version was observed because the provider was not configured. The documented real-provider reproduction requires Ghidra 12.1.x.
Target and artifact context
An inline-created, one-byte raw x86-64 image containing
c3, mapped at0x1000with the same address registered as its entry point. Normal completed Ghidra auto-analysis, no language override and no document selector are the intended conditions. The verifier's passing MCP test used the repository's existing fake Ghidra integration rather than a live engine.Interface
CLI
Earliest failure stage
Native analysis or reconstruction
Relevant output or evidence
Typed outcome or recovery expected
Return the typed
incoming_referencesarray with only eligible static references, preserving every genuine reference's complete facts. Exclude synthetic entry-point metadata without changing the meaning of outgoingreferencesor bare-addressxrefs. Keep the existing distinction between an examined empty set and unavailable coverage.For the entry fixture, exclude the synthetic reference and agree with
xrefson eligible incoming source addresses. A proposed restoration control is a raw image containinge8 01 00 00 00 c3 c3, mapped at0x1000: the direct CALL at0x1000targets the RET at0x1006, so inspecting0x1006must preserve that genuine call reference. This control was not executed with Ghidra during verification.Analysis or suspected cause
The following reasoning is source-derived at the stated baseline:
src/cli/coreNativeCommands.ts:224-253dispatches the public instruction command.src/ghidra/GhidraAnalysisProfile.ts:106-159,src/ghidra/GhidraProviderClient.ts:599-607,src/ghidra/GhidraLauncher.ts:647-681, andbridge/ghidra/ReaGhidraPrepareRaw.java:29-47connect the supported raw import toaddEntryPoint, disassembly and entry-function creation before analysis.bridge/ghidra/ReaGhidraBridge.java:425-452dispatches instruction inspection after completed analysis. Its incoming collector at:1338-1349passes every reference toaddReference; that helper at:3694-3701deduplicates without an entry-point eligibility check. Sorting does not remove the reference class.bridge/ghidra/ReaGhidraBridge.java:1230-1240serializes the reference, and:4443-4455serializes addresses without rejecting synthetic entry-point sources. In contrast,xrefsat:1392-1412and function-reference scans at:3663-3691explicitly rejectisEntryPointReference().src/ghidra/GhidraFunctionValues.ts:406and:445-496validate and preserve the result;src/ghidra/GhidraProviderClient.ts:855-862and:950-961deliver it as analysis evidence. The fake-backed MCP test confirms this downstream preservation only.scripts/lib/real-ghidra-compact-references.mjs:153-160explains the synthetic-entry distinction, and:180-199requires incoming-reference source-address parity withxrefs. These assertions were inspected, not executed.Additional context
Related closed feature issue #1245 and merged PR #1715 introduced typed incoming references; this report concerns the remaining violation of their synthetic-entry exclusion contract rather than a request to add that feature.
@N0zoM1z0 commented on GitHub (Oct 14, 2026):
Real Windows Ghidra 12.1.4 exposes a synthetic PE entry-point source in
inspect_native_instruction.incoming_referencesalthoughxrefs,procedure_referencesand function dossiers exclude entry-point references. This makes the compact incoming projection disagree with the address list and presentsEntry%20Point:0x0as an incoming source.Reproduced on main
500e32399with the originalscripts/verify-real-ghidra-windows.mjsand both source-owned x64/x86 EXE fixtures (ordinary user, two logical CPUs, Java 768 MiB, 3 GiB Job; no removed checks). Both fail the existing independent compact-reference parity assertion. x64 expected header sources0x1400000a8,0x1400000ac,0x140000194; actual prependsEntry%20Point:0x0. x86 likewise adds that synthetic source before0x4000a8,0x4000ac,0x400184. Natural failures, stopReason null, all owned processes settled. DLL controls pass their complete workflows.The producing boundary is the exact incoming collector in
bridge/ghidra/ReaGhidraBridge.java, which feeds every Reference directly toaddReference.xrefsandvisitReferencesalready omitisEntryPointReference(). The shared reference eligibility rule should own this policy; preserve real header DATA references and original reference metadata, order, coverage and unavailable-vs-empty semantics. Do not filter address display strings downstream or weaken the real parity oracle. Check affected full/compact/call-target consumers and snapshot freshness.Additional validation proposed: actual x64/x86 EXE reference workflows through CLI/MCP, unchanged source bytes and cleanup, retained DLL controls; record completed task elapsed/CPU/peak and output size. No target execution or mutation needed.
Full local receipts are retained under
/tmp/rea-windows-e2e-20261013/results/issue2903-main500; these paths are local evidence, not publicly downloadable artifacts.@morluto commented on GitHub (Oct 14, 2026):
Delivered on main in fffb07419.
Instruction incoming-reference projection admitted synthetic entry-point references. The Ghidra producer now uses the existing entry-point-reference filter consistently.
Validation: Source inspection of the shared bridge filter and complete qualification. No real Ghidra replay of the original target was performed; a proposed source-regex test was removed because it did not establish engine behavior. Full exact-revision qualification passed.