Jump to content
    

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

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

IDA_IAR.jpg

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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
по производимому действию он именно таковым и является. Видимо действительно "пережиток" от компилятора.
Спасибо откликнувшимся.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

2023-03-12_221938.jpg

Edited by Aries

Share this post


Link to post
Share on other sites

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

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

3f400000.thumb.jpg.4770c391dc476d9f3d6be5565fd60f53.jpg

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

Share this post


Link to post
Share on other sites

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

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

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

2023-03-14_025526.jpg

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

В 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: может у Вас там какая галка в настройках включена, заставляющая его оптимизировать вывод?

Share this post


Link to post
Share on other sites

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

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

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

2023-03-14_101232.jpg

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

И ...?

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...