| Разработка и ромхакинг > Ромхакинг и программирование |
| IDA Pro Advanced (Что за зверь такой?) |
| (1/3) > >> |
| SPOT:
Поставил я себе IDAProAdvanced 5.2 и внёс в нём в папку loaders файл SegaLDR.ldw. Проблема заключается в том, что нечего для открытия в ИДЕ рома сеги не появилось, как быть что делать. Заранее благодарю. |
| Smoke:
Как это так. Запускаем иду, открываем файл .bin -- появляется такое окно: Выбираешь первую строчку как на рисунке, тип процессора Motorola 68000, дальше OK. |
| SPOT:
У меня это почему то не появляется( с чем это может быть связано? |
| Smoke:
Просмотри папку Loaders, в ней самой должен лежать файл SegaLDR.ldw, у тебя он скорее всего лежит в папке с таким же названием, а сама папка эта уже в папке Loaders |
| SPOT:
Smoke спасибо за помощь. Проблема была в том, что в loaders лежал файл весящий 23 kb, а не 468 kb. P.S. Возможно позже возникнут ещё какие то вопросы. |
| SPOT:
А можно ли с помощью ИДЫ как-то вносить изменений в игру? Или она служит только для просмотра кода, а всё остальное надо делать ручками через хекс. |
| Smoke:
Можно дизасмнутый код в файл .asm писать. Потом уже этот файл компилить например компилятором snasm68k. Только есть одно но: ида инструкции относительно PC, например lea label(pc), a0( в машинном виде 41 FA XX XX - занимает 4 байта) пишет без индекса pc и компилятор думает, что отсылка к label абсолютная, а не относительная. Естественно размер команды увеличивается с 4 байтов до 6, размер рома увеличивается, могут не уложиться в максимум диапазоны коротких переходов( bra.w, bsr.w и т.д.) и файл просто не соберется. Как с этим бороться кроме как ручного вписывания индекса pc -- хз. |
| SPOT:
Что-то я не могу сообразить как сохранить файл в *.asm. |
| Smoke:
File->Produce File->Create ASM File |
| SPOT:
Что то оно его обратно в ром не собирает( |
| Smoke:
SPOT, компилить надо с такими параметрами: snasm68k.exe -emax 0 -p -o ae- file.asm, file.bin. Вот батник на всякий случай, только в нем имена файлов .asm и .bin смени на свои |
| SPOT:
А теперь вот это: |
| Smoke:
Ну, здесь типичный случай о котором я писал выше. --- Цитата: Smoke ---ида инструкции относительно PC, например lea label(pc), a0( в машинном виде 41 FA XX XX - занимает 4 байта) пишет без индекса pc и компилятор думает, что отсылка к label абсолютная, а не относительная. Естественно размер команды увеличивается с 4 байтов до 6, размер рома увеличивается, могут не уложиться в максимум диапазоны коротких переходов( bra.w, bsr.w и т.д.) и файл просто не соберется. Как с этим бороться кроме как ручного вписывания индекса pc -- хз. --- Конец цитаты --- Вобщем эти ошибки говорят о том, что в инструкции addi.w нельзя уместить число больше чем FFFF в тип данных word. А все как раз из-за того, что инструкции относительные pc становятся абсолютными, размер их увеличивается и поэтому такая фигня происходит. Вобщем это сложно объяснить, надеюсь ты понял. :) Можно вручную отредактировать нужные инструкции добавляя к ним индекс pc. Это делается так. Ищем в роме значения 41FA, 43FA, 45FA, 47FA, 49FA, 4BFA, 4DFA и 4FFA. Это все lea label(pc), aX, где аХ - номер адресного регистра а0-а7. Далее переходим по нужному адресу в нашем файле .asm и подписываем (pc). Например, было так lea label, a0 -- а надо сделать так lea label(pc), a0 |
| SPOT:
--- Цитата: Smoke ---типичный случай о --- Конец цитаты --- А ты как делаешь свой Хак? |
| Smoke:
В начале я в дизасмнутом файле к инструкциям индекс (pc) прописывал вручную, до тех пор пока ром не стал собираться точь в точь таким каким был. Целый месяц ушел на эту фигню. Теперь просто с этим файлом работаю и все, он прекрасно собирается. |
| SPOT:
[quote/] Можно вручную отредактировать нужные инструкции добавляя к ним индекс pc. Это делается так. Ищем в роме значения 41FA, 43FA, 45FA, 47FA, 49FA, 4BFA, 4DFA и 4FFA. Это все lea label(pc), aX, где аХ - номер адресного регистра а0-а7. Далее переходим по нужному адресу в нашем файле .asm и подписываем (pc). Например, было так lea label, a0 -- а надо сделать так lea label(pc), a0 [/quote] Вот сейчас начал экспериментировать, да вот только досадно не получается из-за того что я чего то недопонял( 41FA, 43FA, 45FA, 47FA, 49FA, 4BFA, 4DFA и 4FFA – Эти значения нужно в роме искать который мы разасемблировали через хек, если да то как искать адрес в блокноте если это возможно. Но, а если нет то как вносить правки в ИДЕ? Если можно об этом ещё подробнее в идеале с примером. Заранее благодарю. И ещё какой командой и как выгледет графика в файл.asm |
| Smoke:
Можно в роме искать посредством винхекса, можно в иде. Search->Sequence of bytes В поле string вводим нужное значение, например 41FA, выбираем в какую сторону искать вверх или вниз(Search Up/Search Down), ну и жмем OK. Далее можно просто нажимать Ctrl+И он будет следующую строчку искать. Только знай, что не каждая 41FA является инструкцией lea. Бывает что это просто данные :) Ида покажет нам строчку где нашлась нужная комбинация байтов. Открываем в блокноте наш файл .asm, листаем до этого адреса(там подписаны метки, например loc_200), сверяемся с идой -- то ли это или же нет. Дописываем (pc) и исправляем дальше. Способ конечно дибильный, но как сделать так чтобы ида сама по нужному эту lea относительную pc писала, я в свое время голову сломал :D |
| Henty:
Насколько я вижу, компилятор тычет в строчки с этой ошибкой. можно сидеть и редактировать, используя эти данные тоже :) А ещё можно написать прогу, которая в текстовом файле (в нашем случае .asm) будет искать нужные строчки и редактировать их) ^_^ |
| Марат:
Ну, там же не просто все метки нужно заменить на (pc), a еще нужно будет добавить впереди (pc) смещение, например, $08(pc). |
| Smoke:
--- Цитата: Henty ---А ещё можно написать прогу, которая в текстовом файле (в нашем случае .asm) будет искать нужные строчки и редактировать их) --- Конец цитаты --- Вот это было бы кстати. :) IDA пишет абсолютные lea так: lea (label).l, a0, т.е. указывается тип byte, word или longword. А относительные так: lea label, a0, т.е. без указания типа. Вот от этого как-то и придется отталкиваться при написании проги :) |
| Навигация |
| Главная страница сообщений |
| Следующая страница |