Список форумов shedevr.org.ru shedevr.org.ru
Группа перевода приставочных игр "ШЕДЕВР"
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

ASMFixer

 
Начать новую тему   Ответить на тему    Список форумов shedevr.org.ru -> Ромхакинг в России и в мире
Предыдущая тема :: Следующая тема  
Автор Сообщение
Smoke
RRC2008
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) я так и не смог, поэтому решил написать прогу для этого. Сразу скажу, что я вообще не программер, читал самоучитель, вот кое-чего получилось. Так что за фиговый интерфейс и удобство не пинать Smile И при обработке больших файлов прога не реагирует на нажатия мыши, опять же потому что навыков программирования на языках выс.уровня не много.
Решил выложить, может кому-еще пригодиться, исходники прилагаются: http://ifolder.ru/13606589
Да и кстати, полностью проблема дизассемблирования SMD-шных ромов и последующего их компилирования так и не отпала. Т.к. IDA еще и JSR и JMP абсолютные и относительные PC одинаково записывает, поэтому я не знаю, как проге объяснить какие инструкции фиксить, а какие нет. Sad
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Djinn
RRC2008
RRC2008


Зарегистрирован: 16.03.2004
Сообщения: 633
Откуда: Москва

СообщениеДобавлено: Чт Авг 20, 2009 6:59 am    Заголовок сообщения: Re: ASMFixer Ответить с цитатой

Smoke писал(а):

Да и кстати, полностью проблема дизассемблирования SMD-шных ромов и последующего их компилирования так и не отпала. Т.к. IDA еще и JSR и JMP абсолютные и относительные PC одинаково записывает, поэтому я не знаю, как проге объяснить какие инструкции фиксить, а какие нет. Sad

Мне казалось, что на сеге нет относительных JSR и JMP.
BSR - это относительный эквивалент JSR.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Smoke
RRC2008
RRC2008


Зарегистрирован: 01.07.2008
Сообщения: 18
Откуда: Самара

СообщениеДобавлено: Чт Авг 20, 2009 9:42 am    Заголовок сообщения: Ответить с цитатой

Оказывается есть, только непонятно зачем они нужны, когда есть bsr и bra. В машинном коде они всего лишь по-разному выглядят:
4EBA и 6100 это jsr и bsr соответственно.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Djinn
RRC2008
RRC2008


Зарегистрирован: 16.03.2004
Сообщения: 633
Откуда: Москва

СообщениеДобавлено: Чт Авг 20, 2009 11:22 am    Заголовок сообщения: Ответить с цитатой

Smoke писал(а):
Оказывается есть, только непонятно зачем они нужны, когда есть bsr и bra. В машинном коде они всего лишь по-разному выглядят:
4EBA и 6100 это jsr и bsr соответственно.

если ты говоришь про
jsr (Address).w
то он не относительный, просто значение адреса 2хбайтное со знаком.
от FFFF8000 до 7FFF
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Smoke
RRC2008
RRC2008


Зарегистрирован: 01.07.2008
Сообщения: 18
Откуда: Самара

СообщениеДобавлено: Чт Авг 20, 2009 1:27 pm    Заголовок сообщения: Ответить с цитатой

Djinn писал(а):
если ты говоришь про
jsr (Address).w
то он не относительный, просто значение адреса 2хбайтное со знаком.
от FFFF8000 до 7FFF

Не, я про jsr Address(pc) Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Djinn
RRC2008
RRC2008


Зарегистрирован: 16.03.2004
Сообщения: 633
Откуда: Москва

СообщениеДобавлено: Пт Авг 21, 2009 8:37 am    Заголовок сообщения: Ответить с цитатой

Smoke писал(а):

Не, я про jsr Address(pc) Smile

Мне даже не попадались такие ни разу Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Smoke
RRC2008
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-скрипт, который будет искать соответствующие инструкции в коде и изменять операнды..
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Smoke
RRC2008
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

Перед проверкой сделай резервную копию проекта.. Rolling Eyes
Запусти через File -> IDC File или "Желтой шестеренкой" на панели инструментов..

Скрипт исправляет адресацию типа d16(PC) для инструкций: LEA, PEA, JSR, JMP

Я посмотрел доки.. Такая же адресация может быть использована еще в паре десятков инструкций.. Так что, при необходимости, код скрипта нужно будет дорабатывать..
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Smoke
RRC2008
RRC2008


Зарегистрирован: 01.07.2008
Сообщения: 18
Откуда: Самара

СообщениеДобавлено: Вт Авг 25, 2009 8:02 pm    Заголовок сообщения: Ответить с цитатой

GrayLight писал(а):
Вот.. накатал скрипт:
http://graylight.narod.ru/downloads/FIX_PC_RELATIVE.idc

Перед проверкой сделай резервную копию проекта.. Rolling Eyes
Запусти через File -> IDC File или "Желтой шестеренкой" на панели инструментов..

Скрипт исправляет адресацию типа d16(PC) для инструкций: LEA, PEA, JSR, JMP

Я посмотрел доки.. Такая же адресация может быть использована еще в паре десятков инструкций.. Так что, при необходимости, код скрипта нужно будет дорабатывать..

GrayLight, тебе просто огромнейшее СПАСИБО! Сейчас посмотрел -- и правда работает!
А другие инструкции с такой адресацией вроде бы ИДА правильно обрабатывает, по крайней мере я не сталкивался. Но если что отпишусь. Вобщем всё круто, спасибо еще раз Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
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 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Smoke
RRC2008
RRC2008


Зарегистрирован: 01.07.2008
Сообщения: 18
Откуда: Самара

СообщениеДобавлено: Ср Авг 26, 2009 7:15 pm    Заголовок сообщения: Ответить с цитатой

Ну это ладно, я если что сам подправлю, разберусь Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Марат



Зарегистрирован: 08.01.2008
Сообщения: 211
Откуда: Казахстан, Астана

СообщениеДобавлено: Пт Авг 28, 2009 3:58 pm    Заголовок сообщения: Ответить с цитатой

Я смотрю здесь эту проблемку давно решили ida 5.1 fix
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов shedevr.org.ru -> Ромхакинг в России и в мире Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group