| Разработка и ромхакинг > Ромхакинг и программирование |
| [Snes] Дизассемблирование Snes |
| (1/1) |
| Doomguard45:
Приветствую, есть вопросы относительно разбора игры под Snes. Я не нашел для IDA плагин/лоадер, который бы позволил дизассемблировать SNES ромы. Да, после версии 6.2 IDA имеет встроенный loader под snes, однако, он некорректно воспроизводит в код некоторые элементы, например те, что находятся вместе: --- Код: ---.00:9E1C .BYTE $A9 ; й .00:9E1D .BYTE $FF .00:9E1E .BYTE $8D .00:9E1F .BYTE $B5 ; ¦ .00:9E20 .BYTE $D --- Конец кода --- воспринимается как --- Код: ---.00:9E1C LDA #$8DFF .00:9E1F LDA D,$D,X --- Конец кода --- Преобразование A9 FF, при образовании верной функции не происходит, и код выглядит так: --- Код: ---00:9E1C .BYTE $A9 .00:9E1D .BYTE $FF .00:9E1E ; --------------------------------------------------------------------------- .00:9E1E STA RAM_PlayerLives+1 --- Конец кода --- Что не является верным, а таких участков в коде очень много, что затрудняет нормальную работу в IDA. Существует ли аналоги или loader для IDA, который бы адекватно воспроизводил код? |
| DrMefistO:
Doomguard45, это не лодырь неправильно воспроизводит, а процессорный модуль для снес-процессора неправильно интерпретирует эти команды. Пофиксить это можно, написав дополнительный плагин, фиксящий именно это поведение, и только. Или попробуй поотключать в Kernel options 1 некоторые опции. Дай мне скрин этого окошка, и я скажу какие галки попробуй. |
| Doomguard45:
А, кстати, еще вопрос - как сделать трехбайтовый оффсэт? Чаще всего баг проявляется именно перед 8D , и при LDA LDY LDX, а также не распознается CMP, почему последнее не воспринимает - я не понимаю |
| DrMefistO:
Попробуй сделать настройки такими, как на скрине и сделать Reanalyze program. Возможно, поможет. Если нет, тогда траблы в проц-модуле, а это уже сложнее. |
| Doomguard45:
Уоу ,вроде помогло, еще потестирую, точно скажу, а что на счет оффсэта в три байта? Помогло, но не везде, где то также упорно не хочет в код переводить. |
| DrMefistO:
Doomguard45, трехбайтовые оффсеты, увы, нельзя делать. Есть внутренний тип данных у иды: --- Код: ---#define dt_3byte 15 // 3-byte data --- Конец кода --- Но я не знаю, можно ли его ставить вручную. На автомате то можно, но это работа проц-модуля. Пофиксить это только сторонним плагином можно. Но, заняться этим я не смогу - нет времени. |
| Doomguard45:
--- Цитата: DrMefistO от 23 Октябрь 2015, 12:11:24 ---Doomguard45, трехбайтовые оффсеты, увы, нельзя делать. Есть внутренний тип данных у иды: --- Код: ---#define dt_3byte 15 // 3-byte data --- Конец кода --- Но я не знаю, можно ли его ставить вручную. На автомате то можно, но это работа проц-модуля. Пофиксить это только сторонним плагином можно. Но, заняться этим я не смогу - нет времени. --- Конец цитаты --- Не, проблема не решилась, как то странно всё это --- Код: --- .BYTE $A2 .00:8D2E .BYTE 6 .00:8D2F unk_8D2F: .BYTE $BD ; - ; CODE XREF: GM04DoDMA+37j .00:8D30 .BYTE $97 .00:8D31 .BYTE $8D ; Н --- Конец кода --- в --- Код: ---00:8D2D loc_8D2D: ; CODE XREF: GM04DoDMA+37j .00:8D2D LDX #$BD06 .00:8D30 STA [D,$8D],Y --- Конец кода --- и если опять отделять, то --- Код: ---8D2A ; --------------------------------------------------------------------------- .00:8D2D .BYTE $A2 .00:8D2E .BYTE 6 .00:8D2F ; --------------------------------------------------------------------------- .00:8D2F .00:8D2F loc_8D2F: ; CODE XREF: GM04DoDMA+37j .00:8D2F LDA $8D97,X --- Конец кода --- |
| DrMefistO:
Doomguard45, ну, к сожалению, больше ничем не подскажу.. Не силен в снесовском азме. |
| Doomguard45:
--- Цитата: DrMefistO от 23 Октябрь 2015, 12:20:36 ---Doomguard45, ну, к сожалению, больше ничем не подскажу.. Не силен в снесовском азме. --- Конец цитаты --- Нельзя создать своё правило? или что-то в этом роде |
| DrMefistO:
Doomguard45, как я уже ранее сказал, надо дополнять/исправлять поведение процессорного модуля, написав плагин, который бы перехватывал команду вывода инструкций, и выводил именно в этом случае в нужном тебе виде. Но, писать, увы, браться не буду. |
| Doomguard45:
--- Цитата: DrMefistO от 23 Октябрь 2015, 12:26:26 ---Doomguard45, как я уже ранее сказал, надо дополнять/исправлять поведение процессорного модуля, написав плагин, который бы перехватывал команду вывода инструкций, и выводил именно в этом случае в нужном тебе виде. Но, писать, увы, браться не буду. --- Конец цитаты --- Хммм ,есть ли тогда смысл взять просто дизассемблер на снэс, чтобы данные все таки корректно отображал и опкоды. |
| DrMefistO:
Doomguard45, не очень понимаю твое предложение. |
| Doomguard45:
--- Цитата: DrMefistO от 23 Октябрь 2015, 13:51:48 ---Doomguard45, не очень понимаю твое предложение. --- Конец цитаты --- ну я думал, что аналог ИДЫ может нормально работающий со снэс есть , а тут вообще мрак. Только чистый дизасм. А есть ли способ посмотреть, что именно делает IPS патч - где у него команды, а где информация, ибо исходник более менее есть, а вот исходник хака нет. |
| Навигация |
| Главная страница сообщений |