diff options
| author | blasty <blasty@local> | 2026-07-22 23:43:16 +0200 |
|---|---|---|
| committer | blasty <blasty@local> | 2026-07-22 23:43:16 +0200 |
| commit | d59b46715aa207bd0d7addadc33f00fb257d7fc5 (patch) | |
| tree | c2220e054b57e0c0eef7237dbb4e3ae583c69f4f /TODO | |
| parent | server+domain: heads walker + ListingModel — flat code/data listing (M1) (diff) | |
| download | ida-tui-d59b46715aa207bd0d7addadc33f00fb257d7fc5.tar.gz ida-tui-d59b46715aa207bd0d7addadc33f00fb257d7fc5.tar.xz ida-tui-d59b46715aa207bd0d7addadc33f00fb257d7fc5.zip | |
app: ListingView — virtualized flat code+data listing for regions (M2)
The real disassembly-listing view. ListingView is a line-virtualized
ScrollView (reusing ColumnCursor/SearchMixin/NavMixin) backed by
ListingModel, rendering code, data (db/dw/dd, strings, jump tables) and
undefined bytes interleaved with per-kind styling. Non-function regions now
open in it instead of the M0 DisasmModel stopgap.
Integration (IdaTui): a new `listing` active mode. _open_entry routes region
entries to ListingView; _show_active/compose add it; follow/xrefs/comment and
the c/p/u edit verbs handle it (define_func upgrades a region straight to the
function view); backslash reaches hex and returns via _code_mode (so leaving
hex from a region lands back on the listing, not a func view); Tab explains
there's no pseudocode for a region. rpc._active_widget learns `listing`.
Server fix (the important one): the `heads` walker now steps by get_item_end
instead of next_head. next_head SKIPS undefined bytes, so after undefining a
function its start address wasn't even a listing line and the cursor snapped to
the next defined item; stepping by item-end renders undefined bytes as `db ?`
lines (IDA-accurate) and makes navigation land exactly on any address —
essential for "go to unmarked bytes and hit c". Needs a supervisor restart.
Tests: region_define rewritten to assert the ListingView path + segment-wide
listing + p-upgrade; new listing_view scenario (data-segment listing renders
data heads, cursor reports head ea, backslash->hex->back). Pilot 115 pass / 1
pre-existing flaky (filter); rpc_smoke 29/0; test_domain 27/0.
Diffstat (limited to 'TODO')
| -rw-r--r-- | TODO | 16 |
1 files changed, 11 insertions, 5 deletions
@@ -17,11 +17,17 @@ hard: [ ] deal with PLT stubs and such (oh god here we go) [~] how to deal with non-function-body regions? -> we want to be able to do data/type definitions in .data etc. - -> M0 done: navigating to a non-function EA opens a flat listing (region) - instead of refusing; c/p/u edit verbs on the disasm view (define code / - function / undefine) with bump_items() cache invalidation + region->func - upgrade. next: M1 server `heads` walker + ListingModel (address paging), - M2 ListingView (code+data render), M3 data typing in .data. + -> M0 done: navigating to a non-function EA opens a flat listing instead of + refusing; c/p/u edit verbs (define code/function/undefine) with + bump_items() cache invalidation + region->func upgrade. + -> M1 done: server `heads` walker (walks item-ends so undefined bytes show + as `db ?` and arbitrary addresses land exactly) + ListingModel. + -> M2 done: ListingView — virtualized flat listing (code+data+undefined, + kind-styled), wired into nav/follow/xrefs/hex/edit-verbs. region views + now use it (not the DisasmModel stopgap). + -> next: M3 data typing in .data (`d`/make_data with a type prompt, struct- + typed data, string/dup coalescing for big undefined runs); M4 optionally + unify the function disasm view as a filtered listing. crazy: [ ] multi/split view ala ghidra? |
