Разработка и ромхакинг > Ромхакинг и программирование
[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 патч - где у него команды, а где информация, ибо исходник более менее есть, а вот исходник хака нет.
Навигация
Главная страница сообщений

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