Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Smoke RRC2008
Зарегистрирован: 01.07.2008 Сообщения: 18 Откуда: Самара
|
Добавлено: Ср Авг 19, 2009 9:20 am Заголовок сообщения: ASMFixer |
|
|
Вобщем как-то была такая проблемка:
Цитата: | Есть инструкция, например: lea label(pc), a5 - занимает 4 байта(4B FA XX XX) и IDA ее показывает без указания (pc), то есть lea label, a5. При попытке компиляции компилятором SNASM68k, он эти инструкции представляет в абсолютном виде, т.е. она занимает уже на 2 байта больше и естественно все короткие переходы в откомпиленном роме изменяются да и выходят за свои пределы. Конечно можно в асм файле потом найти все эти инструкции и подписать к ним (pc), но это слишком долго, думаю есть более простой выход из этой ситуации. Поэтому хотел бы узнать как заставить IDA подписывать к командам, зависящим от pc указание (pc)? |
Заставить иду правильно писать эти инструкции (lea и pea) я так и не смог, поэтому решил написать прогу для этого. Сразу скажу, что я вообще не программер, читал самоучитель, вот кое-чего получилось. Так что за фиговый интерфейс и удобство не пинать И при обработке больших файлов прога не реагирует на нажатия мыши, опять же потому что навыков программирования на языках выс.уровня не много.
Решил выложить, может кому-еще пригодиться, исходники прилагаются: http://ifolder.ru/13606589
Да и кстати, полностью проблема дизассемблирования SMD-шных ромов и последующего их компилирования так и не отпала. Т.к. IDA еще и JSR и JMP абсолютные и относительные PC одинаково записывает, поэтому я не знаю, как проге объяснить какие инструкции фиксить, а какие нет. |
|
Вернуться к началу |
|
|
Djinn RRC2008
Зарегистрирован: 16.03.2004 Сообщения: 633 Откуда: Москва
|
Добавлено: Чт Авг 20, 2009 6:59 am Заголовок сообщения: Re: ASMFixer |
|
|
Smoke писал(а): |
Да и кстати, полностью проблема дизассемблирования SMD-шных ромов и последующего их компилирования так и не отпала. Т.к. IDA еще и JSR и JMP абсолютные и относительные PC одинаково записывает, поэтому я не знаю, как проге объяснить какие инструкции фиксить, а какие нет. |
Мне казалось, что на сеге нет относительных JSR и JMP.
BSR - это относительный эквивалент JSR. |
|
Вернуться к началу |
|
|
Smoke RRC2008
Зарегистрирован: 01.07.2008 Сообщения: 18 Откуда: Самара
|
Добавлено: Чт Авг 20, 2009 9:42 am Заголовок сообщения: |
|
|
Оказывается есть, только непонятно зачем они нужны, когда есть bsr и bra. В машинном коде они всего лишь по-разному выглядят:
4EBA и 6100 это jsr и bsr соответственно. |
|
Вернуться к началу |
|
|
Djinn RRC2008
Зарегистрирован: 16.03.2004 Сообщения: 633 Откуда: Москва
|
Добавлено: Чт Авг 20, 2009 11:22 am Заголовок сообщения: |
|
|
Smoke писал(а): | Оказывается есть, только непонятно зачем они нужны, когда есть bsr и bra. В машинном коде они всего лишь по-разному выглядят:
4EBA и 6100 это jsr и bsr соответственно. |
если ты говоришь про
jsr (Address).w
то он не относительный, просто значение адреса 2хбайтное со знаком.
от FFFF8000 до 7FFF |
|
Вернуться к началу |
|
|
Smoke RRC2008
Зарегистрирован: 01.07.2008 Сообщения: 18 Откуда: Самара
|
Добавлено: Чт Авг 20, 2009 1:27 pm Заголовок сообщения: |
|
|
Djinn писал(а): | если ты говоришь про
jsr (Address).w
то он не относительный, просто значение адреса 2хбайтное со знаком.
от FFFF8000 до 7FFF |
Не, я про jsr Address(pc) |
|
Вернуться к началу |
|
|
Djinn RRC2008
Зарегистрирован: 16.03.2004 Сообщения: 633 Откуда: Москва
|
Добавлено: Пт Авг 21, 2009 8:37 am Заголовок сообщения: |
|
|
Smoke писал(а): |
Не, я про jsr Address(pc) |
Мне даже не попадались такие ни разу |
|
Вернуться к началу |
|
|
Smoke RRC2008
Зарегистрирован: 01.07.2008 Сообщения: 18 Откуда: Самара
|
Добавлено: Пт Авг 21, 2009 11:38 am Заголовок сообщения: |
|
|
Я сейчас пару ромов глянул, в Alien3 таких jsr отн-но pc вообще нет, а в Alien Storm их море. В МК2 и UMK3 их тоже много, так что тут видимо как повезет. |
|
Вернуться к началу |
|
|
GrayLightTaliz
Зарегистрирован: 13.10.2005 Сообщения: 204 Откуда: Краснодар/Королёв
|
Добавлено: Сб Авг 22, 2009 11:17 am Заголовок сообщения: |
|
|
Можно попробовать такой вариант:
в местах, где IDA показывает lea label, a5, задать певрвый операнд мануально (ALT+F1 или по контекстному меню), приписав "(pc)" к имени метки..Теперь IDA должна показать уже lea label(pc), a5. При этом, если теперь переименовать саму метку label, то и в нашем операнде она будет меняться на newname(pc)..
Таким образом, можно преобразовывать все подобные операнды. Можно написать IDC-скрипт, который будет искать соответствующие инструкции в коде и изменять операнды.. |
|
Вернуться к началу |
|
|
Smoke RRC2008
Зарегистрирован: 01.07.2008 Сообщения: 18 Откуда: Самара
|
Добавлено: Сб Авг 22, 2009 4:50 pm Заголовок сообщения: |
|
|
GrayLight писал(а): | Можно попробовать такой вариант:
в местах, где IDA показывает lea label, a5, задать певрвый операнд мануально (ALT+F1 или по контекстному меню), приписав "(pc)" к имени метки..Теперь IDA должна показать уже lea label(pc), a5. При этом, если теперь переименовать саму метку label, то и в нашем операнде она будет меняться на newname(pc)..
Таким образом, можно преобразовывать все подобные операнды. Можно написать IDC-скрипт, который будет искать соответствующие инструкции в коде и изменять операнды.. |
Да, скрипт это хорошо, я и не знал о такой возможности. Кто бы его еще написал. Там вроде на C язык смахивает, а в нем я не силен... |
|
Вернуться к началу |
|
|
GrayLightTaliz
Зарегистрирован: 13.10.2005 Сообщения: 204 Откуда: Краснодар/Королёв
|
Добавлено: Пн Авг 24, 2009 7:48 pm Заголовок сообщения: |
|
|
Вот.. накатал скрипт:
http://graylight.narod.ru/downloads/FIX_PC_RELATIVE.idc
Перед проверкой сделай резервную копию проекта..
Запусти через File -> IDC File или "Желтой шестеренкой" на панели инструментов..
Скрипт исправляет адресацию типа d16(PC) для инструкций: LEA, PEA, JSR, JMP
Я посмотрел доки.. Такая же адресация может быть использована еще в паре десятков инструкций.. Так что, при необходимости, код скрипта нужно будет дорабатывать.. |
|
Вернуться к началу |
|
|
Smoke RRC2008
Зарегистрирован: 01.07.2008 Сообщения: 18 Откуда: Самара
|
Добавлено: Вт Авг 25, 2009 8:02 pm Заголовок сообщения: |
|
|
GrayLight писал(а): | Вот.. накатал скрипт:
http://graylight.narod.ru/downloads/FIX_PC_RELATIVE.idc
Перед проверкой сделай резервную копию проекта..
Запусти через File -> IDC File или "Желтой шестеренкой" на панели инструментов..
Скрипт исправляет адресацию типа d16(PC) для инструкций: LEA, PEA, JSR, JMP
Я посмотрел доки.. Такая же адресация может быть использована еще в паре десятков инструкций.. Так что, при необходимости, код скрипта нужно будет дорабатывать.. |
GrayLight, тебе просто огромнейшее СПАСИБО! Сейчас посмотрел -- и правда работает!
А другие инструкции с такой адресацией вроде бы ИДА правильно обрабатывает, по крайней мере я не сталкивался. Но если что отпишусь. Вобщем всё круто, спасибо еще раз |
|
Вернуться к началу |
|
|
GrayLightTaliz
Зарегистрирован: 13.10.2005 Сообщения: 204 Откуда: Краснодар/Королёв
|
Добавлено: Вт Авг 25, 2009 11:37 pm Заголовок сообщения: |
|
|
Пожалуйста.. ))
Забыл сказать, что скрипт обрабатывает только адреса в диапазоне [0x000000 .. 0x100000) .. Границы этого диапазона указаны в самом начале скрипта (см START_EA и END_EA).. Так что, если вдруг код расположен в другом диапазоне адресов, можно подправить эти значения..
Насчет других инструкций.. я тоже из подобного наталкивался только на JMP с адресацией d8(PC, Xn).. Ее IDA правильно отобразила.. но это уже другая адресация (с индексным регистром).. а d16(PC) может повстречаться также в таких часто используемых инструкциях, как MOVE, ADD, SUB, AND, OR и т.д..
Последний раз редактировалось: GrayLightTaliz (Ср Авг 26, 2009 9:25 pm), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
Smoke RRC2008
Зарегистрирован: 01.07.2008 Сообщения: 18 Откуда: Самара
|
Добавлено: Ср Авг 26, 2009 7:15 pm Заголовок сообщения: |
|
|
Ну это ладно, я если что сам подправлю, разберусь |
|
Вернуться к началу |
|
|
Марат
Зарегистрирован: 08.01.2008 Сообщения: 211 Откуда: Казахстан, Астана
|
Добавлено: Пт Авг 28, 2009 3:58 pm Заголовок сообщения: |
|
|
Я смотрю здесь эту проблемку давно решили ida 5.1 fix |
|
Вернуться к началу |
|
|
|