Jump to content
    

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

IDA - наверное потому, что сам её и упомянул в первом посту... 
Ну а в IAR наверное механизм схожий. с простой заменой одного на другое. По идее если выключить все оптимизации, должно сойтись. И должно быть чётко по тексту - что написал, то и получил. ASM всё же!

Share this post


Link to post
Share on other sites

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

Как влиять на это ???

Один и тот же результат операции может быть достигнут разными командами. Даже ассемблер пытается делать программу компактной и быстрой, а вы хотите делать ее большой и медленной (доля шутки). То есть заставить чистый ассемблер ставить неоптимальный код команды в одно конкретное место скорее всего будет невозможно. Единственное, что здесь может сработать - использовать связку ассемблер-компоновщик (линкер) и команду занесения в регистр неизвестной ассемблеру константы, подставляемой компоновщиком. Поскольку значение константы асссемблеру неизвестно - он будет вынужден поставить подходящий для произвольной константы более длинный и медленный код. И останется только надеяться, что компоновщик именно вашей версии IARа не умеет оптимизировать выходной код или эту оптимизацию можно принудительно отключить. Как это сделать конкретно в современном IAR я не знаю и присоединяюсь к совету jcxz почитать про раздельную компиляцию и работу компоновщика.

Share this post


Link to post
Share on other sites

12 часов назад, Aries сказал:

Могу ли я как то указать IAR_у когда ему это следует делать а когда нет ?

Не думаю, что такое возможно. Только описать команду макросом, который развернётся во вставку машинного кода.

Share this post


Link to post
Share on other sites

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

Не думаю, что такое возможно. Только описать команду макросом, который развернётся во вставку машинного кода.

Резюмируя всё выше сказанное, делаю для себя вывод - значит я правильно сделал, 
что в тексте asm_а просто вставил DC8 3Fh, 40h, 0, 0   тем самым заставляя принудительно
поставить нужную команду MOV.W #0, R15
 

Share this post


Link to post
Share on other sites

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

что написал, то и получил. ASM всё же!

Так всё-же - как следует воспринимать такой фрагмент листинга MSP430:

     LogsCR5(COL_RED "Bus error!");                        
3C40....     MOV.W   #`?<Constant "\\\\RBus error!">`, R12 
0B3C         JMP     ??AosongEnd_2                         

Внимательно смотрим на 3C40.... Что такое по вашему - это 4-точие? Что будет на выходе компилятора по этому адресу? Как именно работает компоновщик? Что он делает?

Что такое "relocatable expressions" из документации на компилятор уже уяснили? И что подставляется в код при компиляции такого выражения?

Можете нам рассказать? Увидим мы объяснения по делу?

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

значит я правильно сделал, 
что в тексте asm_а просто вставил DC8 3Fh, 40h, 0, 0   тем самым заставляя принудительно
поставить нужную команду MOV.W #0, R15

Можно ещё попробовать грузить в регистр перемещаемое выражение (relocatable expression). Которое впоследствии компоновщиком будет заменено нулём. Так как выражение - вычисляемое на этапе компоновки, то компилятор не может его заменить на более короткую команду CLR R15, а значит оставит полный вариант команды MOV #0, R15. Остаётся только добиться, чтобы компоновщик не заменял этот 0 на что-то иное.

Share this post


Link to post
Share on other sites

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

Остаётся только добиться, чтобы компоновщик не заменял этот 0 на что-то иное.

Вот этого у меня и не получилось, поэтому плюнув на всё сделал проще, хотя и не по правилам. 🤣

Share this post


Link to post
Share on other sites

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

Вот этого у меня и не получилось, поэтому плюнув на всё сделал проще, хотя и не по правилам. 🤣

Руководствуясь написанным мной выше, это сделать нетрудно.

В asm-файле пишем:

            RSEG    .proba:DATA:ROOT
proba1      DS8     1
            RSEG    CODE16:CODE:ROOT
            CODE
            MOV     #0DADAh, R15
            MOV     #0DADAh, R15
            MOV     #proba1, R15
            RET

В командном файле компоновщика добавляем фиктивный сегмент ".proba":

-Z(CONST).proba=0-7F

Компилим (IAR), получаем .lst:

000000                          RSEG    .proba:DATA:ROOT
000000              proba1      DS8     1               
000000                          RSEG    CODE16:CODE:ROOT
000000                          CODE                    
000000 3F40DADA                 MOV     #0DADAh, R15    
000004 3F40DADA                 MOV     #0DADAh, R15    
000008 3F40....                 MOV     #proba1, R15    
00000C 3041                     RET                     

Открываем результирующий загрузочный .hex-файл. Находим в нём указанный фрагмент (по добавленным для поиска 0DADAh):

Цитата

...
:10ED5C00C73FB01222F7741730413F40DADA3F4018
:10ED6C00DADA3F40000030410C413C80001F0624A1
...

Как видим - в коде получили такую желанную MOV #0, R15.

Ничего сложного, если прочитать документацию на компилятор/компоновщик.  :smile:

 

PS: Вышеописанные манипуляции произведены при помощи "IAR Assembler V7.12.1.987/W32  for MSP430".

Share this post


Link to post
Share on other sites

5 часов назад, jcxz сказал:

Руководствуясь написанным мной выше, это сделать нетрудно......
PS: Вышеописанные манипуляции произведены при помощи "IAR Assembler V7.12.1.987/W32  for MSP430".

Спасибо, попробую обязательно. У меня IAR тоже 7.12 

P.S.- попробовал - получилось, спасибо ещё раз !
Просто не всё помещается в голове, старею однако 🤷‍♂️

MOV.jpg

Edited by Aries

Share this post


Link to post
Share on other sites

Когда делал первый вариант прошивки, столкнулся с тем, что IDA не понимает отдельные команды.
Пришлось дописывать их вручную.
Как поправить модуль MSP430.py я не знал, да и сейчас не знаю, поэтому обходился чем мог 😀
На скрине как раз такой случай. 

1_ida.jpg

Edited by Aries

Share this post


Link to post
Share on other sites

c IDA беда даже не в том, что она что то нерасшифровывает, беда начинается тогда, когда она явно косячит.
И по идее из этого описания проца нужно было бы выкинуть к чёрту все эти ихние "упрощения" - всёравно это не на благо, а в тупик, задача то совсем иная если уж ею пользоватся.

Писал когдато почти с нуля модуль под STM8.... Так и до конца неразобрался с ихним SDK. Что хорошо для одной версии, то смерть для другой.
Ну а косяк 9S12 встроенного эмулятора, где при ADC carry всегда 0 - тяжелое наследие, которое править никто и несобирается. Кое как работает, да и ладно. Однако в луже сидели месяца два по этой причине.

Мораль - полагатся нельзя.
Но хорошо, что она есть!

Share this post


Link to post
Share on other sites

12 часов назад, girts сказал:

И по идее из этого описания проца нужно было бы выкинуть к чёрту все эти ихние "упрощения" - всёравно это не на благо, а в тупик, задача то совсем иная если уж ею пользоватся.

Ух как забористо ! 🤣
А что то более конкретное по теме есть ?

Share this post


Link to post
Share on other sites

4 часа назад, girts сказал:

а что именно?

Например как подправить MSP430.py ?

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...