Показать сообщение отдельно
Старый 06.01.2013, 19:59   #378
Модератор
 
Аватар для paul_met
 
Регистрация: 21.07.2008
Адрес: Беларусь / Барановичи
Пол: Мужской Мужской
Сообщений: 3,123
paul_met репутация неоспоримаpaul_met репутация неоспоримаpaul_met репутация неоспоримаpaul_met репутация неоспоримаpaul_met репутация неоспоримаpaul_met репутация неоспоримаpaul_met репутация неоспоримаpaul_met репутация неоспоримаpaul_met репутация неоспоримаpaul_met репутация неоспоримаpaul_met репутация неоспорима
По умолчанию Группа переводчиков *KUDOS MUST DIE!*             

Цитата:
Сообщение от Kazooki Посмотреть сообщение
Абрвалг сплошной. Что 18h? Какой еще заголовок? Бред какой-то.
В чём бред то? В каждом исполняемом файле PSX-EXE имеется заголовок, в котором храниться некоторая полезная информация:
  • по адресу 0х1с - размер исполняемого файл.
  • по адресу 0х18 - в какую область оперативной памяти его загружать.
Размер заголовка можно вычислить путём вычитания из реального размера файла - размер файла без заголовка, записанный по адресу 0x1c. Как правило это размер получается равным 0х800.
Затем из значения, находящегося по адресу 0х18 вычитаем размер заголовка 0х800 и получаем наше заветное смещение.
Все операции производятся с учётом обратного порядка байт.


На счёт 8-ми байтового поинтера, то когда стандартный 4-х байтовый поинтер разбивается на части, то есть сначала идёт 2 последних байта поинтера, потом пара неизвестных мне байт, а затем 2 первых байта поинтера, впрочем после них опять неизвестная мне пара байт. Такой указатель получается 8-ми байтовым ибо по другому его нельзя классифицировать. В качестве примера можно посмотреть экзешник американской версии игры Vandal Hearts (SLUS_004.47). 8-ми байтовый поинтер, например можно найти по адресу 0х396B0 и выглядит он как "0180023CEC374224". Жирным выделены две части 4-х байтового поинтера, который в обычном случае выглядел бы как "EC370180".


На счёт нестандартных случаев точно не помню, но вроде как в игре Twisted Metal, над которой как раз и трудился товарищ lupus, были какие-то нестыковки со смещением. На сколько я помню к уже имеющему смещению прибавлялось некое второе смещение и уже тогда получался готовый 8-ми байтовый поинтер.


Цитата:
Сообщение от Kazooki Посмотреть сообщение
lupus, Cобственно зачем? Как правило рядом с блоком текста и блок указателей на него. И Хорор уже какую-то утилитку выкладывал причем с сырками.
Это правило к какой системе относиться? У которых в качестве носителей выступают картриджи?
Поинтеры могут быть где угодно (даже в другом файле в то время, как искомый текст сидит в экзешнике). Так что основываться на теориях смысла особого нет. Надо по-любому конкретно вычислять место нахождение указателя.
__________________
Meduza Team
paul_met вне форума  
Ответить с цитированием