Berserker
Posts: 16657
|
1) Выделить память динамически (VirtualAlloc | malloc | new | GetMem in Delphi) или статически uint8_t newStruct[1000];
2) Пропатчить все обращения в коде к старому адресу структуры на новый.
Найти все обращения к структуре не просто. Olly Debugger 1 — ПКМ на команде ≠ Search For — All Constants — вводим базовый адрес структуры.
Или нажимаем на строку с командой и обращением к структуре, а затем ПКМ — Find all references to — Address constant.
Но это только часть. Если есть обращение к N-ному элементу структуры, то компилятор заранее рассчитывает адрес как базовый + индекс элемента * размер элемента.
Тут, возможно, ПКМ в IDA и что-нибудь вроде find all x-references. Может, комрады подскажут. Патчить нужно соответственно, на новый адрес + (адрес в коде - старый адрес).
3) Уведомить Эру, что структура перенесена.
RedirectMemoryBlock (старый адрес структуры/массива, старый размер всего массива структур/структуры, новый адрес структуры/массива).
Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
|
|
03.09.2022 11:35 |
|