Автор неизвестен - Ромхакинг для начинающих. Sega Mega Drive.
Название: | Ромхакинг для начинающих. Sega Mega Drive. | |
Автор: | Автор неизвестен | |
Жанр: | Хакерство, Программирование игр | |
Изадано в серии: | неизвестно | |
Издательство: | неизвестно | |
Год издания: | 2010 | |
ISBN: | неизвестно | |
Отзывы: | Комментировать | |
Рейтинг: | ||
Поделись книгой с друзьями! Помощь сайту: донат на оплату сервера |
Краткое содержание книги "Ромхакинг для начинающих. Sega Mega Drive."
Аннотация к этой книге отсутствует.
К этой книге применимы такие ключевые слова (теги) как: Sega Mega Drive
Читаем онлайн "Ромхакинг для начинающих. Sega Mega Drive.". [Страница - 2]
- 1
- 2
- 3
- 4
- . . .
- последняя (19) »
$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'.
Суда может входить что угодно (и графика и звуки, конфиги уровней, хар-ки персонажей, --">
Теперь если перейти к этому адресу (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'.
Суда может входить что угодно (и графика и звуки, конфиги уровней, хар-ки персонажей, --">
- 1
- 2
- 3
- 4
- . . .
- последняя (19) »
Книги схожие с «Ромхакинг для начинающих. Sega Mega Drive.» по жанру, серии, автору или названию:
Другие книги автора « Автор неизвестен»:
Автор неизвестен - Ханс-силач Жанр: Сказки для детей Серия: Датская сказка |
Автор неизвестен - Исповедь озабоченного. Детство Год издания: 2021 |