Поиск указателей на текст в eboot.bin на примере Hotline Miami 2
В разделе для psp Эрик подробно расписывал, как посчитать относительный адрес смещния текстовой строки, зная абсолютный и найти казатель на него.
Интересует аналогичный алгоритм поиска для витовских ибутов с целью перевести некоторые строки, которые туда зашиты. Для примера можно взять eboot.bin из Hotline Miami 2, которую я русифицировал: https://mega.nz/#F!E4MAnQAT!yCyQQK2kwzUI_PK1nDIWfQ Хотелось бы доработать неполный авторский перевод, но для этого, как раз и нужно править eboot, а учитывая, что русский текст будет в utf-8, перемещать строки придётся в пустое место, т.к. их длина получится минимум в 2 раза больше, чем в оригинале. Для наглядности предлагаю взять строки: New game Continue Options поскольку они встречаются в самом начале. Также интересует, какой диапозон адресов можно использовать под текст, если строки могут лежать где угодно, то оптимальным было бы их переносить в область, где есть большие куски 0x00 и собирать в одном месте. |
lupus, пока заметил, что каждая новая секция начинается с заголовка Magik: 2D992982 и в следующей строке 2FF8FFFF
Пока башка не варит, ночью посмотрю - темнота, тишина и луна располагают :) |
Я пытался простым дедовским способом искать, без декомпиляции - зная абсолютное смещение, вычислить относительное таким макаром:
Код:
адрес абсолютного смещения строки -минус- размер заголовка SCE (0xA0) -минус- размер заголовка ELF (0x60) Код:
NEW GAME 0x0136e3a0 - 0x100 0x0136E29F Не уверен, что данный метод здесь применим. Теоретически, можно было бы написать софтинку, которая сама будет искать указатели, зная адреса начала 2+ строк, по разнице их смещений, но я совсем не умею кодить :/ |
Цитата:
Вообще размер заголовка записан по адресу 0х38 в ELF-файле, который начинается по адресу 0xF60, а там я вижу размер заголовка 0x80. Цитата:
|
Отрезал всё лишнее пред первым эльфом, считаю
Код:
NEW GAME 0x0136d3a0 - 80 0136D320 |
С использованием real-time debugger'а в ассемблере такие вещи надо искать. Может там поинтеры, может таблица, а может вообще в инструкцию вшита позиция строки.
|
riku.kh3, т.е. в текущей ситуации это не реально?
|
От игры зависит. Если текста очень много и он идет цельным блоком, то скорее всего должна быть таблица. Можно попробовать визуально в хексе поискать нарастающие 4-байтные значения, сравнивая разницу значений с расстояниями между строками.
Такие строки, как NEW GAME может быть трудно найти, если поинтер или инструкция указывающая на нее просто рандомно лежит далеко от таблицы. Конкретно в этом случае IDA Pro рефференс к этой строке NEW GAME не находит в коде, значит только дебаггером через брейкпоинт отлавливать (нужен DevKit и софт). |
по адресу 0x136e264 начинается блок текста, перед ним, предположительно, лежит пачка указателей по 4 байта, теперь понять бы, откуда начинать отсчёт и какой размер всего этого блока (указатели + текст), тогда, по идее, можно было бы пересчитать начало строк после правки.
Пока не пойму, оно ли это... |
Цитата:
Вообщем текст идёт блоками. Каждый текстовой блок начинается с хедера 2D992982 и следом приклеивается следующий текстовой блок с таким же хедером, прямо после последнего слова в предыдущем блоке. И так далее. Может пригодится... Если отрезать первый заголовок ELF, то в позициях:
|
Цитата:
|
По разниуе смещений посчитать бы как-то. Руками муторно...
|
Верно ли понимаю, что при помощи RinCheat http://wololo.net/talk/viewtopic.php?f=116&t=46982 можно сдампить содержимое озу и поможет ли это в поиске указателей?
|
Цитата:
Ну так ты выяснил, можно ли сдампить содержимое ОЗУ? |
Ещё не пробовал. Хочу другие проекты (перевод tales from space и перенос русика shovel knight) до ума довести, прежде чем здесь в дебри лезть.
|
С тех пор у нас появился правильный декриптор fagdec и потихоньку пилится эмулятор vita3k. Думаю, ещё через пару лет доделаем)
Edit#1: https://github.com/CelesteBlue-dev/P...iler-mod/build |
Текущее время: 02:05. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot
PSPx Forum - Сообщество фанатов игровых консолей.