Jump to content

    
Alt.F4

Заполнение неиспользуемой памяти, где найти значения команд в HEX-виде?

Recommended Posts

Здравствуйте.

ST рекомендует (в AN1015 и в AN5156) заполнять неиспользуемую память значениями ILLEGAL OPCODE или инструкцией вызова прерывания SVC, в котором обработать ошибку.

Собственно вопрос, а где найти значения этих инструкций в HEX-виде? Облазил все мануалы, безрезультатно...

Спасибо.

Share this post


Link to post
Share on other sites
19 minutes ago, Alt.F4 said:

Собственно вопрос, а где найти значения этих инструкций в HEX-виде? Облазил все мануалы, безрезультатно

Ну самый простой вариант, наверно, написать команду на ассемблере в файле, скопилировать, запустить в симуляторе (в IAR точно есть), и посмотреть код))

А так, вот пример

Share this post


Link to post
Share on other sites
1 час назад, Alt.F4 сказал:

Собственно вопрос, а где найти значения этих инструкций в HEX-виде? Облазил все мануалы, безрезультатно...

Видимо про какое ядро речь - Вы предлагаете нам угадать?

Если для классического ARM, то посмотреть можно в таблице опкодов на стр.17 здесь:  http://w27001.vdi.mipt.ru/wp/wp-content/uploads/2017/07/Leshchev.pdf

Если для Cortex-M, то ищите аналогичную таблицу опкодов Thumb-2. И когда найдёте - не забудьте её сюда выложить.  :smile:

Если найти не удастся, то создать файл размером 65536*4 байт, состоящий из 32-битных слов в диапазоне от 0 до 65535. И прогнать его через дизассемблер.

А если у Вас Cortex-M, но не Cortex-M7 (самый старший из Cortex-M), то можно посмотреть какие инструкции, имеются в более старших Cortex-M, но отсутствуют в вашем Cortex-M. Они и будут для Вас ILLEGAL OPCODE.

Share this post


Link to post
Share on other sites
31 minutes ago, jcxz said:

Они и будут для Вас ILLEGAL OPCODE.

Я думаю, ТС достаточно заполнить остатки памяти svc #255, а в прерывании анализировать, кто посмел вызывать эту команду)

Share this post


Link to post
Share on other sites
17 часов назад, Arlleex сказал:

Architecture Reference Manual. Например, на ARMv7-M, параграфы A4, A5, A6.

Где-ж Вы были когда я это писал?: https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=147689&do=findComment&comment=1570146

:smile:

Share this post


Link to post
Share on other sites

Да, извините, забыл указать, что интересовал вопрос для Arm Cortex-M0+

Вообще это странно, что ST рекомендует (в AN1015 и в AN5156) использовать ILLEGAL OPCODE, но не предлагает их значения (т.к. для STM8 они конкретно указывают какие значения использовать)

 

В 03.03.2019 в 15:07, haker_fox сказал:

Я думаю, ТС достаточно заполнить остатки памяти svc #255, а в прерывании анализировать, кто посмел вызывать эту команду)

0xFF вызывает прерывание SVC?..

Share this post


Link to post
Share on other sites
40 минут назад, Alt.F4 сказал:

Вообще это странно, что ST рекомендует (в AN1015 и в AN5156) использовать ILLEGAL OPCODE, но не предлагает их значения (т.к. для STM8 они конкретно указывают какие значения использовать)

Потому что описание ядра Cortex-M - это отдельный документ. В котором и расписано всё что касается ядра и системы команд. И STM не создаёт эту систему команд. А STM8 - это детище чисто STM.

40 минут назад, Alt.F4 сказал:

0xFF вызывает прерывание SVC?..

В Cortex-M нет однобайтовых команд. Откройте наконец-то описание системы команд! :dash2:

Share this post


Link to post
Share on other sites
1 hour ago, Alt.F4 said:

0xFF вызывает прерывание SVC?..

Нет. Просто svc 0-254 можно использовать для "legal instruction")))

6 minutes ago, Alt.F4 said:

вот я и не понял, что имел ввиду haker_fox

Он имел в виду, что вы можете заполнить остатки памяти любым svc с любым номером. И при обработке прерывания, смотреть, с каким номером оно было вызвано. 255 было в качестве примера. Используйте любое число) Таким образом вы сможете детектировать прыжок на "левый" участок флеша, и использовать это соответствующим образом. Например, писать в журнал.

Share this post


Link to post
Share on other sites

Выходит заполняем всю неиспользуемую память значением 0xDF (1101 1111) и гарантировано ловим прерывание SVC в случае незапланированного перехода в эту область?

2019-03-06_12-15-51.png.729b1ee7f4d470a277a9a3d4afb1850a.png

Share this post


Link to post
Share on other sites
15 минут назад, Alt.F4 сказал:

Выходит заполняем всю неиспользуемую память значением 0xDF (1101 1111) и гарантировано ловим прерывание SVC в случае незапланированного перехода в эту область?

Не гарантировано. А только если разрешены fault-ы (в регистре FAULTMASK) и если запрещена эскалация SVC в HardFault. Иначе - получите HF.

Можно запретить эскалацию и гарантированно ловить HF во всех случаях. А дальше уже декодировать его причину.

Share this post


Link to post
Share on other sites
Цитата

Не гарантировано. А только если разрешены fault-ы (в регистре FAULTMASK) и если запрещена эскалация SVC в HardFault. Иначе - получите HF.

Перелопатил доки ST и судя по всему в их Cortex-M0+ нет таких регистров и системные прерывания (HardFault, SVC) активированы всегда.

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.