From abf09a26cc4587bfe7e09f918a0305d4310e7a12 Mon Sep 17 00:00:00 2001 From: Matiq Date: Wed, 19 Aug 2026 20:06:14 +0300 Subject: [PATCH] runtime capture: registry heartbeat decodes live DSP tables (WIN 0.540658, freq-axis@48k, per-bin weights), rtsnap_fast/findctx/rtchunk infra --- findctx.py | 33 +++++++++ handoff/NOTES_CAPTURE.md | 65 ++++++++++++++++++ handoff/rtfreqaxis_44100.npy | Bin 0 -> 8320 bytes handoff/rtfreqaxis_48000_internal.npy | Bin 0 -> 8320 bytes handoff/rtwa_596.npy | Bin 0 -> 32900 bytes handoff/rtwb_404.npy | Bin 0 -> 32900 bytes handoff/rtwc_043.npy | Bin 0 -> 32900 bytes handoff/rtwd_956.npy | Bin 0 -> 32900 bytes handoff/rtwin_44100.npy | Bin 0 -> 32900 bytes handoff/rtwin_freq_44100.npy | Bin 0 -> 32900 bytes rtchunk.py | 50 ++++++++++++++ rtdeep2.py | 95 ++++++++++++++++---------- rtsnap_fast.py | 44 ++++++++++++ 13 files changed, 251 insertions(+), 36 deletions(-) create mode 100644 findctx.py create mode 100644 handoff/NOTES_CAPTURE.md create mode 100644 handoff/rtfreqaxis_44100.npy create mode 100644 handoff/rtfreqaxis_48000_internal.npy create mode 100644 handoff/rtwa_596.npy create mode 100644 handoff/rtwb_404.npy create mode 100644 handoff/rtwc_043.npy create mode 100644 handoff/rtwd_956.npy create mode 100644 handoff/rtwin_44100.npy create mode 100644 handoff/rtwin_freq_44100.npy create mode 100644 rtchunk.py create mode 100644 rtsnap_fast.py diff --git a/findctx.py b/findctx.py new file mode 100644 index 0000000..24cb4b7 --- /dev/null +++ b/findctx.py @@ -0,0 +1,33 @@ +import struct +data=open('/tmp/snap_all.bin','rb').read() +i=0; regs=[] +while i+16<=len(data): + lo,sz,=struct.unpack_from(' 1.0 (saturates; idx1024=0.68, idx2048=0.8)** — the FFT-conv window (0x540658) | +| [02] | 8193 | 0x29f2280 | 0 -> ~0.01 (levels/curve) | +| [03] | 8193 | 0x29fa300 | **0.596 -> 0.126** = matches known rwin_C0 | +| [04] | 8193 | 0x2a02340 | **0.404 -> 0.874** = 1-[03] complement | +| [05] | 8193 | 0x2a0a3c0 | 0.0435 -> ~0 (weight, small) | +| [06] | 8193 | 0x2a12400 | 0.9565 -> ~1.0 (1-[05]) | +| [07] | 8193 | 0x2aca740 | zeros + small negatives | +| [0d] | 2049 | 0x2cd0fc0 | **freq-axis 0..23988.3 Hz, spacing 11.713 = 48000/4096** → internal SR=48000 | +| [0e] | 8193 | 0x2cd9000 | 2.017 -> 0 (LUT/knee?) | +| [0f] | 16384 | 0x2ce9080 | same as [0e] doubled | +| [10] | 16384 | 0x2cf90c0 | 1.2914 -> 0 | +| [12] | 16384 | 0x2a62540 | 11.29.. (scattering) | +| [14]/[15] | 8193 | .. | first-fire IR? 0,0.022,0.104,0.084,0.018,0 | +| [17] | 32768 | 0x2d29140 | 0.9999 -> ~1 (ramp) | +| [19] | 32768 | 0x2d69200 | 1.2915 -> 1.0 | +| others | 32768/65536 | .. | ones / ramps (FFT plans, mirrors) | + +- Key numeric check: registry[03] head 0.5960761, idx1024 0.168, idx2048 0.1257 — + byte-identical to earlier GUI rwin_C0 (0.596 -> 0.126). Confirms registry IS the + authoritative per-bin weight source; tables are stable across sessions/SR. +- **FREQ-AXIS uses internal SR=48000 regardless of project 44100** (spacing 11.713). + This reconciles "rwin tables at 48k" even when rendering 44.1k projects. + +## Files saved (handoff/) +- `rtwin_freq_44100.npy` — WIN_freq (8193 f32): 0.5 -> 1.0 (this is live 0x540658 window) +- `rtfreqaxis_48000_internal.npy` — freq-axis (2048 f32, 0..23988.3, spacing 11.713) +- `rtwa_596.npy` — [03] 0.596->0.126 +- `rtwb_404.npy` — [04] 0.404->0.874 +- `rtwc_043.npy` — [05] +- `rtwd_956.npy` — [06] +- Full raw snapshot: /tmp/snap_all.bin (318MB, entries {lo,sz,bytes}), registry.txt list. + +## Method notes (repro) +- rtsnap_fast.py: spawn reaper render_long, find host (soothe2 in maps, not reaper), + sleep 6s (tables built), pread ALL readable maps chunked 8MB -> snap_all.bin. +- pread of large anon regions can EIO -> MUST chunk (8MB); whole-region pread loses data. +- Scan ~0.1s for 318MB once chunked; far cheaper than object-base scan. +- Earlier vptr-based (rtobj/rtdump2/rtall) and 44100-marker scans all failed because + the DSP object has NO static vptr match in a fresh render (host dies / fields live + only during audio) and ctor field +0x24 != 44100 live. The registry run is the + reliable beacon. + +## Remaining (for twin IIR attack/release per-bin) +- twin state A/B (342 double per-bin IIR states) still not uniquely located live; + short renders keep them ~0. They are NOT the registry tables. +- Next: render_long + capture at t=10-20s into sustain, then locate the per-bin + attack/release smoothing coefficients (0x540888/88c set, converted via ln(10)/20) + inside the arena near registry. diff --git a/handoff/rtfreqaxis_44100.npy b/handoff/rtfreqaxis_44100.npy new file mode 100644 index 0000000000000000000000000000000000000000..8eb3804cae427d33a502d413c5a81308d1927104 GIT binary patch literal 8320 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 literal 0 HcmV?d00001 diff --git a/handoff/rtfreqaxis_48000_internal.npy b/handoff/rtfreqaxis_48000_internal.npy new file mode 100644 index 0000000000000000000000000000000000000000..8eb3804cae427d33a502d413c5a81308d1927104 GIT binary patch literal 8320 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 literal 0 HcmV?d00001 diff --git a/handoff/rtwa_596.npy b/handoff/rtwa_596.npy new file mode 100644 index 0000000000000000000000000000000000000000..02b7082a569d9edb729207ef48d8e158bbf0c53e GIT binary patch literal 32900 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 literal 0 HcmV?d00001 diff --git a/handoff/rtwc_043.npy b/handoff/rtwc_043.npy new file mode 100644 index 0000000000000000000000000000000000000000..349613a67c7520c4370764b751eccad179d7485a GIT binary patch literal 32900 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 T5)cW91VjQN0g=G}Ti|~H_|f=P literal 0 HcmV?d00001 diff --git a/handoff/rtwd_956.npy b/handoff/rtwd_956.npy new file mode 100644 index 0000000000000000000000000000000000000000..f45336928f984ef92f114f2bb4dc4a9ef8321e2c GIT binary patch literal 32900 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 literal 0 HcmV?d00001 diff --git a/handoff/rtwin_44100.npy b/handoff/rtwin_44100.npy new file mode 100644 index 0000000000000000000000000000000000000000..6c1df9c46b91a056faf6abe93c2504d6c2046f07 GIT binary patch literal 32900 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 literal 0 HcmV?d00001 diff --git a/handoff/rtwin_freq_44100.npy b/handoff/rtwin_freq_44100.npy new file mode 100644 index 0000000000000000000000000000000000000000..6c1df9c46b91a056faf6abe93c2504d6c2046f07 GIT binary patch literal 32900 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 literal 0 HcmV?d00001 diff --git a/rtchunk.py b/rtchunk.py new file mode 100644 index 0000000..b6ceae0 --- /dev/null +++ b/rtchunk.py @@ -0,0 +1,50 @@ +import subprocess, os, glob, time, struct +def mem_open(pid): return os.open(f'/proc/{pid}/mem', os.O_RDONLY) +def find_host(proc, wait=120): + t0=time.time() + while time.time()-t0/dev/null; pkill -9 -f '[y]abridge' 2>/dev/null; sleep 1") +proc=subprocess.Popen(['/usr/bin/reaper','-nosplash','-ignoreerrors','-renderproject','/home/m/soothe-bt/dual300.rpp'], + stdout=open('/dev/null','w'),stderr=subprocess.STDOUT) +host=find_host(proc); print('host',host) +time.sleep(4) +fd=mem_open(host) +SIG=struct.pack(' 1 else '/home/m/soothe-bt/dual300.rpp' -BEACON = 0x182615608 # VA of phase_table_1024 (static .data) +BEACON = np.uint64(0x182615608) -def vst_base(pid): - lo = None - for line in open(f'/proc/{pid}/maps').read().splitlines(): - if 'soothe2' not in line: - continue - a = int(line.split()[0].split('-')[0], 16) - lo = a if lo is None else min(lo, a) - return lo +def get_maps(pid): + try: + return open(f'/proc/{pid}/maps').read() + except Exception: + return '' def readable_regions(pid): out = [] - for line in open(f'/proc/{pid}/maps').read().splitlines(): + for line in get_maps(pid).splitlines(): p = line.split()[0] lo, hi = int(p.split('-')[0], 16), int(p.split('-')[1], 16) - if 'vst3' in line: - continue # skip module itself out.append((lo, hi)) return out @@ -35,17 +31,28 @@ def find_beacon(pid): return [] res = [] for lo, hi in readable_regions(pid): - sz = (hi - lo) & ~7 + sz = hi - lo if sz <= 0 or sz > 0x200000000: continue - try: - buf = os.pread(mem, sz, lo) - except Exception: + if sz < 65536: continue - arr = np.frombuffer(buf, dtype=' 64: + break + if len(res) > 64: + break os.close(mem) return res @@ -57,26 +64,42 @@ def main(): host = None while time.time() - t0 < 60: for p in glob.glob('/proc/[0-9]*'): - try: - maps = open(f'/proc/{p}/maps').read() - except Exception: - continue - if 'soothe2' not in maps: - continue - host = int(os.path.basename(p)) - break + pid = int(os.path.basename(p)) + if 'soothe2' in (get_maps(pid) or ''): + host = pid + break if host: break - time.sleep(0.05) - print(f'host={host}') + time.sleep(0.01) + print(f'host={host}', flush=True) if not host: - proc.kill() + proc.wait(timeout=10) return - base = vst_base(host) - # allow module load: plugin init first mem = os.open(f'/proc/{host}/mem', os.O_RDONLY) t1 = time.time() - while time.time() - t1 < 50: + regs = [] + for line in get_maps(host).splitlines(): + p = line.split()[0] + lo, hi = int(p.split('-')[0], 16), int(p.split('-')[1], 16) + if 'vst3' in line or 'reaper' in line or 'soothe2' in line and 'rw' not in line.split()[1][:2]: + continue + if 'rw' not in line.split()[1][:2]: + continue + if hi - lo > 0x10000000: + continue + regs.append((lo, hi)) + print(f'{len(regs)} rw regions to capture', flush=True) + with open('/tmp/host_rw.bin', 'wb') as f: + for lo, hi in regs: + try: + buf = os.pread(mem, hi - lo, lo) + f.write(lo.to_bytes(8, 'little')) + f.write((hi - lo).to_bytes(8, 'little')) + f.write(buf) + except Exception: + pass + print(f'captured {os.path.getsize("/tmp/host_rw.bin")} bytes', flush=True) + while time.time() - t1 < 30: hits = find_beacon(host) ctxs = set() for p in hits: @@ -96,7 +119,7 @@ def main(): blk = os.pread(mem, 0x8000, ctx + 0x540000) open(f'/tmp/ctx_{ctx:x}_win.bin', 'wb').write(blk) break - time.sleep(0.2) + time.sleep(0.05) os.close(mem) try: proc.wait(timeout=5) diff --git a/rtsnap_fast.py b/rtsnap_fast.py new file mode 100644 index 0000000..31b5a97 --- /dev/null +++ b/rtsnap_fast.py @@ -0,0 +1,44 @@ +import subprocess, os, glob, time, struct, sys +def mem_open(pid): return os.open(f'/proc/{pid}/mem', os.O_RDONLY) +def find_hosts(): + hosts=[] + for p in glob.glob('/proc/[0-9]*'): + pid=int(os.path.basename(p)) + try: + cmd=open(f'/proc/{pid}/cmdline','rb').read().replace(b'\0',b' ').decode('utf8','replace') + maps=open(f'/proc/{pid}/maps').read() + except Exception: continue + if 'soothe2' in maps and 'reaper' not in cmd: + hosts.append(pid) + return hosts +os.system("pkill -9 -x reaper 2>/dev/null; pkill -9 -f '[y]abridge' 2>/dev/null; sleep 1") +proc=subprocess.Popen(['/usr/bin/reaper','-nosplash','-ignoreerrors','-renderproject','/home/m/soothe-bt/render_long.rpp'], + stdout=open('/dev/null','w'),stderr=subprocess.STDOUT) +# wait for host +t0=time.time(); host=None +while time.time()-t0<60 and not host: + hs=find_hosts() + host=hs[0] if hs else None + time.sleep(0.2) +print('host',host, flush=True) +time.sleep(6) # let render warm up, tables built +fd=mem_open(host) +out=open('/tmp/snap_all.bin','wb') +idx=open('/tmp/snap_all.idx','wb') +t0=time.time(); nreg=0; nbytes=0 +for line in open(f'/proc/{host}/maps').read().splitlines(): + p=line.split(); lo,hi=(int(x,16) for x in p[0].split('-')) + if 'r' not in p[1]: continue + a=lo + while a