Библиотека knigago >> Компьютеры и Интернет >> Хакерство >> Ромхакинг для начинающих. Sega Mega Drive.


Книга Вадима Баранова "А. Н. Толстой. Жизненный путь и творческие искания" представляет собой всестороннее и увлекательное исследование жизни и творчества одного из самых выдающихся русских писателей XX века. Баранов прослеживает жизненный путь Толстого с его ранних лет до последних дней, подробно описывая его личные отношения, творческие достижения и общественный вклад. Он скрупулезно исследует произведения Толстого, анализируя их тематику, стиль и влияние на русскую...

Автор неизвестен - Ромхакинг для начинающих. Sega Mega Drive.

Ромхакинг для начинающих. Sega Mega Drive.
Книга - Ромхакинг для начинающих. Sega Mega Drive..   Автор неизвестен  - прочитать полностью в библиотеке КнигаГо
Название:
Ромхакинг для начинающих. Sega Mega Drive.
Автор неизвестен

Жанр:

Хакерство, Программирование игр

Изадано в серии:

неизвестно

Издательство:

неизвестно

Год издания:

ISBN:

неизвестно

Отзывы:

Комментировать

Рейтинг:

Поделись книгой с друзьями!

Помощь сайту: донат на оплату сервера

Краткое содержание книги "Ромхакинг для начинающих. Sega Mega Drive."

Аннотация к этой книге отсутствует.
К этой книге применимы такие ключевые слова (теги) как: Sega Mega Drive

Читаем онлайн "Ромхакинг для начинающих. Sega Mega Drive.". [Страница - 2]

$200)

Теперь если перейти к этому адресу (Position-go to offset-210-ok), мы окажемся вначале программы

Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F

00000210 4A B9 00 A1 00 08 66 06 4A 79 00 A1 00 0C 66 7C
00000220 4B FA 00 7C 4C 9D 00 E0 4C DD 1F 00 10 29 EF 01

Эти цифры представляют собой машинные коды, которые читает и выполняет процессор, отображенные в 'удобном' 16-ричном виде.
К счастью любой такой код можно перевести в код языка Ассемблера, однако следует помнить что ром не состоит из одних кодов, цифры могут означать и что угодно (графика, данные и т.д.).

например данный код: 4A B9 00 A1 00 08
до компиляции (преобразовании из ассемблера в машинные коды) выглядит так:
tst.l    ($A10008).l


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

Самым лучшим способом отделения программной части игры от всего остального (графики, звуков) является дизассемблинг.

В этом нам поможет IDAPro. (используем IDAv5.2 с sega loader'ом(c) от HardwareMan'a)
Запускаем idag.exe
OK.
NEW-disassemble new file.
Выбираем РОМ-файл.
OK.
OK.
Появится окно IDA View-A.
Немного прокрутим ползунок до адресса $210. (в данном случае)

Увидим следующее (или похожее) :
ROM:00000210; =============== S U B R O U T I N E =======================================
ROM:00000210
ROM:00000210
ROM:00000210                 global RESET
ROM:00000210 RESET:
ROM:00000210                 tst.l   (unk_0_A10008).l
ROM:00000216                 bne.s   loc_0_21E
ROM:00000218                 tst.w   (word_0_A1000C).l
ROM:0000021E
ROM:0000021E loc_0_21E:                            ; CODE XREF: RESET+6j
ROM:0000021E                 bne.s   loc_0_29C
ROM:00000220                 lea     unk_0_29E,a5
ROM:00000224                 movem.w (a5)+,d5-d7
ROM:00000228                 movem.l (a5)+,a0-a4
ROM:0000022C                 move.b  byte_0_FFFFEF01(a1),d0
ROM:00000230                 andi.b  #$F,d0
ROM:00000234                 beq.s   loc_0_23E
ROM:00000236                 move.l  #$53454741,$2F00(a1)


Вот это и есть программа(код) игры на языка Ассемблера, точнее только ее маленькая часть (самое начало).

Рекомендуется включить сразу текстовый вид (правая кнопка - text view), иначе при прокрутке начнут вылезать графики.

Каждая строчка представляет собой команду для процессора, где слева - сама команда, а справа, то над чем её проводить (адрес, число, регистры). Также в среде программистов именуются инструкциями, опкодами и прочее.

Теперь если выделить любую команду мышью, а затем перейти во вторую вкладку (Hex view-A), мы увидим её отображение в РОМЕ в 16-ричном виде и место расположения. Команда будет выделена зеленым и может быть разной длины (от 2 до 10байт и более). Данная "фишка" позволит нам в дальнейшем с легкостью их находить и менять если нужно.

К сожалению IDA не может определить сама расположение всех частей программы (т.е. отделить весь игровой код, от всего остального), поэтому доделывать за неё это придётся нам.

В зависимости от игры и наших целей это можно делать, а можно и не делать.
Опция в IDA , Options-General-Kernel Options 1- Make final analysis pass (поставить галочку) и далее нажать Reanalyze Program позволяет отделить больше кода чем обычно, но это вызывает и излишки когда куски не кода, определяются тоже как код.
Это не страшно так как в IDA всегда можно преобразовывать данные в код и обратно. Используйте эту опцию (можно еще нажать её н-ко раз) если IDA отделила слишком мало кода (кол-во определяется по большой полосе сверху на вкладкой).

Есть два простых хоткея преобразования туда-обратно: это 'C' (code) и 'U' (undefine) - отмена.
Попробуйте сразу нажать 'U' на место где есть код, а потом снова 'C', чтобы понять как это работает.


Теперь прокрутим ползунок чуть дальше, до первого места где программа пропадет.
ROM:00000298                 move    #$2700,sr
ROM:0000029C
ROM:0000029C loc_0_29C:                            ; CODE XREF: RESET:loc_0_21Ej
ROM:0000029C                 bra.s   loc_0_30A
ROM:0000029C; ---------------------------------------------------------------------------
ROM:0000029E unk_0_29E:      dc.b $80; ?          ; DATA XREF: RESET+10o
ROM:0000029F                 dc.b   0
ROM:000002A0                 dc.b $3F; ?
ROM:000002A1                 dc.b $FF
ROM:000002A2                 dc.b   1
ROM:000002A3                 dc.b   0
ROM:000002A4                 dc.b   0
ROM:000002A5                 dc.b $A0; ?
ROM:000002A6                 dc.b   0
ROM:000002A7                 dc.b   0
ROM:000002A8                 dc.b   0


$0000029E - числа начиная с этого адреса не являются кодом. Это данные, ну или как можно назвать 'gamedata'.
Суда может входить что угодно (и графика и звуки, конфиги уровней, хар-ки персонажей, --">

Оставить комментарий:


Ваш e-mail является приватным и не будет опубликован в комментарии.