71230

Исследование битовых полей машинного кода с помощью дизассемблера

Лабораторная работа

Коммуникация, связь, радиоэлектроника и цифровые приборы

Например запись команды UBFX R1 R0 0 1 в дизассемблере будет выглядеть следующим образом 0100 а hexфайле 0001 Исследование назначения битовых полей машинного кода заданной команды. Задана команда UBFX. Возьмем для примера команду UBFX продублируем ее с разным размером извлекаемого...

Русский

2014-11-03

110.46 KB

0 чел.

Министерство образования и науки Российской Федерации

Томский Государственный Университет Систем Управления и Радиоэлектроники (ТУСУР)

Кафедра электронных средств автоматизации и управления

(ЭСАУ)

Лабораторная работа №2

по дисциплине «Микропроцессорные средства систем автоматизации и управления»

«Исследование битовых полей машинного кода с помощью дизассемблера».

                   Выполнила:

студентка гр. 530

      ________ Яровикова Е.А.

“__”______________2013г

                                    Принял:

ассистент каф. ЭСАУ                        _________ Недяк С.П.

                                  “__”___________2013г  

2013

Цель: Изучить структуру и алгоритм формирования hex-файлов, получить навыки редактирования таких файлов.

 Ход работы:

  1.  Создание нового проекта.

Запускаем IAR и создаем новый проект:

1)  Опция Project -> Create New Project. Выбираем C -> main. Сохраняем файл проекта, указывая имя.

2)  В открывшемся окне main.c объявляем внешнюю функцию на языке Assembler:

extern int func_asm(void);

3) В саму функцию main добавляем код для исполнения внешней объявленной функции:

 

Рисунок 1.1 Функция main

  1.  Создание файла исходного кода функции (скелета) на языке Assembler и включение его в проект.

Создадим объявленную функцию и добавим ее в проект:

  1. Создадим скелет функции на языке Assembler: Опция File -> New -> File. Откроется пустое окно. Записываем в него скелет функции:

Рисунок 2.1 Скелет функции на языке Assembler

Сохраняем ее: Правая Кнопка Мыши (ПКМ) по имени окна -> Save …->

->Имя_Функции.asm

2) Добавляем созданную функцию к нашему проекту:

ПКМ по проекту -> Add -> Add Files -> Имя созданной функции

3) В опциях проекта меняем архитектуру:

ПКМ по проекту -> Options -> General Options -> Target -> Device выбираем Milandr 1986BE9x.

4)  Запускаем проект в режиме Отладки(Debugging) – Кнопка Download  and  Debug, - и убеждаемся, что компилятор не выдал ошибок, и открылось окно Dissassembly.

  1.  Изменение настроек проекта для формирования загрузочного кода программы в  Intel-HEX формате.

1) Закрываем режим отладки – Кнопка Stop Debugging. Меняем опции проекта для создания Hex файла:

ПКМ по проекту -> Options -> C/C++Compiler -> Optimizations -> Level ставим None.

…Options -> Output Converter -> Output -> ставим галочку Generate additional output, Output format выбираем Intel Extended и ставим галочку Override default.

2) Изменяем Debug на Release. Запускаем проект в режиме отладки.  HEX файл создастся в папке проекта: …\Debug\Exe\Имя_проекта.hex 

Файл открывается блокнотом.

  1.  Написание исходного ассемблерного файла.

В данной работе в качестве объекта исследования выступала ассемблерная команда UMLAL. В ходе работы необходимо изучить битовые поля этой инструкции.

Команда UMLAL используется как, беззнаковое длинное умножение со сложением.

Синтаксис команды:

UMLAL{cond} <RdLo>, <RdHi>, <Rn>, <Rm>

Где:

cond – необязательный суффикс условия

RdLo, RdHi – регистры – приёмники. В них хранится значение, прибавляемое к произведению.

 Rn, Rm– регистры, содержащие перемножаемые значения.

Описание:

Команда UMLAL интерпретирует содержимое регистров Rn и Rm как целые числа без знака. Команда перемножает эти числа, прибавляет к 64-битному произведению 64-битное число, находящееся в регистрах RdHi и RdLo, и заносит результат обратно в регистры RdHi и RdLo.

Ограничения:

  1. Нельзя использовать  SP либо  PC [3]
  2.   RdHi и RdLo должны быть разными регистрами [3]

Напишем код исходной функции на языке ассемблер, для изучения заданных инструкций:

  1.  Изучение формата  hex-файла.  

Файл HEX – это текстовый файл, содержащий в символьном виде машинный код программы.

Файл состоит из текстовых ASCII строк. Каждая строка представляет собой одну запись. Каждая запись начинается с двоеточия (:), после которого идет набор шестнадцатеричных цифр кратных байту:

  1.  Начало записи (:).
  2.  Количество байт данных, содержащихся в этой записи. Занимает один байт (две шестнадцатеричных цифры), что соответствует 0…255 в десятичной системе.
  3.  Начальный адрес блока записываемых данных — 2 байта. Этот адрес определяет абсолютное местоположение данных этой записи в двоичном файле.
  4.  Один байт, обозначающий тип записи. Определены следующие типы записей:

0 — запись содержит данные двоичного файла.

1 — запись обозначает конец файла, данных не содержит. Имеет характерный вид «:00000001FF».

2 — запись содержит начальный адрес сегмента памяти.

4 — запись расширенного адреса.

  1.  Байты данных, которые требуется сохранить в EPROM (их число указывается в начале записи, от 0 до 255 байт).
  2.  Последний байт в записи является контрольной суммой. Рассчитывается так чтобы сумма всех байтов в записи была равна 0.
  3.  Строка заканчивается стандартной парой CR/LF (0Dh 0Ah).

После успешной сборки проекта был сгенерирован 16-тиричный файл LABA2.hex:

:100000000004002009010000E7000000E7000000F4

:10001000E7000000E7000000E7000000000000002B

:10002000000000000000000000000000E7000000E9

:10003000E700000000000000E7000000E70000000B

:10004000FF20C0F30001C0F30101C0F30201C0F3BF

:100050000301C0F30401C0F30501C0F30601C0F3BE

:100060000701C0F30702C0F30703C0F30704C0F39E

:100070000705C0F30706C0F30707C0F30708C0F37E

:100080000709C0F3070AC0F3070BC0F3070CC1F35D

:100090000000C2F30000C3F30000C4F30000C5F386

:1000A0000000C6F30000C7F30000C8F30000C9F366

:1000B0000000CAF30000CBF30000CCF3000070474F

:1000C00000F009F8002801D0C046C046002000F02A

:1000D00004F800F006F80120704780B5FFF7B0FF84

:1000E000FCE700F001B8FEE70746384600F002F8EA

:1000F000FBE7000080B5C046C046024A1100182048

:10010000ABBEFBE726000200C046C046C046C04664

:04011000FFF7D6FF20

:0400000500000109ED

:00000001FF

Рассмотрим структуру одной из записей получившегося hex-файла:

:10004000FF20C0F30001C0F30001C0F30101C0F3C1

: - начало записи;

10 -  количество байт данных (16 байт);

0040 - адрес памяти, куда будет помещена запись;

00 - тип записи — данные;

FF20C0F30001C0F30001C0F30101C0F3 – данные;

C1– контрольная сумма;

Контрольная сумма вычисляется как дополнение по модулю 256 до нуля суммы по модулю 256 всех байт. Т.е. нужно последовательно сложить все байты, так, чтобы результат каждого сложения занимал также один байт, при этом переполнение не учитывается и просто отбрасывается, - это и будет операция сложения по модулю 256. Далее нужно от 256 отнять полученный байт или можно сделать инверсию полученного байта и увеличить результат на 1 – это будет вычисление дополнения по модулю 256 до 0.  В результате получается, что сумма по модулю 256 всех байт вместе с контрольной суммой дает ноль. Так проверяется целостность и безошибочность записи при считывании.

Посчитаем контрольную сумму для разобранной ранее записи hex-файла и сравним правильность наших расчетов.

Складываем все байты по модулю 256:

10+40+FF+20+C0+F3+00+01+C0+F3+00+01+C0+F3+01+01+C0+F3

Инвертируем полученный результат: not(83F) = C0;

Прибавляем 1: C0+1=C1

Мы видим, что полученная контрольная сумма совпадает с той, которая была сформирована в hex-файле, значит можно сделать вывод, что подсчёт произведён верно. Если сравнить hex-файл с кодом сформированным дизассемблером, то мы видим, что представление порядка байтов немного разное. В hex-файле сначала идет младший байт, затем старший, а в дизассемблере наоборот, сначала старший, потом младший. Например, запись команды UBFX R1, R0, #0, #1 в дизассемблере будет выглядеть следующим образом 0100, а hex-файле 0001

  1.  Исследование назначения битовых полей машинного кода заданной команды.

Задана команда UBFX. Необходимо исследовать битовые поля этой команды, меняя операнды.

Разберемся в логике построения команды в битовом поле. Возьмем для примера команду UBFX, продублируем ее с разным размером извлекаемого битового поля, разными регистрами, номером  бита начиная с которого извлекается битовое поле. (рис. 6.1).

Рисунок 6.1. Отображение команды в Disassembly

Обратив внимание на изменение байтов 0x42, 0x46, 0x4a, 0x4e, 0x52 и т.д..

UBFX R1, R0, #0, #1

0x42: 0xf3c0  0x0100  UBFX        R1,       R0,      #0,       #1

UBFX R1, R0, #0, #2

0x46: 0xf3c0  0x0101  UBFX        R1,       R0,      #0,       #2

UBFX R1, R0, #0, #3

0x4a: 0xf3c0  0x0102  UBFX        R1,       R0,      #0,       #3

UBFX R1, R0, #0, #4

0x4e: 0xf3c0  0x0103  UBFX        R1,       R0,      #0,       #4

UBFX R1, R0, #0, #5

0x52: 0xf3c0  0x0104  UBFX        R1,       R0,      #0,       #5

UBFX R1, R0, #0, #6

0x56: 0xf3c0  0x0105  UBFX        R1,       R0,      #0,       #6

UBFX R1, R0, #0, #7

0x5a: 0xf3c0  0x0106  UBFX        R1,       R0,      #0,       #7

UBFX R1, R0, #0, #8

0x5e: 0xf3c0  0x0107  UBFX        R1,       R0,      #0,       #8

UBFX R2, R0, #0, #8

0x62: 0xf3c0  0x0207  UBFX        R2,       R0,      #0,       #8

UBFX R3, R0, #0, #8

0x66: 0xf3c0  0x0307  UBFX        R3,       R0,      #0,       #8

UBFX R4, R0, #0, #8

0x6a: 0xf3c0  0x0407  UBFX        R4,       R0,      #0,       #8

UBFX R5, R0, #0, #8

0x6e: 0xf3c0  0x0507  UBFX        R5,       R0,      #0,       #8

UBFX R6, R0, #0, #8

0x72: 0xf3c0  0x0607  UBFX        R6,       R0,      #0,       #8

UBFX R7, R0, #0, #8

0x76: 0xf3c0  0x0707  UBFX        R7,       R0,      #0,       #8

UBFX R8, R0, #0, #8

0x7a: 0xf3c0  0x0807  UBFX        R8,       R0,      #0,       #8

UBFX R9, R0, #0, #8

0x7e: 0xf3c0  0x0907  UBFX        R9,       R0,      #0,       #8

UBFX R10, R0, #0, #8

0x82: 0xf3c0  0x0a07  UBFX        R10,       R0,      #0,       #8

UBFX R11, R0, #0, #8

0x86: 0xf3c0  0x0b07  UBFX        R11,       R0,      #0,       #8

UBFX R12, R0, #0, #8

0x8a: 0xf3c0  0x0c07  UBFX        R12,       R0,      #0,       #8

UBFX R0, R1, #0, #1

0x8e: 0xf3c1  0x0000  UBFX        R0,       R1,      #0,       #1

UBFX R0, R2, #0, #1

0x92: 0xf3c2  0x0000  UBFX        R0,       R2,      #0,       #1

UBFX R0, R3, #0, #1

0x92: 0xf3c3  0x0000  UBFX        R0,       R3,      #0,       #1

……………………………………………………………….

……………………………………………………………….

UBFX R0, R10, #0, #1

0xb2: 0xf3ca  0x0000  UBFX        R0,       R10,      #0,       #1

UBFX R0, R11, #0, #1

0xb6: 0xf3cb  0x0000  UBFX        R0,       R11,      #0,       #1

UBFX R0, R12, #0, #1

0xba: 0xf3cc  0x0000  UBFX        R0,       R12,      #0,       #1

UBFX R0, R12, #1, #1

0xbe: 0xf3cc  0x0040  UBFX        R0,       R12,      #1,       #1

UBFX R0, R12, #2, #1

0xc2: 0xf3cc  0x0080  UBFX        R0,       R12,      #2,       #1

UBFX R0, R12, #3, #1

0xc6: 0xf3cc  0x00c0  UBFX        R0,       R12,      #3,       #1

UBFX R0, R12, #4, #1

0xca: 0xf3cc  0x1000  UBFX        R0,       R12,      #4,       #1

UBFX R0, R12, #5, #1

0xce: 0xf3cc  0x1040  UBFX        R0,       R12,      #5,       #1

UBFX R0, R12, #6, #1

0xd2: 0xf3cc  0x1080  UBFX        R0,       R12,      #6,       #1

UBFX R0, R12, #7, #1

0xd6: 0xf3cc  0x10c0  UBFX        R0,       R12,      #7,       #1

Была замечена определенная закономерность:

  1.  Адреса, изменяются каждый раз на 4, 0x42, 0x46, 0x4a, 0x4e, 0x52 и т.д.
  2.  Везде неизменно присутствует  f3c- биты самой команды UBFX
  3. Сразу после которых следуют бит регистра Rn

0xf3c1 для регистра  R1    

0xf3c2 для регистра  R2

0xf3c3 для регистра  R3

и т.д.

С повышением регистра на 1наблюдается увеличение бита.

  1.  Далее была замечена странность старший бит старшего байта и старший бит младшего байта изменялись при изменении номера бита начиная с которого извлекается битовое поле

0x0000  #0,       

0x0040  #1

0x0080  #2

0x00c0  #3

0x1000  #4

0x1040  #5

0x1080  #6

0x10c0  #7

Проследим логику изменения

0x0000 есть 0000 0000 0000 0000 в двоичной системе

0x0040 есть 0000 0000 0100 0000 в двоичной системе

0x0080 есть 0000 0000 1000 0000 в двоичной системе

0x00с0 есть 0000 0000 1100 0000 в двоичной системе

0x1000 есть 0001 0000 0000 0000 в двоичной системе

0x1040 есть 0001 0000 0100 0000 в двоичной системе

0x1080 есть 0001 0000 1000 0000 в двоичной системе

0x10с0 есть 0001 0000 1100 0000 в двоичной системе

Можно заметить порядок изменения единичек в двоичном коде.

  1. Младший бит старшего байта   регистра Rd

0x0207 для  R2

0x0307 для  R3

0x0407 для R4

0x0507 для R5

0x0607 для R6

0x0707 для R7

0x0807 для R8

0x0907 для R9

0x0a07 для R10

0x0b07 для R11

0x0c07 для R12

С повышением регистра на 1наблюдается увеличение бита.

  1.  Младший бит младшего байта отвечает за размер извлекаемого битового поля.

0x0100 для  #1

0x0101 для  #2

0x0102 для  #3

0x0103 для  #4

0x0104 для  #5

0x0105 для  #6

0x0106 для  #7

0x0107 для  #8

С увеличение размера извлекаемого поля наблюдается увеличение бита.

Редактирование одной из строк hex-файла.

Попробуем отредактировать одну из строк hex-файле.Исходная строка: :10004000FF20C0F30001C0F30001C0F30101C0F3C1

0001 соответствует регистру R1(Rd), #0(#lsd), #1(#width), поменяем это значение на 4102, что соответствует R2(Rd), #1(#lsd), #2(#width). Пересчитаем контрольную сумму: 7F.

Сохраним изменения в hex-файле.

Заключение

В ходе лабораторной работы была изученна структура и алгоритм формирования hex-файлов,  были получены навыки редактирования hex-файлов. Был изучен синтаксис команды UBFX. Было проведено исследование назначения битовых полей машинного кода для данной команды.

Используемая литература:

  1.  Ю.Джозеф/ Ядро CortexM3 компании ARM. Полное руководство / пер. с

анrл. А. В. Евстифеева.  М. : ДодэкаХХI

  1.  Ю.Б. Шаропин,С.П. Недяк /Лабораторный практикум по микроконтроллерам семейства Cortex-M/Методическое пособие по проведению работ/2013/77с

  1.  ARM Информационный центр. [Электронный  ресурс] режим доступа: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0489c/Cjahjhee.html


 

А также другие работы, которые могут Вас заинтересовать

24296. Пресс-службы: структура, функции, направления деятельности, формы работы 47 KB
  Прессслужбы: структура функции направления деятельности формы работы. В частности в московский отдел входят: директор департамента PR заместитель директора департамента PR главный менеджер департамента PR начальник прессслужбы . Также примером такого устройства прессслужбы может служить прессслужба Государственной Думы или Прессслужба Президента см. Функции отдела: Координация деятельности Отслеживание бюджета Основные преимущества прессслужбы на аутсорсинге работающей удаленно не в штате компании: 1.
24297. Організація системи мерчандайзингу у роздрібній компанії 26.47 KB
  Вибір того або іншого варіанта залежить від багатьох факторів: формату магазину, розміру його торговельної площі, широти асортиментної матриці, частоти ротації і зміни асортименту, організаційної структури магазину в даний момент і напрямів її трансформації у перспективі...
24298. Система СМИ в Российской Федерации 41 KB
  Аудиовизуальные СМИ – радио телевидение эфирное кабельное документальное неигровое кино видеовещание. Обеспечивают деятельность других СМИ поставляя им готовые тексты и сырые факты. Прессцентры являются посредниками между СМИ и подразделениями данного ведомства и действуют по нескольким направления консультируют установление контактов СМИ с различными подразделениями ведомствами Интернет источники.
24299. Мировые тенденции развития современной журналистики 48 KB
  С другой стороны все более заметным становится рост общественной активности в информационной сфере проявляющийся в создании альтернативных массмедиа – по преимуществу на сетевой платформе а также в деятельности гражданских организаций мониторинга СМИ и медиакритики в отстаивании требований демократизации медийного сектора сохранения и развития мощных общественных средств массовой информации. В большой Европе СМИ все чаще называют медиаиндустрией а журналистские произведения – медиапродуктами рассматривая их как товарную продукцию...
24300. Публицистические жанры журналистики и их место в системе жанров журналистского творчества 51 KB
  Жанры журналистики отличаются от литературных достоверностью адресностью фактов. Жанр в прессе – это способ подачи информации. Теоретики классифицируют жанры по назначению объекту изображения теме стилистике выразительным средствам и проч.
24301. Этика в СМИ, теория свободы прессы 24 KB
  Этика в СМИ теория свободы прессы. Главная тенденция по итогам исследования 2010 года СМИ в теме социальной ответственности низкая доля внимания средств массовой информации к тематике в целом. встречаются редко и лишь на страницах отдельных СМИ. Причем если деятельность официально зарегистрированных организаций благотворительных и правозащитных объединений фондов помощи и общественных ассоциаций проводящих мероприятия имеющие статус официальных а также отдельные социальные акции крупных компаний или государственных структур еще...
24302. Состояние и развитие рекламного рынка в России и мире. Законодательное регулирование рекламных процессов 37 KB
  История рекламы исчисляется не годами а тысячелетиями. С момента возникновения такой экономической категории как товар и установления товарного производства началось развитие рекламы как искусства. Журнал Лаборатория рекламы маркетинга и PR №1. Мировой рекламный рынок: рынок мировой рекламы растет однако его рост замедлился.
24303. Планирование рекламной кампании 31.5 KB
  Планирование рекламной кампании. Планирование рекламной кампании разбивается на следующие этапы: Определение целей рекламной кампании; Разработка рекламной идеи и стратегии рекламной кампании; Исследование рынка; Разработка бюджета рекламной кампании; Выбор средств распространения рекламной информации; Выбор графика проведения рекламной кампании; Составление медиаплана рекламной кампании; Оценка эффективности рекламной кампании. Рекламные кампании различаются: По основному объекту рекламирования можно выделить кампании по рекламе:...
24304. Виды и формы рекламной информации и средств рекламы 30 KB
  ATL это мероприятия по размещению прямой рекламы которые задействуют 6 основных носителей ТВ пресса радио реклама на транспорте наружная реклама реклама в Интернет. Наружная реклама рекламные средства в виде вывесок наружных плакатов щитов перетяжек витрин козырьков световых установок на зданиях улицах и обочинах дороги. Наружная реклама содержит и использует лаконичный запоминающийся текст рисунок. Реклама на транспорте разновидность рекламы достигающей людей которые пользуются общественным транспортом.