aboutsummaryrefslogtreecommitdiffstats
path: root/docs/RPC.md
diff options
context:
space:
mode:
authorblasty <blasty@local>2026-07-25 23:23:14 +0200
committerblasty <blasty@local>2026-07-25 23:23:14 +0200
commit0a6fc6c215cc64b5da160ee755f7609913754c10 (patch)
treecaab3816eddef430dde4ddc2216f08773c741ebb /docs/RPC.md
parentprojects phase 4: cross-binary back, linkage-guided pre-warm, project verbs (diff)
downloadida-tui-0a6fc6c215cc64b5da160ee755f7609913754c10.tar.gz
ida-tui-0a6fc6c215cc64b5da160ee755f7609913754c10.tar.xz
ida-tui-0a6fc6c215cc64b5da160ee755f7609913754c10.zip
xrefs: show project binaries that import this export
xrefs_to only ever sees the current database, so an exported function looks unused from the inside even when the rest of the project calls it. The import side of the phase-3 linkage index already knew better; nothing surfaced it. _foreign_importers appends those callers to the xrefs dialog. From libc's strrchr, with echo in the project: 0000C318 import [echo] strrchr Read from the on-disk index, so a caller appears whether or not its worker is resident. Choosing one carries a (binary, addr) payload instead of a bare address; _on_xref_chosen routes that through _switch_then_goto — the same path a project search hit takes — so it records a hop and Esc comes back. Only fires for a symbol this binary actually EXPORTS. A local name that happens to collide with some other binary's import is not a caller of ours, and without that check every common name (main, read, error) would sprout fictional callers. Names are compared after link_name(), so ELF versioning doesn't hide the match. Verified on a real echo+libc project: the dialog lists echo's call site, and selecting it switches to echo, lands on 0xc318 and leaves hops=['libc.so.6']. tests: +3 project UI — a symbol we don't export gets no cross-binary callers, the (binary, addr) payload jumps to the other binary, and it records the hop. 195/0 scenarios, 30/0 project UI.
Diffstat (limited to 'docs/RPC.md')
0 files changed, 0 insertions, 0 deletions