22 lines
3.5 KiB
Markdown
22 lines
3.5 KiB
Markdown
|
||
Итак, товарищи, по скриптам п1. ВНИМАТЕЛЬНО.
|
||
Если что-то не можете понять -- Ghidra и дебаггер вам в помощь. Они дают ответы на все вопросы :) Просто вопросы надо задавать правильно :)
|
||
Ранее мы выяснили, что текущий файл предварительно грузится в память целиком (вроде как), но затем, ВНИМАНИЕ, нужный скрипт из Пака (который вы научились экспортировать), копируется по адресу 80100000 БЕЗ ПЕРВЫХ 8 БАЙТ.
|
||
В первых 8 байтах Пака указываются параметры скрипта
|
||
То есть,
|
||
```
|
||
08 00 - 10 80 - 90 29 - 10 80
|
||
```
|
||
0800 - это смещение копирования (начинать с 8 байта)
|
||
1080 - это, скорее всего, окончательный адрес копирования скрипта, то есть - 80100000
|
||
9029 - 10640 - размер копируемых данных
|
||
и повторяется адрес копирования 80100000
|
||
Скрипт начинается в памяти с 801010С0
|
||
|
||
Скорее всего, текст проходит какую-то доп. обработку, либо грузится какой-то другой скрипт, потому что данные в памяти не соответствуют данным в первом скрипте. Это ещё предстоит выяснить. + нужно будет разобрать до конца этот пак скрипта, почему-то кажется, что распаковался он неверно, так как текстовые блоки собраны в куче со скриптами.
|
||
Ну а теперь, к практике -
|
||
Рекомендую запустить дебаггер и установить брейкпоинт на адрес 800ac264. Это как раз чтение команды скрипта. В регистре r2/v0 будет номер команды, а в r21/s5 - адрес чтения текущей команды. Приложу ниже дизасм процедуы обработки скрипта, чтобы покурили на досуге и посмотрели как работает. Из этого скрипта мы видим, что команда 0x55 вызывает отрисовку строки.
|
||
Идём по скрипту в хексе и смотрим, что команда FF 55 00 00 - то, что нам нужно. Сразу за ней мы видим 4 байта С АДРЕСОМ СТРОКИ В ТЕКСТОВОМ БЛОКЕ, например F8 1C 10 80, то есть 80101CF8 - указание ЯВНОГО АДРЕСА строки в памяти. И так же у остальных текстовых команд. А так, как мы знаем куда грузится скрипт (80100000) и размер скрипта, то можем перерассчитать эти значения при импорте текстовых строк.
|
||
Вот вам и поинтеры, хы.
|
||
Короче, работы ещё много, нужно выяснить какой именно скрипт работает, как он обрабатывается и вообще разобраться с этими паками.
|
||
Не брезгуйте дебаггерами и гидрой :) |