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

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

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

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


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

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

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

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

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


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

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

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

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

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


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

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

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

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

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


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

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 на что-то иное.

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


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

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

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

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

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


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

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

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


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

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

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

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

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

MOV.jpg

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

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


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

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

1_ida.jpg

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

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


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

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

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

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

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


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

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

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

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

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


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

В 17.03.2023 в 13:13, jcxz сказал:

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

День добрый.
Имеется вот такая конструкция.
Родной дизассемблер IAR_а видит это всё вот так, но как только я заменяю строку - линкер начинает ругаться.
Подскажите либо ткните носом где прочитать. Оно работает и в таком виде, но как то не по фэн шую 🙃
 

12.jpg

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


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

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

но как только я заменяю строку - линкер начинает ругаться.

Как именно он начинает ругаться - нам предлагается угадать? К сожалению (на самом деле нет), на этом форуме викторины не проводятся.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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