Разработка и ромхакинг > Ромхакинг
Smd IDA Tools - Sega Mega Drive reversing helpers
<< < (12/15) > >>
DrMefistO:
Собственно, проект по написанию крутых специфичных плагинов в помощь ромхакерам SMD.

Включает:
 - ROM loader - загрузчик, позволяющий грузить ромы сеги в IDA Pro. Благодарности HardwareMan'у за основу;
 - Z80 sound drivers loader - позволяет загружать звуковые драйвера для Sega в IDA Pro. Автоматически именуются порты и создаются сегменты;
 - Z80 sound drivers debugger - позволяет отлаживать звуковые драйвера в IDA Pro;
 - Gensida debugger - дебагер-плагин который позволяет дебажить ромы Sega Genesis / Mega Drive);
 - Smd Constants identifier - при нажатии на J на константе, отправляемой в какой-либо командный регистр, в комментарий выведется инфа о том, что данное число значит, какие флаги устанавливает;
 - ASM Fixer - помогает при экспортировании листинга из IDA, и приведении его к ассемблируемому виду.
 - Генерация компилируемого ассемблерного листинга для AS/VASM/ASM68K прямо из коробки.

Проект развивающийся, поэтому каждый может предлагать свои идеи, изменения.

Исходники проекта и скомпиленые плагины здесь: https://github.com/lab313ru/smd_ida_tools2/releases
DrMefistO:

--- Цитата: Марат от 29 Февраль 2024, 18:00:54 ---А есть возможность добавить пропуск срабатывания брейкпоинта по определенному адресу? Т.е. допустим я ставлю брейк на чтение по адресу 0xff0000  и у меня срабатывает брейк по адресу 0x1000. Но это место не то, которое мне необходимо и мне надо сделать так, чтобы в этом месте бряк на чтение не срабатывал. На каком тодебагере, сейчас не вспомню, можно было добавлять диапазон адресов, в которых бы ни один брейкпоинт не срабатывал бы. Возможно, fceux. Называлось что то типа "забыть".

--- Конец цитаты ---
Попробуй добавить условие на питоне в виде return False на адрес
Cyneprepou4uk:
Марат, да, в FCEUX есть такой тип бряка, называется Forbid (запрет). Он запрещает другим брякам срабатывать на указанном CPU адресе или диапазоне адресов.
Марат:

--- Цитата: Cyneprepou4uk от 01 Март 2024, 02:56:00 ---Марат, да, в FCEUX есть такой тип бряка, называется Forbid (запрет). Он запрещает другим брякам срабатывать на указанном CPU адресе или диапазоне адресов.
--- Конец цитаты ---
Точно, я почему-то для себя перевёл forbid, как забыть :lol:
DrMefistO:
Вернул предпосмотр тайлов в иде во время статического анализа рома. Теперь можно выбирать и адрес палитры пока смотришь. Билд выкачу попозже.

А вообще, приходите на стрим завтра вечером, расскажу про плагин в целом, что теперь умеет, всякие базовые сценарии рассмотрим, чем может быть полезен.
Turbo2000:
Запиши, пожалуйста, стрим
Завтра не получится
Беларус учит русский:
DrMefistO, а сложно будет добавить, чтобы тайлы собирала в картинку?
DrMefistO:

--- Цитата: perfect_genius от 02 Март 2024, 00:28:50 ---DrMefistO, а сложно будет добавить, чтобы тайлы собирала в картинку?

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

--- Цитата: DrMefistO от 01 Март 2024, 15:09:14 ---Вернул предпосмотр тайлов в иде во время статического анализа рома. Теперь можно выбирать и адрес палитры пока смотришь. Билд выкачу попозже.

А вообще, приходите на стрим завтра вечером, расскажу про плагин в целом, что теперь умеет, всякие базовые сценарии рассмотрим, чем может быть полезен.
(Ссылка на вложение)

--- Конец цитаты ---
Привет, а был стрим?
На канале ничего
DrMefistO:

--- Цитата: Turbo2000 от 03 Март 2024, 22:31:37 ---Привет, а был стрим?
На канале ничего

--- Конец цитаты ---
привет. неа, я отменил - был занят:)
DrMefistO:
Релизнул новую версию, с Tiles Preview: https://github.com/lab313ru/smd_ida_tools2/releases/tag/v3.0

Если что, IDA Pro v8.3 была ликнута.
Марат:
Крашится IDA 8,3 на условных брейкпоинтах.
Сначала брейкпоинт срабатывает нормально.
Потом делаешь сброс на эмуляторе, игра доходит до брейкпоинта и IDA крашится.
Содержимое скрипта брейкпоинта

--- Код: ---Reg = idaapi.get_reg_val('A0')
return Reg == 0x1A4
--- Конец кода ---

Сообщение, которое выскакивает при крахе:

--- Цитата ---Failed to retrieve register value
  File "<string>", line 2, in main
  File "C:\IDA Pro 8.3 (x86, x86_64)\python\3\ida_dbg.py", line 4278, in get_reg_val
    return _ida_dbg.get_reg_val(*args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
--- Конец цитаты ---


--- Цитата ---Oops! internal error 40198 occurred.
Further work is not possible and IDA will close.
Would you like to create a crash dump for a bug report?
--- Конец цитаты ---



Добавлено позже:
И ещё не нашёл где находится TileDataPreview
DrMefistO:

--- Цитата: Марат от 19 Март 2024, 15:13:08 ---Крашится IDA 8,3 на условных брейкпоинтах.
Сначала брейкпоинт срабатывает нормально.
Потом делаешь сброс на эмуляторе, игра доходит до брейкпоинта и IDA крашится.
Содержимое скрипта брейкпоинта

--- Код: ---Reg = idaapi.get_reg_val('A0')
return Reg == 0x1A4
--- Конец кода ---

Сообщение, которое выскакивает при крахе:


Добавлено позже:
И ещё не нашёл где находится TileDataPreview

--- Конец цитаты ---
Спасибо, чекну.
Превью по Shift+D
Беларус учит русский:
Возможно ли сделать сохранение и загрузку в дебаггере, чтобы не запускать игру каждый раз сначала? Т.е. сохраняешься, делаешь изменение в коде, смотришь результат, загружаешь сохранение и делаешь уже другое изменение.
Как ты реверсил Quackshot?
DrMefistO:
Так есть же сейвы, по F5, F8, стандартные для генса.
Беларус учит русский:
Ого, и дебаг продолжается без проблем, с места сохранения? :wow:
Видимо, в старых версиях это не работало, у меня не получилось тогда. Попробую новую.

Добавлено позже:
Попробовал, ничего не изменилось. Делаю так:
Нажимаю паузу в Иде - видна инструкция, на которой остановилось. Игра останавливается в эмуляторе, сохраняюсь.
Убираю паузу в Иде, немного играю, снова ставлю на паузу. Теперь загружаю сохранение - в окне Иды ничего не меняется. Нажимаю F8 и исполняется старый код, т.е. с загрузкой сохранения не обновляется память игры в Иде. Из-за чего игра даже крашится.
Надо в Иде память как-то обновлять?
DrMefistO:
А, вон ты про что... Изменения в идб статичны - код грузится не из базы иды, а из рома и только при запуске. Для патча игрового процесса нужно патчить в хекс редакторе в генсе, в меню Tools.
Беларус учит русский:
Т.е. возвращаемся к вопросу - возможно ли сделать что я имел в виду? Чтобы при загрузке сохранки в эмуляторе, в Иде процесс продолжился с той же инструкции, что и при сохранении?
DrMefistO:

--- Цитата: perfect_genius от 11 Февраль 2025, 12:58:27 ---Т.е. возвращаемся к вопросу - возможно ли сделать что я имел в виду? Чтобы при загрузке сохранки в эмуляторе, в Иде процесс продолжился с той же инструкции, что и при сохранении?

--- Конец цитаты ---
Про то, чтобы с той же инструкции ты не говорил:) в сейве сохраняется состояние регистров, оперативки, видео памяти, звука и прочего. Ром в него не сохраняется. При загрузке сейва берётся ром с файловой системы. А ты хочешь, чтобы брались байты из иды или как? Формат сейвов я менять не буду, так как это поломает совместимость с тасами, если проходить игру самому лень, а исполняемые инструкции получить надо.

Решением в твоём случае я вижу GG-коды на инструкции - они применяются всегда, либо патчить ром сразу на фс. Всё равно не понимаю, что не так у тебя с F5/F8.
Беларус учит русский:

--- Цитата: DrMefistO от 11 Февраль 2025, 13:07:13 ---А ты хочешь, чтобы брались байты из иды или как?
--- Конец цитаты ---
Я хочу, чтобы ты переключил внимание на первую часть вопроса - на сохранение и загрузку, а не изменение рома.
Надо бы, чтобы когда я загружался с сейва, в Иде я продолжал отладку с той же инструкции, где остановился и сделал сохранение.
Т.е. возможно ли из сейва перенести в Иду "сохранённые состояния регистров, оперативки, видео памяти, звука и прочего"?
Не понимаю, как ты реверсил Квакшот без этой базовой функции.
DrMefistO:
А, теперь понял. Ну, я реверсил так: менял номер стартового уровня, и попадал на него)
Насчёт реализуемости твоего вопроса - хз)

Придётся при загрузке сейва делать паузу эмуляции и перекидывать в иду?
Навигация
Главная страница сообщений
Следующая страница
Предыдущая страница

Перейти к полной версии