diff options
| author | blasty <blasty@local> | 2026-07-22 23:29:26 +0200 |
|---|---|---|
| committer | blasty <blasty@local> | 2026-07-22 23:29:26 +0200 |
| commit | 5878bc98590335190cd0e9a82400b3acae8ffad3 (patch) | |
| tree | 89c070add9a560186c7254efd7d31287e1ae8c82 /docs/RPC.md | |
| parent | app: non-function regions — open a flat listing + c/p/u edit verbs (M0) (diff) | |
| download | ida-tui-5878bc98590335190cd0e9a82400b3acae8ffad3.tar.gz ida-tui-5878bc98590335190cd0e9a82400b3acae8ffad3.tar.xz ida-tui-5878bc98590335190cd0e9a82400b3acae8ffad3.zip | |
server+domain: heads walker + ListingModel — flat code/data listing (M1)
The keystone for a real disassembly-listing view (unlike DisasmModel, which
is one function, code-only). Two pieces:
server/patch_server.py: inject a `heads` tool. It walks item heads over a
segment with next_head/prev_head and renders each via generate_disasm_line,
so it returns a flat listing where code, data (db/dw/dd, strings, jump
tables) and undefined bytes all appear as typed rows {ea,kind,size,text,name}.
Unlike `disasm` (code-only, bails at the first data byte) it shows the whole
segment. Address-paged: chain forward via cursor.next, page up with back=true
(returns the N heads ending before addr, in forward order, + cursor.prev).
domain.py: ListingModel — a lazily-grown, segment-scoped head index
(FunctionIndex-style forward paging via cursor.next; line index == position
in the walked list). ensure_ea() gives random access to an address (resolving
a mid-item byte to its containing head). New Head dataclass, Program.listing()
(cached per segment) + segment_bounds(); section_of() now derives from it;
bump_items() clears the listing cache too.
Verified live: heads renders strings/jump-tables/unknown correctly, forward
chaining + back-paging work; ListingModel walks echo .text (5036 heads,
~276ms) with cached windows and mid-item address resolution. tests/test_domain
gains a [listing] section (27 passed). Pilot hex/region_define/disasm_nav green.
Note: adding a server tool needs a supervisor restart (workers respawn).
Diffstat (limited to 'docs/RPC.md')
0 files changed, 0 insertions, 0 deletions
