Автор Тема: Messida - Sega Genesis Debugger for IDA Pro  (Прочитано 9661 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Messida - Sega Genesis Debugger for IDA Pro
« : 12 Июль 2015, 23:26:34 »
Все привет.

Что это: это самый, что ни на есть, дебагер-плагин для IDA Pro, чтобы отлаживать ромы для Sega Mega Drive / Genesis. Основан на, и собирается из исходников MESS.

Релизы тут: https://github.com/lab313ru/messida/releases
Исходник: https://github.com/lab313ru/messida/

Описание:
Собственно, да, я его кое-как склепал. Но он еще может быть бажным, и иногда падать. Поэтому и тестирование.
Всем, желающим принять участие в улучшении дебагера, просьба сообщать о багах вместе с последовательностью, как этот баг получается.
Ну и фичи дополнительные спрашивайте, не стесняйтесь.

Как использовать:
Желательно установить отсюда последние версии дополнительных модулей в помощь реверсеру: https://github.com/DrMefistO/smd_ida_tools/releases
Затем, из вложения качаете plw-файлик и кладете его в папку plugins вашей IDA Pro (версия не ниже 6.5). Открываете ром, в дебагерах выбираете плагин MESSIDA.

В меню Debug->Process options можно установить дополнительные флаги, которые понимает эмулятор MESS. По умолчанию передаются флаги:
"-debug -cart {путь_до_открытого_рома}", их поменять не выйдет. Ну и установленный по умолчанию "genesis", но его можно сменить на другую SMD-версию (чтобы регион учитывать).

История версий (бета тестирование):
Версия 1.5.5: Адаптировано под IDA v6.8, и свежие исходники MAME;
Версия 1.5.3: Добавлен MAME CLI интерпретатор в IDA. Теперь можно вводить команды MAME дебагера и видеть его консоль прямо в IDA. Некоторые улучшения в VDP VRAM окне. Пофикшен старый баг, когда бряка в цикле срабатывала только один раз. Пофикшено продолжение эмуляции после брейкпоинтов. Пофикшены бряки на read/write памяти.
Версия 1.5.2: добавлено VDP VRAM окно из Gens'а. Теперь окно MAME дебагера тоже отображается при старте эмуляции. Добавлена версия плагина для x64 версии IDA;
Версия 1.4.2: исправлено продолжение запуска эмуляции после первого бряка; исправлено отображение содержимого памяти для всех регионов;
Версия 1.4.1: добавлено отображение текущей позиции записи в VRAM. Исправлено отображение адреса WINDOW;
Версия 1.4: добавлены регионы на VRAM, VSRAM, CRAM. Добавлено отображение регистров VDP (Debugger windows->VDP Registers);
Версия 1.3: исправлен перезапуск процесса отладки, запись в консоль, открытие и закрытие консоли. Исправлен пункт меню выполнения MESS команд;
Версия 1.2: выполненные инструкции теперь отмечаются - можно легко находить код, которые никогда не выполняется. Исправлено выполнение по шагам. Исправлен вывод в консоль. Добавлена возможность выполнять команды дебагера MESS (в меню Debugger). Исправлены другие баги;
Версия 1.1: исправлен повторный запуск в том же сеансе. Исправлено сохранение конфига - теперь в каталоге с конфигом. Жрет меньше проц;
Версия 1.0: начальная версия.

155686-0
« Последнее редактирование: 08 Декабрь 2015, 09:25:04 от DrMefistO »

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: MESSIDA - Sega Genesis Debugger for IDA Pro (beta testing)
« Ответ #1 : 13 Июль 2015, 20:35:33 »
Проверил, у меня работает.  Спасибо.
Будут баги - отпишу.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: MESSIDA - Sega Genesis Debugger for IDA Pro (beta testing)
« Ответ #2 : 14 Июль 2015, 01:34:48 »
Обновил до версии 1.1. Тестируйте, не стесняйтесь.

Оффлайн worm

  • Пользователь
  • Сообщений: 1074
  • Пол: Мужской
  • Злой тролляка
    • Просмотр профиля
Re: MESSIDA - Sega Genesis Debugger for IDA Pro (beta testing)
« Ответ #3 : 14 Июль 2015, 20:02:59 »
Добрый DrMefistO продолжает радовать нас своим трудом. Спасибо огромное)

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: MESSIDA - Sega Genesis Debugger for IDA Pro (beta testing)
« Ответ #4 : 15 Июль 2015, 09:51:33 »
worm, да пожалуйста. Только вы отзывы не забывайте оставлять.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: MESSIDA - Sega Genesis Debugger for IDA Pro (beta testing)
« Ответ #5 : 17 Июль 2015, 12:36:40 »
Обновил до версии 1.2. В шапке список изменений.

Оффлайн worm

  • Пользователь
  • Сообщений: 1074
  • Пол: Мужской
  • Злой тролляка
    • Просмотр профиля
Re: MESSIDA - Sega Genesis Debugger for IDA Pro (beta testing)
« Ответ #6 : 07 Август 2015, 05:17:18 »
Есть вопрос, касательный сохранения настроек. Каждый раз при запуске отладки, настройки выставляются по умолчанию, т.е. не сохраняются, приходится заново настраивать джойстик. Есть возможность что-то с этим сделать?) Спасибо)

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: MESSIDA - Sega Genesis Debugger for IDA Pro (beta testing)
« Ответ #7 : 07 Август 2015, 09:47:38 »
Возможно, туда, где сейваются настройки, а они в последней версии кладутся в каталог с плагином, нет прав для записи? У меня IDA лежит на диске D:, и успешно сейвает насколько я помню. Вечером проверю, но я почти уверен, что я прав)

Оффлайн worm

  • Пользователь
  • Сообщений: 1074
  • Пол: Мужской
  • Злой тролляка
    • Просмотр профиля
Re: MESSIDA - Sega Genesis Debugger for IDA Pro (beta testing)
« Ответ #8 : 08 Август 2015, 10:10:27 »
Спасибо))
« Последнее редактирование: 08 Август 2015, 10:29:19 от worm »

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: MESSIDA - Sega Genesis Debugger for IDA Pro (beta testing)
« Ответ #9 : 20 Август 2015, 23:22:14 »
Добавил ссылку на исходники.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: MESSIDA - Sega Genesis Debugger for IDA Pro (beta testing)
« Ответ #10 : 28 Август 2015, 10:44:54 »
Обновил версию до 1.3. Изменения в шапке и на гитхабе.

Оффлайн s1nka

  • Пользователь
  • Сообщений: 1569
  • Пол: Мужской
    • Steam
    • Просмотр профиля
Re: MESSIDA - Sega Genesis Debugger for IDA Pro (beta testing)
« Ответ #11 : 28 Август 2015, 14:55:22 »
DrMefistO, если за основу взят MESS/MAME, то по сути можно запилить универсальный дебаггер для всех поддерживаемых платформ?

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: MESSIDA - Sega Genesis Debugger for IDA Pro (beta testing)
« Ответ #12 : 28 Август 2015, 15:08:06 »
s1nka, ну, тут есть ограничения. Собирать все равно нужно будет в полу-ручном режиме.
Регистры, и все такое. А так да, идея эта меня уже посещала. Сделать можно, но отдельно дебагер-для каждой платформы. Архитектура иды другие не поддерживает.

Оффлайн worm

  • Пользователь
  • Сообщений: 1074
  • Пол: Мужской
  • Злой тролляка
    • Просмотр профиля
Re: MESSIDA - Sega Genesis Debugger for IDA Pro (beta testing)
« Ответ #13 : 02 Сентябрь 2015, 21:00:54 »
DrMefistO, я все никак не нарадуюсь, Вы воплотили мою мечту в жизнь)
Спасибо Вам еще раз. Теперь, если "проиграть" все участки рома, можно получить полный, 100% корректный сорс, за исключением массивов указателей, которые, к сожалению, остаются нетронутыми процессором по известным причинам. Можно ли каким-нибудь образом научить IDA корректно определять их или лучше, все таки, это делать вручную? И еще вопрос, возможно ли отключить ram область, чтобы все ram адреса были отображены по типу $FFFFAB30 вместо word_FFFFAB30 (так, как это можно сделать без loader'a, сняв галочку)? Еще хотелось бы полноэкранный режим в будущем, если это возможно и не займет много усилий - захотелось поиграть, садишься и забываешь обо всем, а игра себе потихонечку дизассемблируется :3
« Последнее редактирование: 02 Сентябрь 2015, 21:15:20 от worm »

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: MESSIDA - Sega Genesis Debugger for IDA Pro (beta testing)
« Ответ #14 : 03 Сентябрь 2015, 10:02:49 »
Цитата: worm
Можно ли каким-нибудь образом научить IDA корректно определять их или лучше, все таки, это делать вручную?

Массивы указателей просто бывают разные (относительные, абсолютные). Если ты мне опишешь логику определения таких указателей относительно остального кода, я ее реализую.
Цитата: worm
И еще вопрос, возможно ли отключить ram область, чтобы все ram адреса были отображены по типу $FFFFAB30 вместо word_FFFFAB30 (так, как это можно сделать без loader'a, сняв галочку)?

По моему, мой лоадер эту фигню успешно убирает (если я о той думаю). Если ты юзаешь именно мой smd_loader.plw, то там галка эта снята по-умолчанию.
Цитата: worm
Еще хотелось бы полноэкранный режим в будущем, если это возможно и не займет много усилий - захотелось поиграть, садишься и забываешь обо всем, а игра себе потихонечку дизассемблируется :3

Добавить можно. Но обратно без остановки эмуляции не переключиться. Просто в MESS самой возможности переключаться между фулскрином и оконным режимом нету.
« Последнее редактирование: 03 Сентябрь 2015, 10:10:21 от DrMefistO »

Оффлайн worm

  • Пользователь
  • Сообщений: 1074
  • Пол: Мужской
  • Злой тролляка
    • Просмотр профиля
Re: MESSIDA - Sega Genesis Debugger for IDA Pro (beta testing)
« Ответ #15 : 03 Сентябрь 2015, 19:44:52 »
Если ты мне опишешь логику определения таких указателей относительно остального кода, я ее реализую.
Пока, к сожалению, только на глаз могу определить(
Цитата
Если ты юзаешь именно мой smd_loader.plw, то там галка эта снята по-умолчанию.
Именно Ваш, версия IDA 6.5
Ну это не существенно, дебаггер и без того хорош)

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: MESSIDA - Sega Genesis Debugger for IDA Pro (beta testing)
« Ответ #16 : 03 Сентябрь 2015, 21:50:50 »
Окей, будем на Вы)
Можно пример, когда делается что-то не так, как хотелось с адресами? По шагам, чтобы я проверил.

Оффлайн evgeny

  • Пользователь
  • Сообщений: 1390
  • Пол: Мужской
    • Просмотр профиля
Re: MESSIDA - Sega Genesis Debugger for IDA Pro (beta testing)
« Ответ #17 : 04 Сентябрь 2015, 14:29:02 »
DrMefistO, А для TurboGrafx-16/PC-Engine реально такой сделать?

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: MESSIDA - Sega Genesis Debugger for IDA Pro (beta testing)
« Ответ #18 : 04 Сентябрь 2015, 15:00:30 »
evgeny, если IDA поддерживает егоный проц, и MESS запускает игры для него, то да.
Могу сделать, если эти требования выполняются.

Оффлайн evgeny

  • Пользователь
  • Сообщений: 1390
  • Пол: Мужской
    • Просмотр профиля
Re: MESSIDA - Sega Genesis Debugger for IDA Pro (beta testing)
« Ответ #19 : 04 Сентябрь 2015, 15:16:09 »
Насколько я понял именно такого типа процессора в IDA нет, есть схожий без 32 специальных комманд.
Т.е. нужен 65SC02 (HuC6280), а есть 65C02. Ну по крайней мере я не увидел нужного. По поводу запускает ли MESS -не знаю, не проверял, но по идее должен, не самая редкая система.
Незнаю может можно как-то плагин написать на основе 65C02, добавить туда комманд дополнительных или использовать 65C02 на крайний случай, если это возможно.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: MESSIDA - Sega Genesis Debugger for IDA Pro (beta testing)
« Ответ #20 : 04 Сентябрь 2015, 15:18:54 »
evgeny, Можешь проверить в иде 6.6 поддержку проца? Вроде они этот проц уже делали.

Оффлайн evgeny

  • Пользователь
  • Сообщений: 1390
  • Пол: Мужской
    • Просмотр профиля
Re: MESSIDA - Sega Genesis Debugger for IDA Pro (beta testing)
« Ответ #21 : 04 Сентябрь 2015, 15:31:38 »
Вижу только 65C02. 65SC02 - не вижу.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: MESSIDA - Sega Genesis Debugger for IDA Pro (beta testing)
« Ответ #22 : 04 Сентябрь 2015, 16:14:49 »
evgeny, исходники 65C02 есть. Если их доработать, то можно и второй поддерживать. Надо только различия найти.
MESS, говорят, поддерживает TurboGrafx.

Оффлайн evgeny

  • Пользователь
  • Сообщений: 1390
  • Пол: Мужской
    • Просмотр профиля
Re: MESSIDA - Sega Genesis Debugger for IDA Pro (beta testing)
« Ответ #23 : 04 Сентябрь 2015, 16:36:33 »
Как я понял в 65SC02 добавлено 32 комманды.

добавлены инструкции BBR,BBS,RMB,SMB.


Branch on Bit Reset (BBRi)
 
Function  The  i  th bit value in zero page memory location ZZ is tested. If it is clear, a branch is taken; if it is set, the instruction immediately following the

three-byte BBRi instruction is executed. If the branch is taken, a one-byte signed displacement, fetched from the third byte of the instruction, is added to the

program counter. Once the branch address has been calculated, the result is loaded into the program counter, transferring control to that location. The allowable

range of the displacement is -128 to +127  from the instruction immediately following the branch  .

 Adressing Modes & Opcodes 
Addressing Mode Syntax Opcode # of bytes # of cycles 
Zero Page, Relative BBR0 ZZ, hhll 0F ZZ rr 3 6 
Zero Page, Relative BBR1 ZZ, hhll 1F ZZ rr 3 6 
Zero Page, Relative BBR2 ZZ, hhll 2F ZZ rr 3 6 
Zero Page, Relative BBR3 ZZ, hhll 3F ZZ rr 3 6 
Zero Page, Relative BBR4 ZZ, hhll 4F ZZ rr 3 6 
Zero Page, Relative BBR5 ZZ, hhll 5F ZZ rr 3 6 
Zero Page, Relative BBR6 ZZ, hhll 6F ZZ rr 3 6 
Zero Page, Relative BBR7 ZZ, hhll 7F ZZ rr 3 6 

 

Branch on Bit Set (BBSi)

 Function  The  i  th bit value in zero page memory location ZZ is tested. If it is set, a branch is taken; if it is clear, the instruction immediately following the

three-byte BBSi instruction is executed. If the branch is taken, a one-byte signed displacement, fetched from the third byte of the instruction, is added to the

program counter. Once the branch address has been calculated, the result is loaded into the program counter, transferring control to that location. The allowable

range of the displacement is -128 to +127  from the instruction immediately following the branch  .

 Adressing Modes & Opcodes 
Addressing Mode Syntax Opcode # of bytes # of cycles 
Zero Page, Relative BBS0 ZZ, hhll 8F ZZ rr 3 6 
Zero Page, Relative BBS1 ZZ, hhll 9F ZZ rr 3 6 
Zero Page, Relative BBS2 ZZ, hhll AF ZZ rr 3 6 
Zero Page, Relative BBS3 ZZ, hhll BF ZZ rr 3 6 
Zero Page, Relative BBS4 ZZ, hhll CF ZZ rr 3 6 
Zero Page, Relative BBS5 ZZ, hhll DF ZZ rr 3 6 
Zero Page, Relative BBS6 ZZ, hhll EF ZZ rr 3 6 
Zero Page, Relative BBS7 ZZ, hhll FF ZZ rr 3 6 



Reset Memory Bit i (RMBi)

 Function  Clear the specified bit in the zero page memory location specified in the operand. The bit to clear is specified by a number concatenated to the end of

the mnemonic, resulting in 8 distinct Opcodes.

 Adressing Modes & Opcodes 
Addressing Mode Syntax Opcode # of bytes # of cycles 
Zero page RMB0 ZZ 07 ZZ 2 7 
Zero page RMB1 ZZ 17 ZZ 2 7 
Zero page RMB2 ZZ 27 ZZ 2 7 
Zero page RMB3 ZZ 37 ZZ 2 7 
Zero page RMB4 ZZ 47 ZZ 2 7 
Zero page RMB5 ZZ 57 ZZ 2 7 
Zero page RMB6 ZZ 67 ZZ 2 7 
Zero page RMB7 ZZ 77 ZZ 2 7 



Set Memory Bit i (SMBi)

 Function  Set the specified bit in the zero page memory location specified in the operand. The bit to clear is specified by a number concatenated to the end of the

mnemonic, resulting in 8 distinct Opcodes.

 Adressing Modes & Opcodes 
Addressing Mode Syntax Opcode # of bytes # of cycles 
Zero page SMB0 ZZ 87 ZZ 2 7 
Zero page SMB1 ZZ 97 ZZ 2 7 
Zero page SMB2 ZZ A7 ZZ 2 7 
Zero page SMB3 ZZ B7 ZZ 2 7 
Zero page SMB4 ZZ C7 ZZ 2 7 
Zero page SMB5 ZZ D7 ZZ 2 7 
Zero page SMB6 ZZ E7 ZZ 2 7 
Zero page SMB7 ZZ F7 ZZ 2 7 



« Последнее редактирование: 04 Сентябрь 2015, 16:57:08 от evgeny »

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: MESSIDA - Sega Genesis Debugger for IDA Pro (beta testing)
« Ответ #24 : 04 Сентябрь 2015, 17:02:58 »
evgeny, а можно источник?

Оффлайн evgeny

  • Пользователь
  • Сообщений: 1390
  • Пол: Мужской
    • Просмотр профиля
Re: MESSIDA - Sega Genesis Debugger for IDA Pro (beta testing)
« Ответ #25 : 04 Сентябрь 2015, 17:05:23 »
Вобщем инструкции BBR,BBS,RMB,SMB.
Во вложении вся таблица.

Вероятно 65SC02 еще не учитывает инструкций st0,st1,st2,tai,tam,tma,tdd,tia,tii,tin
они вроде бы под железо приставки заточены. Скорее всего 65SC02 этим отличается от HuC6280.
И в итоге нужен даже не 65SC02, а HuC6280.  В таблице эти инструкции есть.



« Последнее редактирование: 04 Сентябрь 2015, 18:09:18 от evgeny »

Оффлайн worm

  • Пользователь
  • Сообщений: 1074
  • Пол: Мужской
  • Злой тролляка
    • Просмотр профиля
Re: MESSIDA - Sega Genesis Debugger for IDA Pro (beta testing)
« Ответ #26 : 04 Сентябрь 2015, 19:59:36 »
Окей, будем на Вы)
Да это просто привычка еще с детства - со всеми, с кем мало знаком, на Вы, даже если человек младше)) В принципе, можно и на ты)
Цитата
Можно пример, когда делается что-то не так, как хотелось с адресами? По шагам, чтобы я проверил.
Вот пример кода, который дизассемблируется только после дебаггинга.
move.l  #$B6D6,d7 $B6D6 не определяется как ссылка на массив указателей, исправляется горячей клавишей O.
Естественно, массив указателей остается в виде необработанных байтов)
Вот правильный вариант)
move.l  #unk_B6D6,d7
« Последнее редактирование: 04 Сентябрь 2015, 20:10:49 от worm »

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: MESSIDA - Sega Genesis Debugger for IDA Pro (beta testing)
« Ответ #27 : 04 Сентябрь 2015, 20:51:21 »
worm, а, ну это лучше оставить как есть. И руками колбасить. А то по-дефолту там выдает такой упоротый код, если давать Иде идентификацию таких смещений. Поэтому и убрал. Да, вручную по O.

Оффлайн worm

  • Пользователь
  • Сообщений: 1074
  • Пол: Мужской
  • Злой тролляка
    • Просмотр профиля
Re: MESSIDA - Sega Genesis Debugger for IDA Pro (beta testing)
« Ответ #28 : 04 Сентябрь 2015, 22:17:59 »
Ну ничего, дебаггер и так выполняет 99% всей работы)
Я с детства мечтал создавать и изменять любимые игры, кто бы знал, что моя мечта сбудется)

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9372
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
Re: MESSIDA - Sega Genesis Debugger for IDA Pro (beta testing)
« Ответ #29 : 04 Сентябрь 2015, 23:34:16 »
DrMefistO, не надо TurboGrafx, сделай лучше дрим/наоми, а ? в МАМЕ оно тоже более-менее работает.
хотя я буду счастлив и просто от лоадера бинарника рамы, прописывающего сегменты аудио-видео памятей, метки регистров итп.