runtime capture: registry heartbeat decodes live DSP tables (WIN 0.540658, freq-axis@48k, per-bin weights), rtsnap_fast/findctx/rtchunk infra
This commit is contained in:
+33
@@ -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('<QQ',data,i)
|
||||
regs.append((lo,sz,data[i+16:i+16+sz]))
|
||||
i+=16+sz
|
||||
def readabs(addr,n):
|
||||
for lo,sz,body in regs:
|
||||
if lo<=addr<lo+sz and addr-lo+n<=sz:
|
||||
return body[addr-lo:addr-lo+n]
|
||||
return None
|
||||
known={0x2a72600,0x2111140,0x2cd0fc0,0x29f2280,0x29fa300,0x2a02340,0x2a0a3c0,0x2a12400}
|
||||
cands=[]
|
||||
t0=len(regs)
|
||||
for ri,(lo,sz,body) in enumerate(regs):
|
||||
if sz<0x541000: continue
|
||||
# check every 8-aligned offset for the +0x540658 ptr direct
|
||||
for off in range(0, sz-0x540660, 8):
|
||||
b=body[off+0x540658:off+0x540660]
|
||||
if len(b)<8: break
|
||||
p=struct.unpack_from('<Q',b)[0]
|
||||
if p in known:
|
||||
base=lo+off
|
||||
u24=readabs(base+0x24,4); u28=readabs(base+0x28,4)
|
||||
f40=readabs(base+0x40,0x20); f58=readabs(base+0x58,0x20)
|
||||
print('cand base=0x%x reg%d p=0x%x u24=%s u28=%s 40=%s'%(
|
||||
base,ri,p,
|
||||
struct.unpack('<f',u24)[0] if u24 else None,
|
||||
struct.unpack('<f',u28)[0] if u28 else None,
|
||||
[round(x,4) for x in struct.unpack('<4d',f40[:32])] if f40 else None))
|
||||
cands.append(base)
|
||||
print('total cand',len(cands))
|
||||
Reference in New Issue
Block a user