Разработка и ромхакинг > Ромхакинг и программирование
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, т.е. без указания типа. Вот от этого как-то и придется отталкиваться при написании проги :)
Навигация
Главная страница сообщений
Следующая страница

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