diff options
| author | blasty <blasty@local> | 2026-07-25 23:23:14 +0200 |
|---|---|---|
| committer | blasty <blasty@local> | 2026-07-25 23:23:14 +0200 |
| commit | 0a6fc6c215cc64b5da160ee755f7609913754c10 (patch) | |
| tree | caab3816eddef430dde4ddc2216f08773c741ebb /tests/test_project.py | |
| parent | projects phase 4: cross-binary back, linkage-guided pre-warm, project verbs (diff) | |
| download | ida-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 'tests/test_project.py')
0 files changed, 0 insertions, 0 deletions
