mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
[GH-ISSUE #4297] [Feature] Inspect Apple .ips crash reports as recorded-crash Evidence #1701
Open
opened 2026-10-16 21:09:14 +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#1701
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 16, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/4297
Before submitting
Area
Evidence, artifacts, or reconstruction
Current limitation
REA cannot read the crash reports that macOS and iOS write. Accept a caller-selected Apple
.ipscrash report (the JSON format Apple has used since iOS 15 and macOS 12) as recorded-crash Evidence: report its metadata, exception and termination facts, threads and binary images; normalize every frame to an image build UUID, architecture and image offset; join frames to a caller-opened Mach-O or dSYM whoseLC_UUIDmatches; and classify the crash deterministically from the fixed strings Apple documents. This would be the Apple child of roadmap #2357, whose recorded-crash children are the Linux AArch64 core profile (#2353, closed) and the Windows minidump request (#2355); neither covers Apple reports.An analyst holding a crash report from
~/Library/Logs/DiagnosticReportsor from a device wants to know which function in the binary faulted and why. REA cannot answer either question today. Measured with REA 6.5.0 (npx -y rea-agents@6.5.0, tagrea-agents-6.5.0, commit3b79af28e80785afce9f5998d8f03289402a1847) on macOS 27.0.1 (26A434) arm64 with Xcode 27.0 (27A266a) and Node.js v26.10.0: a self-built fixture that writes to address0x10producedrea-crash-fixture-<date>.ips. Its first line is a metadata object with stringbug_type"309"; the body reportsEXC_BAD_ACCESS,SIGSEGV, subtypeKERN_INVALID_ADDRESS at 0x0000000000000010, and frame 0 asimageIndex0,imageOffset824. Image 0'suuidequals the fixture'sLC_UUID(lowercase in the report, uppercase fromdwarfdump --uuid), andatos -arch arm64 -o ./rea-crash-fixture -l 0x100000000 0x100000338resolves that offset torea_fixture_fault (crashme.c:2). The release build'srea inspect-recorded-crash "$PWD/fixture.ips" --jsonreturnedcapability_unavailablewith "The initial real-verified pwntools artifact profile supports Linux x64 only."The refusal is not only a host gate. The tool's input is "Absolute filesystem path to a supplied Linux ELF core" (recordedCrash.ts); its contract describes only Linux ELF64 amd64 and AArch64 cores on a Linux x64 host profile (binaryDiagnosticsToolContracts.ts); the host gate is fixed text (PwntoolsDecoder.ts); and the Evidence format is hard-coded to
"elf"(RecordedCrashService.ts). A repository search ofsrc,bridgeanddocsfinds no handling of.ips,bug_typeorusedImages. The analyst therefore leaves REA to symbolicate withatosorxcrun crashlogand then copies addresses back by hand.Use cases
No response
Desired outcome and success criteria
.ipsfile without an open target and without launching anything. The report is JSON, so the result should not depend on the host OS or on pwntools; a Linux host and a macOS host should return the same Evidence for the same file.bug_typeas the string it is. Parse the remainder as the crash body only whenbug_typeis"309". Any other type, including"288"(stackshot), returns a typed unsupported outcome that names the type, with no partial crash result.procName,procPathas recorded,pid,parentProc,cpuType,translated),osVersion,exception(type,signal,subtype,codes,message),termination(namespace,codeas both the recorded decimal and hexadecimal,indicator, and any further members retained as recorded),faultingThread,threadsandusedImages. Keep keys the documentation does not list as raw recorded fields rather than dropping them.arch,imageOffsetin decimal and hexadecimal, the runtime addressbase + imageOffset, and whether the frame is the faulting instruction (frame 0) or a return address. Report each image'ssourceletter with its documented meaning (Pprocess,Sshared cache,Cshared cache library,Kkernel,Ukernel cache,Tkernel text exec,Aabsolute). An image with an all-zero UUID or a nullarchstays unknown and never joins.LC_UUIDof one of its slices: report the static address (__TEXTvmaddr plusimageOffset) and the containing function or symbol that REA's existing analysis already knows. Reject a join on UUID or architecture mismatch with an explicit reason. Symbol names printed inside the report are recorded as report claims and are not verified.0x8badf00dwatchdog,0xdead10cc,0xc00010ff);EXC_GUARDwithGUARD_TYPE_FDand its violation message, andEXC_GUARDwithGUARD_TYPE_MACH_PORTand one of the documented Mach IPC messages;EXC_BAD_ACCESSwhose subtype ends in(possible pointer authentication failure), reported as possible with the signed and stripped addresses and Apple's caveat attached; and dyld missing-library terminations. A report that matches no rule isunclassified, never guessed.Acceptance criteria
printf '__attribute__((noinline)) void rea_fixture_fault(volatile int *p){*p=42;}\nint main(void){rea_fixture_fault((volatile int *)0x10);return 0;}\n' > crashme.c && clang -g -O0 -o rea-crash-fixture crashme.c && ./rea-crash-fixture(the system writes~/Library/Logs/DiagnosticReports/rea-crash-fixture-<date>.ips): the result reportsbug_type"309",EXC_BAD_ACCESS,SIGSEGV, the faulting thread, and frame 0's image UUID equal todwarfdump --uuid ./rea-crash-fixture.rea_fixture_faultand frame 1 tomain, at the static addressesatos -arch arm64 -o ./rea-crash-fixture -l 0x100000000 <address>resolves to the same functions.clang -arch arm64e: register values above 2^53 inthreadState(one observed was0x8527000193ed4944) are returned exactly, in decimal and hexadecimal.printf 'int f(void){return 1;}\n' > lib.c && clang -dynamiclib -install_name @rpath/libreamissing.dylib -o libreamissing.dylib lib.c && printf 'int f(void);\nint main(void){return f();}\n' > usem.c && clang -o rea-dyld-fixture usem.c -L. -lreamissing -Wl,-rpath,@executable_path/nolib && rm libreamissing.dylib && ./rea-dyld-fixture: the dyld rule matches and names@rpath/libreamissing.dylib.2343432205;EXC_GUARDwithGUARD_TYPE_FD; a subtype ending in(possible pointer authentication failure)) match the watchdog, guarded-descriptor and possible-pointer-authentication rules; an unedited fixture A matches none of them and is not mislabelled.bug_typeis"288"returns the typed unsupported outcome, and a copy truncated inside the body returns a typed parse error; neither returns a partial crash result.Expected interaction with targets
Read existing files or captured data
Target and scope details (optional)
Affected area
inspect_recorded_crashor a sibling recorded-crash operation, its CLI command, MCP schema anddocs/recorded-crashes.md, and the join toinspect_machoslice identity (LC_UUID) and existing function or symbol lookup for an opened target.Non-goals
.crashtext reports, MetricKit payloads (MXCallStackTreeand the 27.xDiagnosticReporttypes), App Store Connect diagnostic logs and jetsam event reports. Each has its own grammar and is a candidate follow-up.mdfind) searches, or network symbol servers. Joins use only binaries or dSYMs the caller selected; matching dSYM support for Ghidra is tracked in #1193 and PR #2025.atos,xcrun crashlog, LLDB orCrashSymbolicator.py, or symbolizing images that live in the dyld shared cache (sourceSorC).Verification available so far
I can suggest a sample or manual check
Verification details (optional)
No response
Alternatives considered
xcrun crashlogandCrashSymbolicator.pysymbolicate a report against dSYMs, andatosresolves single addresses. They need Xcode, run outside REA's session, and produce text that is not Evidence linked to the opened binary..ipsto a Linux core so the existing tool accepts it is not meaningful: the report holds no memory segments or ELF notes.Possible direction
No response
References
.ipsextension." "The IPS file for a crash report contains two JSON objects ... extract the JSON for the metadata object from the first line. If thebug_typeproperty of the metadata object is309... you can extract the JSON for the crash report data from the remainder of the text."bug_typeis typed String, and "Type288, for instance, is a stackshot."imageOffset: "If you add this value to thebasevalue from the binary images list, you'll get the runtime memory address".uuid: "A build UUID that uniquely identifies the binary image".translatedmarks "a process with X86-64 instructions running translated under Rosetta". "JSON stores numeric values as decimal numbers."0x8badf00d(2343432205)": "The operating system's watchdog terminated the app."GUARD_TYPE_FDvalue in theException Subtypefield." Conforming to Mach IPC security restrictions: "The crash report has an exception type ofEXC_GUARD, and exception subtype ofGUARD_TYPE_MACH_PORT", followed by the list of message values such asTHREAD_SET_STATE.KERN_INVALID_ADDRESSexception subtype with an additional message on the end", and "An invalid memory access, where high-order bits are erroneously set, can look like a pointer authentication failure".termination.namespace"DYLD",indicator"Library missing"and areasonsarray whose first entry isLibrary not loaded: @rpath/libreamissing.dylib; the bodies also carry keys such assharedCache,codeSigningIDandinstructionByteStream; and fixture A's image list contains an entry with an all-zero UUID, nullarchandsource"A". The parser must therefore tolerate unlisted keys, and the dyld rule cannot rely only on the translated-text wording.atos,xcrun crashlogandCrashSymbolicator.py.d52a488changes only Evidence completion inRecordedCrashService.ts(the cited source files are otherwise unchanged); the format stays"elf", and main has no.ipshandling.@morluto commented on GitHub (Oct 26, 2026):
Thank you for the detailed report and fixture criteria. #6511 has landed
inspect_apple_ipswith lossless crash-report facts and classification, so it covers the offline inspection portion. I am keeping this request open because the requested UUID/architecture join to a caller-selected Mach-O or dSYM and function/symbol resolution were explicitly outside that PR; its validation also did not qualify live OS capture or symbolication. This assessment is from the issue and merged PR descriptions; no new provider run was performed.