diff --git a/handoff/BLOCKMAP_529fe0.md b/handoff/BLOCKMAP_529fe0.md index 18d23b8..5d08fe0 100644 --- a/handoff/BLOCKMAP_529fe0.md +++ b/handoff/BLOCKMAP_529fe0.md @@ -517,3 +517,22 @@ R@5407f8 = единичная нормировка (все 1.0000 в этом п Объясняет ВСЕ аномалии дальних бинов разом: наши дальние res слишком велики (нет спада), их lvl занижен, каты недобираются. Формула ВЕСА — ключ к кросс-конфиг параметризации. + +## ДОПОЛНЕНИЕ 24kk3: слот [ctx+0x540668] ПОЛИМОРФНЫЙ! + +Прямой проб во время рендера: [ctx+0x540668] содержит +`3fdbcd8940000000` = ДВА FLOAT (~0.434, 2.0), НЕ указатель! +(пробник probe_668.py; EIO на части чтений — слот мигрирует). + +### Следствия: +1. rendersnap2 пропускает слот 668 (ptr<0x10000 или мусорный ptr) ⇒ + во ВСЕХ новых захватах (sc_multi4b, sc_tt*, sc_q*, ...) НЕТ FIR-массивов. +2. Старые захваты rendersnap.py v1 ИМЕЛИ валидный FIR-указатель в эти + моменты (ловили фазу обработки). Данные старых phase*.npz про FIR — + валидны для своих моментов, но смешивать с новыми нельзя. +3. Все «FIR mag» анализы через этот слот зависят от ТОГО, в какой фазе + слот был пойман: указатель-на-буфер vs скаляры vs сброс. +4. Значения скаляров (~0.43, 2.0) — кандидаты: att/rel? dry/wet? g-компоненты? +### Статус +Канонический путь чтения ПРИМЕНЁННОЙ маски: слот [ctx+0x540678] (кривая +банды) — он стабилен и МАТЧИТ АУДИО в deep-фазах (±5%). diff --git a/scripts/probe_668.py b/scripts/probe_668.py new file mode 100644 index 0000000..fc49c11 --- /dev/null +++ b/scripts/probe_668.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import struct, subprocess, time, os, glob +def find_host(): + for p in glob.glob('/proc/[0-9]*'): + pid=int(os.path.basename(p)) + try: + cmd=open('/proc/%d/cmdline'%pid,'rb').read().replace(b'\0',b' ').decode('utf8','replace') + maps=open('/proc/%d/maps'%pid).read() + except Exception: continue + if 'soothe2' in maps and 'reaper' not in cmd: return pid + return None +subprocess.run("pkill -9 -x reaper; sleep 1; rm -rf /run/user/1000/yabridge-soothe2_x64-*",shell=True) +proc=subprocess.Popen(['/usr/bin/reaper','-nosplash','-ignoreerrors','-renderproject','/tmp/opencode/multi.rpp'], + stdout=subprocess.DEVNULL,stderr=subprocess.STDOUT) +t0=time.time();host=None +while time.time()-t0<30 and not host: host=find_host();time.sleep(0.002) +print('host',host,flush=True) +fd=os.open('/proc/%d/mem'%host,os.O_RDONLY) +ctx=0x2370040 +for k in range(40): + try: + b=os.pread(fd,8,ctx+0x540668) + v=struct.unpack('