diff options
| author | blasty <blasty@local> | 2026-07-10 16:01:54 +0200 |
|---|---|---|
| committer | blasty <blasty@local> | 2026-07-10 16:01:54 +0200 |
| commit | ead2125f041649024ede36d0b4eb8e4c4c466e32 (patch) | |
| tree | 6853b40e97295c0e066096d13e9a036bed8a93dd /tests | |
| parent | pane: auto-start the ida-pro-mcp supervisor if it's down (diff) | |
| download | ida-tui-ead2125f041649024ede36d0b4eb8e4c4c466e32.tar.gz ida-tui-ead2125f041649024ede36d0b4eb8e4c4c466e32.tar.xz ida-tui-ead2125f041649024ede36d0b4eb8e4c4c466e32.zip | |
app: drop the Header (keep the Footer); rpc: function-scope xrefs_from
The clock/title Header added noise (and made screen() non-deterministic);
remove it from the app itself — the Footer stays. Layout shifts up a row;
scenario suite still 101 green.
xrefs_from on a function was near-useless: the server's xrefs_from is
address-scoped, so passing the entry ea only returned the fall-through
from the first instruction. For a function target it now returns
whole-body references from the decompiler (callees + string/data refs:
{to,name,string,is_func,type}); an explicit 0xADDR stays address-scoped.
Verified live: xrefs_from main now lists setlocale/getopt_long/sub_* etc.
rpc_smoke: 25 green.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/rpc_smoke.py | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/tests/rpc_smoke.py b/tests/rpc_smoke.py index 5d24978..fe2b79b 100644 --- a/tests/rpc_smoke.py +++ b/tests/rpc_smoke.py @@ -186,6 +186,20 @@ async def run(db): callee is not None and all("frm" in x for x in callee[1]), "no referenced function found" if callee is None else "") + # xrefs_from a function is whole-body (decomp refs), not just the entry: + # find a function that actually calls something. + caller = next((f["name"] for f in funcs if f["name"] == "main"), None) + xf = [] + for name in ([caller] if caller else []) + [f["name"] for f in funcs]: + xf = (await c.call("xrefs_from", target=name)).get("result", []) + if any(x.get("is_func") for x in xf): + caller = name + break + check("xrefs_from a function lists whole-body callees", + isinstance(xf, list) and len(xf) > 1 + and any(x.get("is_func") for x in xf) and all("to" in x for x in xf), + f"caller={caller} n={len(xf)}") + # --- modal select: open xrefs on the callee, pick the first site --- # if callee is not None: f, xr = callee |
