Список форумов shedevr.org.ru shedevr.org.ru
Группа перевода приставочных игр "ШЕДЕВР"
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Поинтеры и глобальные сдвиги

 
Начать новую тему   Ответить на тему    Список форумов shedevr.org.ru -> Базовый ромхакинг
Предыдущая тема :: Следующая тема  
Автор Сообщение
Deathless



Зарегистрирован: 30.10.2005
Сообщения: 14

СообщениеДобавлено: Вс Дек 19, 2010 11:24 am    Заголовок сообщения: Поинтеры и глобальные сдвиги Ответить с цитатой

Такое дело - если я не ошибаюсь, вопрос поинтеров почти всегда ассоциируется с поинтерами на текст. А что насчет тех случаев, когда требуется найти поинтеры для тех данных, которые связаны с указанием на блоки данных (где, например, находится блок обработки событий)? Если я вставляю некоторую дополнительную информацию в середину файла, это обязательно влечет за собой то, что вся остальная инфа, которая следует за данным участком, будет смещена, а ведь там есть и другие, нетекстовые области. И ладно, если б нужно было поправить лишь один байт (нашел бы методом тыка), но ведь их там может быть десятки, а то и сотни разбросанных по всему файлу.

Я сейчас разбираюсь с DS игрой, где требуемая для меня информация расположена в парных файлах (для каждого крупного фрагмента игры выделяется по файлу со скриптами и файлу с диалогами для данного скрипта). В скриптовом файле требуется поправить одновременно два участка памяти - первый отвечает за указатели на текст в диалоговом файле, а второй отвечает за сами скрипт событий, среди которых и вывод диалогов. И если добавление посторонних (дополнительных) скриптов для вывода новых диалогов в блоке с событиями не оказывает негативного влияния (т.к. он находится почти в конце файла), то расширение первого, связующего, блока влечет за собой сбой. Вот и думаю, как бы вычислить расположение тех участков в скриптовом файле. Здесь у меня пока нет никаких идей.

Заранее извиняюсь, если этот вопрос банален и освещался везде, где это возможно, и лишь ленивый не прочтет об этом сам. Но у меня есть маленькое оправдание в том, что сейчас голова перегружена другой проблемой по взлому, которую нужно домыслить и закодить, пока не запутался окончательно. Если я займусь сейчас чтением документации, то я банально могу сбиться и потратить много времени, чтобы снова войти в колею.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Гость






СообщениеДобавлено: Вс Дек 19, 2010 1:29 pm    Заголовок сообщения: Ответить с цитатой

А на кой тебе раздвигать блоки? Если уж так надо увеличить один из блоков - перенеси его в конец (не трогая остальных данных) и будет тебе щасье.
Вернуться к началу
Dr. MefistO



Зарегистрирован: 28.03.2006
Сообщения: 189
Откуда: Беларусь

СообщениеДобавлено: Вс Дек 19, 2010 1:43 pm    Заголовок сообщения: Ответить с цитатой

А если игра отслеживает контрольные суммы данных блоков, или их размеры?
_________________
Metal is my life...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
АнС
RRC2008
RRC2008


Зарегистрирован: 08.11.2003
Сообщения: 2818

СообщениеДобавлено: Вс Дек 19, 2010 2:16 pm    Заголовок сообщения: Re: Поинтеры и глобальные сдвиги Ответить с цитатой

Deathless писал(а):
Такое дело - если я не ошибаюсь, вопрос поинтеров почти всегда ассоциируется с поинтерами на текст.


Это только потому, что ромхакинг почти всегда ассоциируется с любительским переводом. А по сути нет, любые ресурсы удобнее держать в одном месте и для быстрого доступа использовать таблицу поинтеров (смещений от начала структуры). Во многих PC-играх ещё с начала 90-х практикуется помещение всех игровых данных в один файл-контейнер, в начале которого хранится таблица смещений (поинтеров) на каждый блок.


Deathless писал(а):
А что насчет тех случаев, когда требуется найти поинтеры для тех данных, которые связаны с указанием на блоки данных (где, например, находится блок обработки событий)?


Всё то же самое - последовательно определяешь размеры нескольких блоков, следующих друг за другом, и ищешь таблицу поинтеров с помощью относительного поиска. В простейшем случае таблица легко находится глазами в хекс-редакторе - обычно прямо перед самым первым блоком данных. Если контейнер маленький, поинтеры могут быть двухбайтовыми, а не четырёхбайтовыми.


Deathless писал(а):
И если добавление посторонних (дополнительных) скриптов для вывода новых диалогов в блоке с событиями не оказывает негативного влияния (т.к. он находится почти в конце файла)


Если не в самом конце, а "почти" (т.е. после него есть хотя бы ещё один блок данных), то вставка лишнего байта в любом случае оказывает негативное влияние (т.к. ведёт к смещению этого последующего блока).


Deathless писал(а):
Вот и думаю, как бы вычислить расположение тех участков в скриптовом файле. Здесь у меня пока нет никаких идей.


Ну, название РОМа ты не привёл, ромхакинг вполне базовый, просто сиди в шестнадцатеричном редакторе и разбирай.


Dr. MefistO писал(а):
А если игра отслеживает контрольные суммы данных блоков


Тогда, скорее всего, без дебаггера не обойтись. Но это вряд ли, максимум проверяется чексумма всего контейнера, а не каждого куска.


Dr. MefistO писал(а):
или их размеры?


Это тут при чём? Размеры и так "проверяются" при составлении таблицы поинтеров. Никакого смысла проверять размер данных нет. Даже у проверки чексумм смысл вовсе не в том, чтобы усложнить жизнь ромхакеру, а в том, чтобы определить случайное искажение данных при печати картриджа/передаче данных.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Вс Дек 19, 2010 3:47 pm    Заголовок сообщения: Re: Поинтеры и глобальные сдвиги Ответить с цитатой

АнС писал(а):
Во многих PC-играх ещё с начала 90-х практикуется помещение всех игровых данных в один файл-контейнер, в начале которого хранится таблица смещений (поинтеров) на каждый блок.

АнС, ты немного путаешь указатели на память с указателями на файлы в архивах. Да, в архиве тоже есть указатели, но их смысл немного другой - они указывают смещение "файла" в файле-архиве, чтобы считать их в память, а указатель на данные в загружаемом в память файле - немного другое. Тут же, насколько я понимаю, речь как раз о "образах", загружаемых в память - такое много где практикуется, когда все или часть данных, требуемых на уровне/локации/etc. помещаются в один файл. Хотя реальный смысл это имеет в основном на дисковых консолях.
Чаще всего разницы в реализации между этими случаями не прослеживается, но в "образы" иногда приспособлены под потоковое чтение - т.е. подразумевается, что обработаются все данные, находящиеся в "образе" (в то время как из архива читается только необходимое). Поэтому сами указатели могут и отсутствовать, ограничиваясь лишь размером следующего блока. Также в "образах" часто практикуются абсолютные указатели на память (особенно часто применяется на PSX), либо же относительные указатели после загрузки файла в память преобразуются в абсолютные. Хотя, на тех же дисковых консолях и в архивах нередко видишь абсолютные номера секторов.

По сабжу скажу, что лучшим выходом было бы разобраться в структуре файлов и по возможности написать инструментарий для работы с ними (для распаковки данных на отдельные файлы и сборки обратно). Вообще, по-хорошему, разбираться в формате стоит всегда, это может сразу избавить от множества проблем и потенциальных ошибок.

Dr. MefistO писал(а):
А если игра отслеживает контрольные суммы данных блоков, или их размеры?

Если бы да кабы...
_________________
Работаю за деньги
KILL ALL HUMANS!!!!!111
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
АнС
RRC2008
RRC2008


Зарегистрирован: 08.11.2003
Сообщения: 2818

СообщениеДобавлено: Вс Дек 19, 2010 5:07 pm    Заголовок сообщения: Re: Поинтеры и глобальные сдвиги Ответить с цитатой

HoRRoR писал(а):
АнС писал(а):
Во многих PC-играх ещё с начала 90-х практикуется помещение всех игровых данных в один файл-контейнер, в начале которого хранится таблица смещений (поинтеров) на каждый блок.

АнС, ты немного путаешь указатели на память с указателями на файлы в архивах.


Это ты путаешь поинтеры и указатели. Wink Указатель - это строго переменная, принимающая значение в рамках адресного пространства целевого процессора. А поинтер - это более разнородная отсылка на данные (не только в ОЗУ), то есть термин, имеющий отношение к хранению ресурсов, а не к инструкциям косвенной адресации.

Слово "указатель" я нигде не писал. Да и мне вообще не приходилось сталкиваться с указателями до GBA-игр (где уже активно используется динамическая память, и иногда приходилось искать объекты в ОЗУ, но это уже не базовый ромхакинг). А в базовом ромхакинге новичкам, имхо, проще оперировать словами, не пересекающимися с однозвучными терминами программирования. Недаром так повелось - не переводить слово "поинтер", чтобы сразу разграничить понятия.


HoRRoR писал(а):
Да, в архиве тоже есть указатели, но их смысл немного другой - они указывают смещение "файла" в файле-архиве, чтобы считать их в память, а указатель на данные в загружаемом в память файле - немного другое.


Ну, надеюсь, это ты не мне объяснял. Smile Вот поэтому я всегда предпочитал не называть поинтеры указателями, потому что может возникнуть путаница. На 32-разрядной платформе указатели строго 4-байтные, а вот поинтеры на том же GBA могут быть и двух-, и четырёх-, и даже восьмибайтными.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Deathless



Зарегистрирован: 30.10.2005
Сообщения: 14

СообщениеДобавлено: Вс Дек 19, 2010 5:09 pm    Заголовок сообщения: Re: Поинтеры и глобальные сдвиги Ответить с цитатой

АнС писал(а):

Всё то же самое - последовательно определяешь размеры нескольких блоков, следующих друг за другом, и ищешь таблицу поинтеров с помощью относительного поиска. В простейшем случае таблица легко находится глазами в хекс-редакторе - обычно прямо перед самым первым блоком данных. Если контейнер маленький, поинтеры могут быть двухбайтовыми, а не четырёхбайтовыми.

Мм, т.е. обычно все поинтеры для блоков в начале...? Ок, попробую, там в самом деле есть что-то похожее. Проблема в том, что, по моим догадкам, там помимо общей таблицы поинтеров, есть и под-таблицы (т.е. предпожительно, главная поинт-таблица указывает на другую поинт-таблицу, которая уже указывает на нужные данные). Лад, если буду знать где основные блоки, там уже будет виднее
АнС писал(а):

Если не в самом конце, а "почти" (т.е. после него есть хотя бы ещё один блок данных), то вставка лишнего байта в любом случае оказывает негативное влияние (т.к. ведёт к смещению этого последующего блока).

Да, не в самом конце, так что что-то, да портится, просто поверхностно это пока не видно. Поэтому пока что приоритет на то, чтобы добиться базовой работоспособности при добавления своих данных, а там уже в ходе проверок будет виднее что поправлять.
АнС писал(а):
Ну, название РОМа ты не привёл, ромхакинг вполне базовый, просто сиди в шестнадцатеричном редакторе и разбирай.

Название игры пока принципиально не хочется упоминать, т.к. игра во-первых переводится с японского на англ-й (я лишь технической частью занимаюсь, сам перевод не на мне), а во-вторых потому, что это первый проект. Поскольку достаточно редко первые проекты выживают, не хотелось бы раньше времени воду мутить.
Гость писал(а):
А на кой тебе раздвигать блоки? Если уж так надо увеличить один из блоков - перенеси его в конец (не трогая остальных данных) и будет тебе щасье.

Как вариант можно, но оставлю его на десерт.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
АнС
RRC2008
RRC2008


Зарегистрирован: 08.11.2003
Сообщения: 2818

СообщениеДобавлено: Вс Дек 19, 2010 5:17 pm    Заголовок сообщения: Re: Поинтеры и глобальные сдвиги Ответить с цитатой

Deathless писал(а):
Да, не в самом конце, так что что-то, да портится, просто поверхностно это пока не видно. Поэтому пока что приоритет на то, чтобы добиться базовой работоспособности при добавления своих данных, а там уже в ходе проверок будет виднее что поправлять.


Лучше сразу отказаться от таких заплаточных методов, чтобы быть уверенным в работоспособности даже без проверок.


Deathless писал(а):
Название игры пока принципиально не хочется упоминать, т.к. игра во-первых переводится с японского на англ-й (я лишь технической частью занимаюсь, сам перевод не на мне)


Таак, а русские тогда при чём? Что, на русский язык перевод не планируется?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Вс Дек 19, 2010 5:19 pm    Заголовок сообщения: Re: Поинтеры и глобальные сдвиги Ответить с цитатой

АнС писал(а):
Это ты путаешь поинтеры и указатели. Wink

Разница лишь в том, что указатель - это поинтер по-русски. И всё.
_________________
Работаю за деньги
KILL ALL HUMANS!!!!!111
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Deathless



Зарегистрирован: 30.10.2005
Сообщения: 14

СообщениеДобавлено: Вс Дек 19, 2010 5:24 pm    Заголовок сообщения: Re: Поинтеры и глобальные сдвиги Ответить с цитатой

АнС писал(а):

Таак, а русские тогда при чём? Что, на русский язык перевод не планируется?

Будет и русский, если будут заинтересованные сделать перевод с японского/аглийского на русский, как бы все нужные технические вопросы уже будут решены и нужен будет лишь переводчик. Просто игра не была популярна и ее желаемость русскими игроками пока под большим вопросом. Да и найти свободного переводчика, который мог бы сразу с японского (а не допустим по готовому английскому) сделать перевод... Такие люди обычно без дела не сидят. А тот, кто будет делать jap->eng (он американец), увлекается этой игрой и за ним большой список фансаб проектов.

P.S. Я извиняюсь, если на этом форуме не совсем уместно просить помощи, при том, что перевод не на русский.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов shedevr.org.ru -> Базовый ромхакинг Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group