| Разработка и ромхакинг > Ромхакинг и программирование |
| 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 даже с 'оптимизацией' абсолютная. а в оригинале нет. |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |