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

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

Приветствую друзья.
Это снова я со своими, может быть, дурацкими вопросами.
Разбирая прошивку очередного устройства, наткнулся на такой фрагмент:
 

3.jpg
В первой строке слева - байты в окне редактора IAR справа - в окне его же дизассемблера.
Слева ниже ассемблерная команда которая получается из этого кода, справа - код который генерирует
тот же IAR. Как видно отличие в одном байте, в оригинале FF а я получаю 00
Всё бы ничего, но это важно при подсчёте CRC.
Ткните носом, где почитать, почему так  получается ?
Или объясните по простому, никак не пойму.

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

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


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

Вероятно, эти байты не влияют на результат и эта версия этого компилятора решила использовать нули. "Он художник, он так видит". Оставьте DC8, а команду припишите рядом в комментариях.

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


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

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


3.jpg
В первой строке слева - байты в окне редактора IAR справа - в окне его же дизассемблера.
Слева ниже ассемблерная команда которая получается из этого кода, справа - код который генерирует
тот же IAR. Как видно отличие в одном байте, в оригинале FF а я получаю 00

Вы рассматриваете две разные команды, по разным адресам (4F06 и 4F0C). И почему думаете, что их байты должны быть одинаковыми?

Почему дизассемблер показывает их одинаковым мнемокодом - это нужно смотреть в мануал как кодируется данная команда.

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


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

1 час назад, Сергей Борщ сказал:

..."Он художник, он так видит". Оставьте DC8, а команду припишите рядом в комментариях.

Собственно я так и сделал.

 

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

Вы рассматриваете две разные команды, по разным адресам (4F06 и 4F0C). И почему думаете, что их байты должны быть одинаковыми?

Почему дизассемблер показывает их одинаковым мнемокодом - это нужно смотреть в мануал как кодируется данная команда.

Почему же разные ? Команды одинаковые. Адреса могут быть любыми, результат тот же.
 

4.jpg
Видимо среда в которой разрабатывался оригинал, в bit.b #0FEh второй байт оставлял не затрагивая, а вот IAR его обнуляет.
Отсюда и разница, другого объяснения я не нахожу. В коде много подобных мест, приходится делать вставки типа DC8.... что не украшает листинг.

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

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


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

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

Почему же разные ? Команды одинаковые. Адреса могут быть любыми, результат тот же.

Внимательно смотрим на выложенный вами же скриншот:

4F06_4F0C.thumb.jpg.030f329a536eb77e73225f1d819f0618.jpg

и сравниваем адреса, выделенные красными рамками.

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

Адреса могут быть любыми, результат тот же.

Не факт. Содержимое команды может зависеть от адреса её расположения. В ARM это - обычное дело; вполне возможно, что в MSP430 - тоже.

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


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

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

Видимо среда в которой разрабатывался оригинал, в bit.b #0FEh второй байт оставлял не затрагивая, а вот IAR его обнуляет.

Отсюда и разница, другого объяснения я не нахожу.

Если вы привели дизасм какого-то кода, сделанного сторонним инструментом, не IAR (а в IAR только дизассемблируете его), то ещё можно предположить, что тот сторонний инструмент вставил в код свою скрытую цифровую подпись. Что вы и видите. Вставки такие могут делаться с помощью неиспользуемых полей в командах или с помощью команд, имеющих разный код (одинакового размера), но производящих одинаковый результат.

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


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

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

Если вы привели дизасм какого-то кода, сделанного сторонним инструментом, не IAR (а в IAR только дизассемблируете его), то ещё можно предположить, что тот сторонний инструмент вставил в код свою скрытую цифровую подпись. Что вы и видите. Вставки такие могут делаться с помощью неиспользуемых полей в командах или с помощью команд, имеющих разный код (одинакового размера), но производящих одинаковый результат.

Я вставил в IAR кусочек дампа, как он есть DC8..., именно так байты лежат в памяти флеша и увидел то, что увидел.
Но, если в IARe набрать сей кусок кода в мнемокоде, то код будет выглядеть чуть иначе, а именно 00FE а не FFFE
И это не зависит от адресов по которым расположен этот код.
Уж не знаю как там в ARMax не знаком с ними так близко.
В другом дизасме скажем IDA оригинальный кусок кода видится аналогично тому, как видит его IAR.

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


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

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

Я вставил в IAR кусочек дампа, как он есть DC8..., именно так байты лежат в памяти флеша и увидел то, что увидел.
Но, если в IARe набрать сей кусок кода в мнемокоде, то код будет выглядеть чуть иначе, а именно 00FE а не FFFE

Вместо тысячи слов, открываем наконец-то мануал MSP430. Находим картинку:

image.thumb.png.b9f6b07fc79308381ada65272956e15b.png

Смотрим на поле B/W (которое, можно предположить, что означает указатель размера операндов - byte/word). В вашем коде он стоит в положении 'byte' (6-й бит 0xF2 == 1). Что также видно по мнемонике дизасма: 'bit.b'.

Соответственно - старший байт 2-го слова инструкции не используется. И может быть любым. Поэтому дизасм его и не показывает.

 

И да - этот неиспользуемый байт мог использоваться для цифровой подписи кода тем инструментом, коим этот код был сгенерён. Ну или туда мог быть просто засунут мусор.

 

PS: Если вы занимаетесь реверсом каких-то прошивок, то книга, описывающая формат команд целевого МК (MSP430), должна быть вашей настольной книгой. Имхо. И таких вопросов у вас вообще не должно возникать.  :unknw:

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


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

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

...И таких вопросов у вас вообще не должно возникать.  :unknw:

Уж простите великодушно, книга есть конечно же.
Но только вопрос таки был не в том почему, а в том - как.
Как получить в IARe такой код, вот что меня изначально заставило задать вопрос на форуме.
Но так понимаю, зря спрашивал. Что же, спасибо за то, что потратили на меня время.
Всем удачи.
👍

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


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

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

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

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

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

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

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

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

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

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