Автор Тема: IDA Pro Advanced (Что за зверь такой?)  (Прочитано 11001 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн SPOT

  • Пользователь
  • Сообщений: 574
    • Просмотр профиля
Поставил я себе IDAProAdvanced 5.2 и внёс в нём в папку loaders файл SegaLDR.ldw.
Проблема заключается в том, что нечего для открытия в ИДЕ рома сеги не появилось, как быть что делать.
Заранее благодарю.

Оффлайн Smoke

  • Пользователь
  • Сообщений: 3430
  • Пол: Мужской
  • Get Serious!
    • Steam
    • Просмотр профиля
Re: IDA Pro Advanced (Что за зверь такой?)
« Ответ #1 : 28 Май 2009, 21:27:34 »
Как это так. Запускаем иду, открываем файл .bin -- появляется такое окно:

Выбираешь первую строчку как на рисунке, тип процессора Motorola 68000, дальше OK.

Оффлайн SPOT

  • Пользователь
  • Сообщений: 574
    • Просмотр профиля
Re: IDA Pro Advanced (Что за зверь такой?)
« Ответ #2 : 28 Май 2009, 21:49:06 »
У меня это почему то не появляется( с чем это может быть связано?


Оффлайн Smoke

  • Пользователь
  • Сообщений: 3430
  • Пол: Мужской
  • Get Serious!
    • Steam
    • Просмотр профиля
Re: IDA Pro Advanced (Что за зверь такой?)
« Ответ #3 : 28 Май 2009, 21:56:14 »
Просмотри папку Loaders, в ней самой должен лежать файл SegaLDR.ldw, у тебя он скорее всего лежит в папке с таким же названием, а сама папка эта уже в папке Loaders

Оффлайн SPOT

  • Пользователь
  • Сообщений: 574
    • Просмотр профиля
Re: IDA Pro Advanced (Что за зверь такой?)
« Ответ #4 : 28 Май 2009, 22:04:14 »
Smoke спасибо за помощь.
Проблема была в том, что в loaders лежал файл весящий 23 kb, а не 468 kb.
P.S. Возможно позже возникнут ещё какие то вопросы.

Оффлайн SPOT

  • Пользователь
  • Сообщений: 574
    • Просмотр профиля
Re: IDA Pro Advanced (Что за зверь такой?)
« Ответ #5 : 29 Май 2009, 17:03:20 »
А можно ли с помощью ИДЫ как-то вносить изменений в игру? Или она служит только для просмотра кода, а всё остальное надо делать ручками через хекс.

Оффлайн Smoke

  • Пользователь
  • Сообщений: 3430
  • Пол: Мужской
  • Get Serious!
    • Steam
    • Просмотр профиля
Re: IDA Pro Advanced (Что за зверь такой?)
« Ответ #6 : 29 Май 2009, 18:09:49 »
Можно дизасмнутый код в файл .asm писать. Потом уже этот файл компилить например компилятором snasm68k. Только есть одно но: ида инструкции относительно PC, например lea label(pc), a0( в машинном виде 41 FA XX XX - занимает 4 байта) пишет без индекса pc и компилятор думает, что отсылка к label абсолютная, а не относительная. Естественно размер команды увеличивается с 4 байтов до 6, размер рома увеличивается, могут не уложиться в максимум диапазоны коротких переходов( bra.w, bsr.w и т.д.) и файл просто не соберется. Как с этим бороться кроме как ручного вписывания индекса pc -- хз.

Оффлайн SPOT

  • Пользователь
  • Сообщений: 574
    • Просмотр профиля
Re: IDA Pro Advanced (Что за зверь такой?)
« Ответ #7 : 29 Май 2009, 20:35:22 »
Что-то я не могу сообразить как сохранить файл в *.asm.

Оффлайн Smoke

  • Пользователь
  • Сообщений: 3430
  • Пол: Мужской
  • Get Serious!
    • Steam
    • Просмотр профиля
Re: IDA Pro Advanced (Что за зверь такой?)
« Ответ #8 : 29 Май 2009, 23:07:04 »
File->Produce File->Create ASM File

Оффлайн SPOT

  • Пользователь
  • Сообщений: 574
    • Просмотр профиля
Re: IDA Pro Advanced (Что за зверь такой?)
« Ответ #9 : 30 Май 2009, 22:46:42 »
Что то оно его обратно в ром не собирает(


Оффлайн Smoke

  • Пользователь
  • Сообщений: 3430
  • Пол: Мужской
  • Get Serious!
    • Steam
    • Просмотр профиля
Re: IDA Pro Advanced (Что за зверь такой?)
« Ответ #10 : 30 Май 2009, 23:06:53 »
SPOT, компилить надо с такими параметрами: snasm68k.exe -emax 0 -p -o ae- file.asm, file.bin. Вот батник на всякий случай, только в нем имена файлов .asm и .bin смени на свои

Оффлайн SPOT

  • Пользователь
  • Сообщений: 574
    • Просмотр профиля
Re: IDA Pro Advanced (Что за зверь такой?)
« Ответ #11 : 31 Май 2009, 09:40:27 »
А теперь вот это:

Оффлайн Smoke

  • Пользователь
  • Сообщений: 3430
  • Пол: Мужской
  • Get Serious!
    • Steam
    • Просмотр профиля
Re: IDA Pro Advanced (Что за зверь такой?)
« Ответ #12 : 31 Май 2009, 14:17:51 »
Ну, здесь типичный случай о котором я писал выше.
Цитата: 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

  • Пользователь
  • Сообщений: 574
    • Просмотр профиля
Re: IDA Pro Advanced (Что за зверь такой?)
« Ответ #13 : 01 Июнь 2009, 17:50:54 »
Цитата: Smoke
типичный случай о
А ты как делаешь свой Хак?

Оффлайн Smoke

  • Пользователь
  • Сообщений: 3430
  • Пол: Мужской
  • Get Serious!
    • Steam
    • Просмотр профиля
Re: IDA Pro Advanced (Что за зверь такой?)
« Ответ #14 : 01 Июнь 2009, 18:29:27 »
В начале я в дизасмнутом файле к инструкциям индекс (pc) прописывал вручную, до тех пор пока ром не стал собираться точь в точь таким каким был. Целый месяц ушел на эту фигню. Теперь просто с этим файлом работаю и все, он прекрасно собирается.

Оффлайн SPOT

  • Пользователь
  • Сообщений: 574
    • Просмотр профиля
Re: IDA Pro Advanced (Что за зверь такой?)
« Ответ #15 : 01 Июнь 2009, 21:03:52 »
[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

« Последнее редактирование: 01 Июнь 2009, 21:16:59 от SPOT »

Оффлайн Smoke

  • Пользователь
  • Сообщений: 3430
  • Пол: Мужской
  • Get Serious!
    • Steam
    • Просмотр профиля
Re: IDA Pro Advanced (Что за зверь такой?)
« Ответ #16 : 01 Июнь 2009, 22:20:20 »
Можно в роме искать посредством винхекса, можно в иде. Search->Sequence of bytes В поле string вводим нужное значение, например 41FA, выбираем в какую сторону искать вверх или вниз(Search Up/Search Down), ну и жмем OK. Далее можно просто нажимать Ctrl+И он будет следующую строчку искать. Только знай, что не каждая 41FA является инструкцией lea. Бывает что это просто данные :)
Ида покажет нам строчку где нашлась нужная комбинация байтов. Открываем в блокноте наш файл .asm, листаем до этого адреса(там подписаны метки, например loc_200), сверяемся с идой -- то ли это или же нет. Дописываем (pc) и исправляем дальше. Способ конечно дибильный, но как сделать так чтобы ида сама по нужному эту lea относительную pc писала, я в свое время голову сломал  :D

Оффлайн Henty

  • Пользователь
  • Сообщений: 796
  • Пол: Мужской
    • Просмотр профиля
Re: IDA Pro Advanced (Что за зверь такой?)
« Ответ #17 : 03 Июнь 2009, 10:03:34 »
Насколько я вижу, компилятор тычет в строчки с этой ошибкой.
можно сидеть и редактировать, используя эти данные тоже  :)

А ещё можно написать прогу, которая в текстовом файле (в нашем случае .asm) будет искать нужные строчки и редактировать их)  ^_^

Оффлайн Марат

  • Пользователь
  • Сообщений: 556
  • Пол: Мужской
    • Просмотр профиля
Re: IDA Pro Advanced (Что за зверь такой?)
« Ответ #18 : 03 Июнь 2009, 13:21:00 »
Ну, там же не просто все метки нужно заменить на (pc), a еще нужно будет добавить впереди (pc) смещение, например, $08(pc).

Оффлайн Smoke

  • Пользователь
  • Сообщений: 3430
  • Пол: Мужской
  • Get Serious!
    • Steam
    • Просмотр профиля
Re: IDA Pro Advanced (Что за зверь такой?)
« Ответ #19 : 03 Июнь 2009, 14:05:16 »
Цитата: Henty
А ещё можно написать прогу, которая в текстовом файле (в нашем случае .asm) будет искать нужные строчки и редактировать их) 
Вот это было бы кстати. :) IDA пишет абсолютные lea так: lea (label).l, a0, т.е. указывается тип byte, word или longword. А относительные так: lea label, a0, т.е. без указания типа. Вот от этого как-то и придется отталкиваться при написании проги :)

Оффлайн SPOT

  • Пользователь
  • Сообщений: 574
    • Просмотр профиля
Re: IDA Pro Advanced (Что за зверь такой?)
« Ответ #20 : 03 Июнь 2009, 14:45:06 »
Было бы хорошо если бы это кто-то сделал.
А можно Дизассемблировать ром не идой? Ну в смысле есть какая то более лучшая программа?

Оффлайн Марат

  • Пользователь
  • Сообщений: 556
  • Пол: Мужской
    • Просмотр профиля
Re: IDA Pro Advanced (Что за зверь такой?)
« Ответ #21 : 03 Июнь 2009, 15:50:25 »
Вот это было бы кстати. :) IDA пишет абсолютные lea так: lea (label).l, a0, т.е. указывается тип byte, word или longword. А относительные так: lea label, a0, т.е. без указания типа. Вот от этого как-то и придется отталкиваться при написании проги :)
А как он будет вычислять смещение относительно pc, если он не знает по какому смещению находится команда lea. Пример lea unk_43A,A1. По какому смещению находится данная команда в роме неизвестно.

Оффлайн Smoke

  • Пользователь
  • Сообщений: 3430
  • Пол: Мужской
  • Get Serious!
    • Steam
    • Просмотр профиля
Re: IDA Pro Advanced (Что за зверь такой?)
« Ответ #22 : 03 Июнь 2009, 20:33:11 »
А это знать и не надо, компилятор потом сам высчитает. Главное -- просто к этим меткам дописать (pc) и все. В этом смысл. Из lea unk_43A,A1 сделать lea unk_43A(pc),A1.

Оффлайн Марат

  • Пользователь
  • Сообщений: 556
  • Пол: Мужской
    • Просмотр профиля
Re: IDA Pro Advanced (Что за зверь такой?)
« Ответ #23 : 03 Июнь 2009, 21:21:03 »
Вон оно как. Теперь все понятно. Это уже проще, конечно, реализовать.

Оффлайн evgeny

  • Пользователь
  • Сообщений: 1390
  • Пол: Мужской
    • Просмотр профиля
Re: IDA Pro Advanced (Что за зверь такой?)
« Ответ #24 : 04 Июнь 2009, 18:25:10 »
У SNASM68K можно выставить параметры оптимизации при компиляции. Например, насколько я понял, параметр -op сделает все ссылки, которые только возможно pc.

Оффлайн Smoke

  • Пользователь
  • Сообщений: 3430
  • Пол: Мужской
  • Get Serious!
    • Steam
    • Просмотр профиля
Re: IDA Pro Advanced (Что за зверь такой?)
« Ответ #25 : 04 Июнь 2009, 21:35:40 »
Да, есть такое. Только в роме почему-то не все команды которые возможно сделать относительными, относительные. При компиляции не получится такой же ром как был до. А это не есть хорошо. Размер все равно будет другой, а т.к. ида не идентифицирует абсолютно все участки кода(некоторые оставляет данными 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

  • Пользователь
  • Сообщений: 1390
  • Пол: Мужской
    • Просмотр профиля
Re: IDA Pro Advanced (Что за зверь такой?)
« Ответ #26 : 05 Июнь 2009, 05:17:06 »
Так вручную нужно в код преобразовывать кнопкой C. Автоматически весь ром никогда не распознается как положено. Оно ведь и сместится если ты код свой допишешь вначало куда-нибудь, а если так, то и смысла нет дизассемблировать весь ром.

Оффлайн Марат

  • Пользователь
  • Сообщений: 556
  • Пол: Мужской
    • Просмотр профиля
Re: IDA Pro Advanced (Что за зверь такой?)
« Ответ #27 : 05 Июнь 2009, 09:55:01 »
Мне тоже интересно, как можно собрать нормальный ром, если не идентифицированы все участки кода и если мы вставим какие-нибудь новые данны в ром.

Оффлайн Smoke

  • Пользователь
  • Сообщений: 3430
  • Пол: Мужской
  • Get Serious!
    • Steam
    • Просмотр профиля
Re: IDA Pro Advanced (Что за зверь такой?)
« Ответ #28 : 05 Июнь 2009, 13:43:45 »
Так в начало я никогда ничего и не пишу, только в конец рома, а в нужных местах потом изменяю ссылки на мой новый код. Т.о. сохраняю целостность рома. Можно и в начало писать, но тогда надо найти ВСЕ нераспознанные участки кода, а бывает что ида метки не ставит, например move.l #$BBEA, d7. Грузится число $BBEA в регистр d7, по этому смещению в роме процедуры какие-то. Вот ида метку не создала по этому смещению, а надо было. Так каждую команду искать ну его нафиг. ;)

Оффлайн Марат

  • Пользователь
  • Сообщений: 556
  • Пол: Мужской
    • Просмотр профиля
Re: IDA Pro Advanced (Что за зверь такой?)
« Ответ #29 : 05 Июнь 2009, 14:58:56 »
Тогда зачем Hardwareman'овским loader'ом открывать? Можно просто открыть ром как бинарный файл, а в качестве процессора выбрать MC68000. А потом уже создать асм файл, где все данные и коды будут описаны как байты, и в конце уже добавлять свои команды. Нужные участки кода можно идентифицировать. Зато не надо искать метки, которые ида автоматически создает, как в случае с Хардваремановским лоудером. Я, конечно, может быть ошибаюсь. Но на первый взгляд вроде срабатывает.