(22.04.2020 04:48)Berserker Wrote: Тогда патчим все смещения от этой большой структуры до трёх подструктур так, чтобы итогово смещение = новый адрес подструктуры - адрес начала большой старой структуры.
Вызываем RedirectMemoryBlock, как в зачёркнутом посте выше для каждой подструктуры.
Хорошо, к примеру была таблица по адресу 6666, с помощью RedirectMemoryBlock указываем, что она переместилась на 6667. Какой-нибудь левый скрипт использует следующий код:
!!VRy1:S1;
!!VRy1:+6665;
Что получится в итоге? 6666 или 6667?
И если честно, мне плохо понятен принцип работы RedirectMemoryBlock. Она проверяет значения при каждой математической операции? Смещения могут быть очень маленькими, что в итоге может превратить любой ERM-код в тыкву. Технического описания по RedirectMemoryBlock по-прежнему нету (соответственно, когда не знаешь последствий от использования данного вызова, сложно с ней работать, принцип чёрного ящика здесь не работает).
Так же могут быть одинаковые смещения, но по разным базовым адресам для совершенно разных данных - с этим что делать?
Так же может использоваться прямая адресация от базового значения, без использования адреса субтаблиц (т.к. адрес сразу вычисляется для определённой ячейки первой строки таблицы, а не её начала, чтобы использовать, например, в цикле).