23c: negative feasibility — symmetric log-domain convolution cannot reproduce dual skirt geometry (best 0.94dB err at absurd 324-bin width); narrows mechanism to non-symmetric ops / true bands[] input / temporal coupling; capture recipe for DESIGN-input dump documented
This commit is contained in:
@@ -2271,3 +2271,19 @@ cut@500=10.32 дБ const ∀q; @2000=11.82 @q=0.5; Δcut≈2.25·(−ln res).
|
|||||||
гейт corpus --vs-bridge + контрольные числа dual.
|
гейт corpus --vs-bridge + контрольные числа dual.
|
||||||
3. ptrace-эскалация ТОЛЬКО если численная репликация не сойдётся: цель —
|
3. ptrace-эскалация ТОЛЬКО если численная репликация не сойдётся: цель —
|
||||||
брейкпоинт в момент param-change (init-окно хоста), а не рендер.
|
брейкпоинт в момент param-change (init-окно хоста), а не рендер.
|
||||||
|
|
||||||
|
### 23c (короткое): феасибилити log-свёртки — ОТРИЦАТЕЛЬНЫЙ результат
|
||||||
|
На живой кривой R@0x5407f8 (dual q=0.5): подбор ОПТИМАЛЬНОЙ симметричной
|
||||||
|
гаусс/бокс-свёртки в log-домене (ширина до 1500 бинов, свободный аффинный сдвиг,
|
||||||
|
точное совпадение @bin43=10.32 дБ) даёт минимум ошибки на bin171 ≈ 0.94–1.10 дБ
|
||||||
|
при ширине ~314–324 бина (~3.7 кГц) — такая ширина уничтожает избирательность
|
||||||
|
нотча на всём остальном корпусе. Вывод: механизмы класса «свёртка log-маски с
|
||||||
|
симметричным ядром» геометрию dual НЕ воспроизводят (расширяет теорему 22x с
|
||||||
|
поточечных законов на симметрично-свёрточные). Остаются: (а) вход bands[i] у
|
||||||
|
DESIGN ≠ захваченные кривые (768/788/7f8 — возможно, GUI/init-версии);
|
||||||
|
(б) асимметричные/структурные ops (cepstral-liftering класс); (в) темпоральный
|
||||||
|
кросс-фрейм механизм. Решающий недостающий факт — ИСТИННЫЙ массив bands[0] в
|
||||||
|
момент вызова DESIGN; рецепт добычи: seize главного треда yabridge-host в момент
|
||||||
|
ПОЯВЛЕНИЯ pid (ppid=reaper, comm ещё 'wine'), INT3 на 0x1802a24c0/0x1802fa420,
|
||||||
|
CONT, дамп rcx/rdx на хите (скрипт fnall.py готов, нужен только ранний захват —
|
||||||
|
нынешний finder по maps опаздывает на init-бурст <5 мс).
|
||||||
|
|||||||
+29
-4
@@ -13,6 +13,7 @@ import json
|
|||||||
import os
|
import os
|
||||||
import signal
|
import signal
|
||||||
import struct
|
import struct
|
||||||
|
import numpy as np
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
@@ -51,14 +52,23 @@ def pt(req, pid, addr=0, data=0):
|
|||||||
|
|
||||||
|
|
||||||
def find_host():
|
def find_host():
|
||||||
|
# fastest signal: any non-reaper child of a reaper process
|
||||||
|
reapers = []
|
||||||
|
for p in glob.glob('/proc/[0-9]*'):
|
||||||
|
try:
|
||||||
|
cmd = open(f'/proc/{p}/cmdline', 'rb').read()
|
||||||
|
if b'reaper' in cmd and b'yabridge' not in cmd:
|
||||||
|
reapers.append(int(os.path.basename(p)))
|
||||||
|
except Exception:
|
||||||
|
continue
|
||||||
for p in glob.glob('/proc/[0-9]*'):
|
for p in glob.glob('/proc/[0-9]*'):
|
||||||
pid = int(os.path.basename(p))
|
pid = int(os.path.basename(p))
|
||||||
try:
|
try:
|
||||||
cmd = open(f'/proc/{pid}/cmdline', 'rb').read().replace(b'\0', b' ').decode('utf8', 'replace')
|
st = open(f'/proc/{pid}/stat').read().split()
|
||||||
maps = open(f'/proc/{pid}/maps').read()
|
ppid = int(st[3])
|
||||||
except Exception:
|
except Exception:
|
||||||
continue
|
continue
|
||||||
if 'soothe2' in maps and 'reaper' not in cmd:
|
if ppid in reapers and pid not in reapers:
|
||||||
return pid
|
return pid
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@@ -176,7 +186,22 @@ def main():
|
|||||||
rec = dict(ctx=regs.rcx, a2=regs.rdx, cnt=regs.r8 & 0xffffffff,
|
rec = dict(ctx=regs.rcx, a2=regs.rdx, cnt=regs.r8 & 0xffffffff,
|
||||||
r9=regs.r9 & 0xffffffff, ret=ret,
|
r9=regs.r9 & 0xffffffff, ret=ret,
|
||||||
rbx=regs.rbx, r12=regs.r12, r13=regs.r13,
|
rbx=regs.rbx, r12=regs.r12, r13=regs.r13,
|
||||||
r14=regs.r14, r15=regs.r15, rsp=regs.rsp, tid=pid)
|
r14=regs.r14, r15=regs.r15, rsp=regs.rsp, tid=pid,
|
||||||
|
dump_in=[], dump_out=[], dump_r14=[], dump_rbx=[])
|
||||||
|
# dump arrays referenced by registers (process is stopped)
|
||||||
|
fdm = os.open(f'/proc/{host}/mem', os.O_RDONLY)
|
||||||
|
|
||||||
|
def rdarr(ptr, n=2049):
|
||||||
|
try:
|
||||||
|
b = os.pread(fdm, n * 4, ptr)
|
||||||
|
return np.frombuffer(b, dtype='<f4').astype(np.float32).tolist()
|
||||||
|
except OSError:
|
||||||
|
return []
|
||||||
|
rec['dump_in'] = rdarr(regs.rcx)
|
||||||
|
rec['dump_out'] = rdarr(regs.rdx)
|
||||||
|
if FN != 0x18052dbc0:
|
||||||
|
rec['dump_r14'] = rdarr(regs.r14)
|
||||||
|
os.close(fdm)
|
||||||
log.append(rec)
|
log.append(rec)
|
||||||
hits += 1
|
hits += 1
|
||||||
if hits <= 20:
|
if hits <= 20:
|
||||||
|
|||||||
Reference in New Issue
Block a user