From 953f58fd440e7117b2fd71a01c21bd0960e06382 Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Wed, 4 Mar 2026 15:35:57 -0800 Subject: [PATCH] notes for next RDI pass to support namespacing, support scope-based lookups for local-statics, support fully-qualified namespace name resolution, & simplify/merge RDI variable symbol types, & reduce a lot of size in RDIs! --- src/raddbg/raddbg_main.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/raddbg/raddbg_main.c b/src/raddbg/raddbg_main.c index 1b3bcfb3..b47a98d4 100644 --- a/src/raddbg/raddbg_main.c +++ b/src/raddbg/raddbg_main.c @@ -4,6 +4,20 @@ //////////////////////////////// //~ rjf: post-0.9.20 TODO notes // +//- namespace/locations/variables RDI pass +// [ ] RDI_Local, RDI_GlobalVariable, RDI_ThreadVariable -> RDI_Variable +// [ ] RDI_Variable gets RDI_ContainerFlags, and a container_idx +// [ ] RDI_Namespace can be a container, same as types/procedures +// [ ] If procedure-contained, then index goes to scope now, not procedure +// [ ] Location sections -> split by location kind, fixed tables for simple locations, one catch-all table for bytecode. +// [ ] Location kind -> can be thread-local offset, or module virtual offset, to enclose globals/tlocals cases +// [ ] Referring to one location -> kind * index +// [ ] Referring to many locations, based on scope offsets -> kind = BlockList; BlockList encodes a first/opl pair into Block table, each Block has scope_off_first/opl, location_kind, location_idx - but a block's location kind CANNOT BE BlockList +// [ ] RDI_Variable has location_kind, location_idx +// [ ] symbols only store their *partly-qualified name*, e.g. `x` for A::B::C::x +// [ ] default name maps look up *partly-qualified names* +// [ ] to match a *fully qualified name*, there needs to be a second kind of different lookup - instead of string-matching, we need to match against the *fully qualified names*. the maps must be built by hashing the *fully qualified name*, but redirecting to the symbol with the *partially qualified name*. this is to allow fully-qualified lookups, but avoid storing fully-qualified names. +// //- urgent fixes // [ ] (use msvc assert as an example) show fastfail exception info (code, name, etc.) - comes from ExceptionInformation @fastfail // [ ] stepping w/ spoofs & shadow stack enabled - writing spoof will send a stack buffer overrun event @shadow_stack_step