Перейти к содержанию
    

Реверс прошивки MSP430F67791A

Приветствую сообщество.
Делал реверс прошивки одного устройства.
При сборке в IARe оказалось, что не всегда ассемблерные команды соответствуют
коду. На вложении такой пример: в оригинале команда clr.w R15 код 3F 40 00 00
а в IARe она же имеет код 43 0F.
Разница в 2 байта, а для восстановления прошивки это критично. Для себя я это решил
просто принудительно записав в тексте DC8 3Fh, 40h, 0, 0  и всё работает, но думаю
должен быть какой то иной вариант. Может кто подскажет на будущее ?

IDA_IAR.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 11.03.2023 в 03:13, Aries сказал:

но думаю должен быть какой то иной вариант. Может кто подскажет на будущее ?

А что вы хотите знать? Неизвестно каким компилятором собиралось и с какой оптимизацией, надо просто перебрать все известные компиляторы MSP и проверить, думаю  названия у TI на сайте написаны.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в оригинале команда clr.w R15 код 3F 40 00 00
Кода 0000H для обычного MSP430 не существует, а вот для MSP430X это:
MOVA @R0, R0
и F67791A как раз ядро 430X.

Ну и занудства ради: CLR - эмулируемая через регистр-генератор констант R3 - MOV R3, R15
Изменено пользователем Obam

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, Obam сказал:

Кода 0000H для обычного MSP430 не существует, а вот для MSP430X это:
MOVA @R0, R0
и F67791A как раз ядро 430X.

Ну и занудства ради: CLR - эмулируемая через регистр-генератор констант R3 - MOV R3, R15

 

По поводу ядра - никто и не спорит.
Команда MOVA @R15, R15 генерит код 0F 0F
Ну а MOV @R15, R15 - 43 0F соответственно.
Мне же хотелось узнать какая команда генерирует код 3F 40 00 00, IDA воспринимает его как CLR.w R15
по производимому действию он именно таковым и является. Видимо действительно "пережиток" от компилятора.
Спасибо откликнувшимся.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне же хотелось узнать какая команда генерирует код 3F 40 00 00
Это две команды:
403FH MOV R3, R15
0000H MOVA @R0, R0

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, Obam сказал:

Это две команды:

Я говорил про код 3F 40 00 00
из вашего же примера не то

2023-03-12_221938.jpg

Изменено пользователем Aries

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, что-то "погорячился" я.

Проверил в симуляторе (IAR EW430 6.10), т.к. МК с ядром 430X нет; в окне дампа памяти ввёл эти 4 байта, а в окне дизассемблера - результат:

3f400000.thumb.jpg.4770c391dc476d9f3d6be5565fd60f53.jpg

Пересылка константы в заданный регистр с помощью непосредственной (immediate) адресации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, Obam сказал:

...а в окне дизассемблера...

А вот ежели набрать в редакторе команду и откомпилировать, то увидим такое 

2023-03-14_025526.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, Obam сказал:

. . . . в симуляторе (IAR EW430 6.10), т.к. МК с ядром 430X нет; . . . 

В комплектной документации EW430_AssemblerReference.pdf поминается X - включается опцией -V

или возможно директивой в исходнике ASM. 

-v0 Devices based on the MSP430 architecture.
-v1 Devices based on the MSP430X architecture.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 11.03.2023 в 03:49, Aries сказал:

Мне же хотелось узнать какая команда генерирует код 3F 40 00 00, IDA воспринимает его как CLR.w R15

В чём же проблема? Открываем листинг любого проекта на MSP430, делаем поиск и находим целую кучу таких команд:

3F40....     MOV.W   #`data`, R15

...

3F40....     MOV.W   #cstack_org, R15

...

3F401000     MOV.W   #0x10, R15

...

3F408000     MOV.W   #0x80, R15

...

3F400500     MOV.W   #0x5, R15

...

и т.д. ещё 100500 этих команд.

Из чего делаем вывод, что это команда загрузки константы в R15. Константа идёт в следующем слове после кода команды.

т.е. - Ваша очевидно будет: MOV #0, R15

 

PS: А почему IDA, вместо действительной команды, подставляет аналогичную по действию, но другую - это уже вопрос к IDA-писателям. Или к Вашим настройкам IDA: может у Вас там какая галка в настройках включена, заставляющая его оптимизировать вывод?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, jcxz сказал:

В чём же проблема?...   т.е. - Ваша очевидно будет: MOV #0, R15

Думаю так будет нагляднее.
 

2023-03-14_101232.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, Aries сказал:

Думаю так будет нагляднее.

Нагляднее в чём? Что вы хотели сказать этим скриншотом?  :unknw:

Очевидно, что IDA (на вашем первом скриншоте) показывает байтовый порядок содержимого памяти. А дизассемблер IAR - отображает 16-битные слова. А представляют они одну и ту же команду.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, jcxz сказал:

Что вы хотели сказать этим скриншотом?  :unknw:

На скриншоте дизассм IAR_а, к IDA это не имеет никакого отношения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 минут назад, jcxz сказал:

И ...?

И то, что скажем из мнемоники MOV #0, R15 IAR формирует 2 х байтовую команду  43 0F
а из MOV #3, R15  4 х байтовую 40 3F 00 03
А у меня в дампе имеется 40 3F 00 00,  так вот меня и заинтересовало, из какой команды это получилось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...