24z-2: rendersnap2 v6 attempts band-object LUT capture (A/B/gamma) — ctx+0x540678 is curve data not object ptr; band-object array discovery is next session opener
This commit is contained in:
@@ -3482,3 +3482,13 @@ lvl растёт линейно с sens. Плато q≥2 на 49.9 — анал
|
|||||||
Между нашим lvl и законом нужна СТАДИЯ КОМПРЕССИИ уровня (насыщаемая),
|
Между нашим lvl и законом нужна СТАДИЯ КОМПРЕССИИ уровня (насыщаемая),
|
||||||
параметризованная по конфигу. Кандидат №1 — именно LUT 563a60 (дБ-домен,
|
параметризованная по конфигу. Кандидат №1 — именно LUT 563a60 (дБ-домен,
|
||||||
A/B упоры = насыщение!). Её декод = следующий мейлстоун.
|
A/B упоры = насыщение!). Её декод = следующий мейлстоун.
|
||||||
|
|
||||||
|
## ============ ДОПОЛНЕНИЕ 24z-2: попытка живого съёма A/B/γ — объект банды не найден пока ============
|
||||||
|
|
||||||
|
rendersnap2 v6 пытается читать цепочку [ctx+0x540678]→band→[+0x180]→sub→A/B/γ.
|
||||||
|
Результат: поля отсутствуют ⇒ [ctx+0x540678] указывает на ДАННЫЕ кривой
|
||||||
|
(массив float'ов), а не на объект банды. Адрес массива ОБЪЕКТОВ банд
|
||||||
|
(тех, что с [+0x180]-LUT и [+0x4198]-входом из 563a60) нужно найти отдельно:
|
||||||
|
кандидат — скан heap'а на структуры с валидным [sub+0x90]/[sub+0xc] паттерном,
|
||||||
|
либо трассировка инициализации (563a60 получает rcx=band obj — ловить её
|
||||||
|
аргументы при param-rebuild через rendersnap2-стиль STOP в момент загрузки).
|
||||||
|
|||||||
@@ -159,6 +159,21 @@ def main():
|
|||||||
sv = np.frombuffer(scal, dtype='<f4')
|
sv = np.frombuffer(scal, dtype='<f4')
|
||||||
store = {'fir_re': arr[0::2].copy(), 'fir_im': arr[1::2].copy(),
|
store = {'fir_re': arr[0::2].copy(), 'fir_im': arr[1::2].copy(),
|
||||||
'scal': sv.copy()}
|
'scal': sv.copy()}
|
||||||
|
# band-object LUT params: band1 ptr @[ctx+0x540678]; sub@[band+0x180]
|
||||||
|
pb = rd(ctx + 0x540678, 8)
|
||||||
|
if pb:
|
||||||
|
bandobj = struct.unpack('<Q', pb)[0]
|
||||||
|
if bandobj > 0x10000:
|
||||||
|
sb = rd(bandobj + 0x180, 8)
|
||||||
|
if sb:
|
||||||
|
sub = struct.unpack('<Q', sb)[0]
|
||||||
|
if sub > 0x10000:
|
||||||
|
fb4 = rd(sub, 0x18)
|
||||||
|
if fb4:
|
||||||
|
store['lut_A'] = struct.unpack('<f', fb4[0:4])[0]
|
||||||
|
store['lut_B'] = struct.unpack('<f', fb4[4:8])[0]
|
||||||
|
store['lut_G'] = struct.unpack('<f', fb4[12:16])[0]
|
||||||
|
store['lut_mode'] = fb4[16]
|
||||||
for off in SLOTS[1:]:
|
for off in SLOTS[1:]:
|
||||||
q = rd(ctx + off, 8)
|
q = rd(ctx + off, 8)
|
||||||
if not q:
|
if not q:
|
||||||
|
|||||||
Reference in New Issue
Block a user