Разработка и ромхакинг > Ромхакинг и программирование
IDA Pro Advanced (Что за зверь такой?)
<< < (2/3) > >>
SPOT:
Было бы хорошо если бы это кто-то сделал.
А можно Дизассемблировать ром не идой? Ну в смысле есть какая то более лучшая программа?
Марат:

--- Цитата: Smoke от 03 Июнь 2009, 14:05:16 ---Вот это было бы кстати. :) IDA пишет абсолютные lea так: lea (label).l, a0, т.е. указывается тип byte, word или longword. А относительные так: lea label, a0, т.е. без указания типа. Вот от этого как-то и придется отталкиваться при написании проги :)

--- Конец цитаты ---
А как он будет вычислять смещение относительно pc, если он не знает по какому смещению находится команда lea. Пример lea unk_43A,A1. По какому смещению находится данная команда в роме неизвестно.
Smoke:
А это знать и не надо, компилятор потом сам высчитает. Главное -- просто к этим меткам дописать (pc) и все. В этом смысл. Из lea unk_43A,A1 сделать lea unk_43A(pc),A1.
Марат:
Вон оно как. Теперь все понятно. Это уже проще, конечно, реализовать.
evgeny:
У SNASM68K можно выставить параметры оптимизации при компиляции. Например, насколько я понял, параметр -op сделает все ссылки, которые только возможно pc.
Smoke:
Да, есть такое. Только в роме почему-то не все команды которые возможно сделать относительными, относительные. При компиляции не получится такой же ром как был до. А это не есть хорошо. Размер все равно будет другой, а т.к. ида не идентифицирует абсолютно все участки кода(некоторые оставляет данными dc.b), то и меток некоторых нет, вместо них компилятор будет вдалбливать данные в ром. То есть например ида не идентифицировала кусок кода: jsr label, оставила его в таком виде:
dc.b $4E
dc.b $B9
dc.b $00
dc.b $12
dc.b $34
dc.b $56
Компилятор конечно и впишет 4EB900123456, но размер рома то изменился, смещение уже не то, и естественно процессор пойдет не туда куда надо.
Можно конечно найти все эти неидентифицированные участки и вручную привести их к нормальному виду, но эта работа еще геморнее, чем подписывать индексы (pc)  :)
evgeny:
Так вручную нужно в код преобразовывать кнопкой C. Автоматически весь ром никогда не распознается как положено. Оно ведь и сместится если ты код свой допишешь вначало куда-нибудь, а если так, то и смысла нет дизассемблировать весь ром.
Марат:
Мне тоже интересно, как можно собрать нормальный ром, если не идентифицированы все участки кода и если мы вставим какие-нибудь новые данны в ром.
Smoke:
Так в начало я никогда ничего и не пишу, только в конец рома, а в нужных местах потом изменяю ссылки на мой новый код. Т.о. сохраняю целостность рома. Можно и в начало писать, но тогда надо найти ВСЕ нераспознанные участки кода, а бывает что ида метки не ставит, например move.l #$BBEA, d7. Грузится число $BBEA в регистр d7, по этому смещению в роме процедуры какие-то. Вот ида метку не создала по этому смещению, а надо было. Так каждую команду искать ну его нафиг. ;)
Марат:
Тогда зачем Hardwareman'овским loader'ом открывать? Можно просто открыть ром как бинарный файл, а в качестве процессора выбрать MC68000. А потом уже создать асм файл, где все данные и коды будут описаны как байты, и в конце уже добавлять свои команды. Нужные участки кода можно идентифицировать. Зато не надо искать метки, которые ида автоматически создает, как в случае с Хардваремановским лоудером. Я, конечно, может быть ошибаюсь. Но на первый взгляд вроде срабатывает.
Smoke:
Можно и так. Но только файл будет весить очень много, я мк2 когда дизассемблировал все по максимуму идентифицировал, он у меня 40мб весит. Долго обрабатывается из-за веса. А если не идентифицировать ничего, то будет еще больше. Да и нужное смещение уже в .asm файле будет проблематично найти, т.к. никаких меток не будет, только данные сплошняком.

Сейчас проверил, и вправду собирается. :)
evgeny:
С таким же успехом можно в хексе вставлять куски предварительно скомпилированного кода. Написал в блокноте код, задал параметр смещения, скомпилировал, вставил в ром. Непонятно для чего дизассеблировал вобще. Да еще и месяц ссылки исправлял. Я то думал, что действительно ром полностью дизассемблирован.
Smoke:
Так тогда можно сказать, что вообще дизасмить не надо, в винхексе пишем все вручную и все, делов-то.
YTKA:
http://www.hacking-cult.org/download/ida5.1_mc68.rar
Code:
//---------------------------------
//
//  IDA 5.1 68000 processor module fix by drx
//  http://www.hacking-cult.org/
//  http://www.hidden-palace.org/
//
//   The module used to display pc-relative addresses as e.g.:
//
//     lea abc,a0
//
//   when it should have been
//
//     lea abc(pc),a0
//
//   Due do this, the person disassembling an MD ROM would have to create manual operands for every pc-relative instruction.
//   This module fixes this bug.
//
//   The hack only affects the output function and should not mess the IDB up. However, use at your own risk.
//
//   Enjoy.
//   
//---------------------------------

кажется, эта штука лечит проблему с индексами pc. . . опытные, как это юзать? :)
MetalliC:
mc68.w32 из архива кинуть в IDA\procs
Smoke:
Хех, я помниться даже прогу писал, чтобы (pc) дописывала, пока один добрый человек с сайта Шедевра (GreyLight кажется) не написал скрипт для иды, который исправляет нужные инструкции. :D
r57shell:
Хм, хотелось бы спросить Smoke, сколько времени тебе уходит чтобы проверить своё маленькое изменение в роме (из-за маленького времени билдить весь ром %)) и ещё, просто ради интереса, сколько компилит по времени замерь плз :ohmy:
Smoke:
Маленькое изменение... Хм, обычно пишу практически разом, потом проверяю. Хотя если ошибку какую быстро подправить -- ну наверно секунд 5-7. Исправил, скомпилил и запустил ром, чтоб проверить.
Точное время компиляции сказать не могу, так на глаз секунды 2 наверно
r57shell:
быстро компилится однако.  o_0 неожидал.
Ti_:
Вот фикс:

ASM68K.exe /p /o op+ 1.txt,1.bin

Там в опциях есть           op-/+           pc relative optimisation

Она не оптимизирует, т.е. если указано ($B84).l  , то не станет pc.

А если ничего не указано-то станет.  Но это не до конца еще протестировано (т.е. у меня соблюдается).

Нда, всё же не то,  он что-то не умеет 'оптимизироть', т.е. команды JMP - умеет , а  LEA -нет.
      lea   unk_0_29E,a5    даже с 'оптимизацией' абсолютная.
а в оригинале нет.



Навигация
Главная страница сообщений
Следующая страница
Предыдущая страница

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