Hex формат: Intel HEX: описание формата файла | pc

СпецПромДизайн

Формат Intel-HEX

Введение

Шестнадцатиричный объектный формат файлов Intel-HEX (далее просто HEX-формат) – это способ представить двоичные данные в виде кодов ASCII. Поскольку файл состоит из символов ASCII, а не двоичных кодов, появляется возможность хранить данные на бумаге, перфоленте или перфокартах, выводить их на терминал, принтер и т.д. Восьмибитовый HEX-формат файлов предусматривает размещение данных и кода в 16-разрядном линейном адресном пространстве для 8-разрядных процессоров Intel. 16-разрядный HEX-формат файлов дополнительно позволяет использовать 20-разрядное сегментное пространство адресов 16-разрядных процессоров Intel. И, наконец, 32-разрядный формат позволяет оперировать линейным 32-разрядным адресным пространством 32-разрядных процессоров.

Шестнадцатиричное представление двоичных данных в виде ASCII требует использование двух символов для записи одного байта, при этом первый символ всегда соответствует старшей тетраде битов одного байта.

Такой подход увеличивает количество символов в двое по сравнению с количеством двоичных данных.

Формат файла организован в виде набора записей, содержащих сведения о типе, количестве данных, адресе их загрузки в память и дополнительные сведения. В настоящее время определены шесть различных типов записей, однако не все их комбинации определены для разных форматов данных.

Записи могут быть следующих типов:

  • Данные (определена для всех форматов данных)
  • Маркер конца файла (определена для всех форматов файла)
  • Сегментный адрес (определена для 16- и 32-битных форматов)
  • Сегментный адрес старта (определена для 16- и 32-битных форматов)
  • Линейный адрес (определена только для 32-битного формата)
  • Линейный адрес старта (определена только для 32-битнного формата)

Общий формат записей

Маркер записи Кол-во данных
RECLEN
Смещение
OFFSET
Тип записи
TYPEREC
Данные
DATA
Контрольная сумма
CHECKSUM
: 1 байт 2 байта 1 байт RECLEN байт 1 байт

Каждая запись представляет собой ASCII-строку файла.

В одной строке – одна запись.

Каждая запись начинается с МАРКЕРА ЗАПИСИ, который обозначается ASCII-символом двоеточие («:»).

Каждая запись содержит поле RECLEN, определяющее количество байтов данных или информационных байтов, назначение которых определяется типом записи. Максимальное значение этого поля – 255 (0xFF).

Каждая запись содержит поле OFFSET, определяющее 16-битное смещение в адресном пространстве байтов данных. Это поле используется только в записях данных, а в остальных случаях оно должно быть равно нулю.

Каждая запись содержит поле TYPEREC, определяющее тип текущей записи (из ранее упомянутых шести). Это поле используется для интерпретации всех остальных полей записи. Типы записей кодируются следующими значениями поля TYPEREC (в ASCII):

  • «00» – данные
  • «01» – маркер конца файла
  • «02» – адрес сегмента
  • «03» – сегментный адрес старта
  • «04» – линейный адрес
  • «05» – линейный адрес старта

Каждая запись содержит поле DATA переменной длины, которое содержит ноль или более байтов, закодированных символами ASCII. Назначение этих байтов определяется типом записи.

Наконец, каждая запись завершается полем CHECKSUM, гарантирующим целостность всех данных записи. Значение этого поля равно дополнению по модулю 256 до нуля суммы по модулю 256 всех байтов, начиная с поля RECLEN и заканчивая последним байтом поля DATA. При считывании записи следует суммировать по модулю 256 все байты записи, включая поле CHECKSUM. Если в конце концов сумма равна нулю, это означает, что данные считаны без искажений, в противном случае данные недостоверны.

Запись «Линейный адрес»

Формат записи следующий:

Маркер записи Кол-во данных
RECLEN
Смещение
OFFSET
Тип записи
TYPEREC
Данные
ULBA
Контрольная сумма
CHECKSUM
: 02 0000 04 2 байта 1 байт

Эта запись служит для задания значения битов 16-31 в линейном базовом адресе (LBA, Linear Base Address), причем биты 0-15 LBA равны нулю.

Биты 16-31 LBA определяются верхним линейным базовым адресом (ULBA, Upper Linear Base Address). Абсолютное значение адреса байта данных в памяти определяется как сумма значения LBA и значения поля OFFSET в последующих записях данных, плюс индекс байта данных внутри поля DATA. Эта сумма выполняется без учёта переполнения результата (то есть не может превышать 0xFFFFFFFF, 4 Гб).

Фактический линейный адрес байта данных вычисляется в итоге по формуле:

ByteAddr = (LBA + DRLO + DRI) mod 4G,

где: DRLO – значение поля OFFSET записи данных;
DRI – индекс байта в поле DATA записи данных;
mod 4G – операция «сложение по модулю 232«.

Когда запись «Линейный адрес» встречается в файле, вычисляется значение LBA, которое действует для всех последующих записей данных, пока не встретится снова запись «Линейный адрес». По умолчанию LBA = 0.

Запись «Адрес сегмента»

Формат записи следующий:

Маркер записи Кол-во данных
RECLEN
Смещение
OFFSET
Тип записи
TYPEREC
Данные
USBA
Контрольная сумма
CHECKSUM
: 02 0000
04
2 байта 1 байт

Эта запись служит для задания значения битов 4-19 сегментного базового адреса (SBA, Segment Base Address), где биты 0-3 SBA равны нулю. Биты 4-19 SBA определяются верхним базовым адресом сегмента (USBA, Upper Segment Base Address). Абсолютный адрес байта в записи данных вычисляется путем прибавления к SBA значения поля OFFSET записи данных и индекса байта относительно начала поля DATA. Прибавление смещения (OFFSET) осуществляется по модулю 65536 (64 К), без учёта переполнения.

Таким образом, адрес конкретного байта вычисляется по формуле:

ByteAddr = SBA + (DRLO + DRI) mod 64K,

где: DRLO – значение поля OFFSET записи данных;
DRI – индекс байта в поле DATA записи данных;

mod 64K – операция «сложение по модулю 65536».

Когда запись «Адрес сегмента» встречается в файле, вычисляется значение SBA, которое действует для всех последующих записей данных, пока не встретится снова запись «Адрес сегмента». По умолчанию SBA = 0.

Запись данных

Формат записи следующий:

Маркер записи Кол-во данных
RECLEN
Смещение
OFFSET
Тип записи
TYPEREC
Данные
DATA
Контрольная сумма
CHECKSUM
: 1 байт 2 байта 00 RECLEN байтов 1 байт

Эта запись собственно и содержит данные. Метод вычисления фактического (абсолютного) адреса каждого байта данных в памяти определяется по вышеприведённым формулам и зависит от формата данных.

Линейный адрес старта

Формат записи следующий:

Маркер записи Кол-во данных
RECLEN
Смещение
OFFSET
Тип записи
TYPEREC
Данные
EIP
Контрольная сумма
CHECKSUM
: 04 0000 05 4 байта 1 байт

Запись «Линейный адрес старта» используется для указания адреса, с которого начинается исполнение объектного файла. Это значение заносится в регистр EIP процессора. Следует обратить внимание, что эта запись определяет только точку входа сегмента кода для защищённого режима процессоров 80386. В обычном режиме точка старта определяется записью «Сегментный адрес старта», которая определяет значения пары регистров CS:IP.

Запись «Линейный адрес старта» может находиться в любом месте файла. Если её нет, загрузчик использует адрес старта по умолчанию.

Значение регистра EIP процессора содержится в соответствующем поле записи, для него требуется всегда 4 байта.

Сегментный адрес старта

Формат записи следующий:

Маркер записи Кол-во данных
RECLEN
Смещение
OFFSET
Тип записи
TYPEREC
Данные
CS:IP
Контрольная сумма
CHECKSUM
: 04 0000 03 4 байта 1 байт

Запись «Сегментный адрес старта» используется для указания адреса, с которого начинается исполнение объектного файла. Это значение определяет 20-битный адрес, заносимый в регистры CS:IP процессора. Следует обратить внимание, что эта запись определяет только точку входа в 20-битном адресном пространстве процессоров 8086/80186.

Запись «Сегментный адрес старта» может находиться в любом месте файла. Если её нет, загрузчик использует значение по умолчанию.

Значение регистров CS:IP процессора содержится в соответствующем поле записи, для него требуется всегда 4 байта. Значение хранится в порядке «от старшего к младшему», то есть младший байт значения регистра IP хранится в четвертом байте поля CS:IP, старший – в третьем, затем во втором хранится младший байт значения регистра CS, и в первом – старший байт регистра CS.

Маркер конца файла (терминатор)

Формат записи следующий:

Маркер записи Кол-во данных
RECLEN
Смещение
OFFSET
Тип записи
TYPEREC
Контрольная сумма
CHECKSUM
: 00 0000 01 1 байт

Эта запись не содержит полей с изменяющимися данными, поэтому выглядит всегда совершенно одинаково: «:00000001FF». Запись обозначает конец данных в файле. Все последующие строки, если они есть в файле, игнорируются.

Пример содержимого файла формата Intel-HEX

:10010000214601360121470136007EFE09D2190140
:100110002146017EB7C20001FF5F16002148011988
:10012000194E79234623965778239EDA3F01B2CAA7
:100130003F0156702B5E712B722B732146013421C7
:00000001FF

     Маркер записи
     Кол-во данных
     Смещение
     Тип записи
     Данные
     Контрольная сумма

Starline White Natural Hexagon Hex 25X30

Starline White Natural Hexagon Hex 25X30

Starline

Доступные цвета

Доступные форматы

Вид данного продукта

Starline White Natural Hexagon Hex 25X30: G-7230

Толщина 10mm

Натуральный

Керамогранит

Starline — идеальный микс для создания эффектных композиций: формат и дизайн, нарушающие монотонность, дополняются ритмичным узором и линиями, которые навевают спокойствие.

Текстуры и интерьеры

Для скачивания текстур и интерьеров зарегестрируйтесь здесь.

HEX 25X30 PAVIMENTO

MCAJA: 0.935

PESOM: 23.280

PESOZ: 1.271

PESOCJ: 21.767

PZCAJA: 17

TIPOPZ: BASE

CJPALET: 48

PESOPALETS: 1067.816

КОЛЛЕКЦИЯ

Вдохновение для дома и любых других пространств

Другие плитка, которые могут быть Вам интересны

Представляем подборку продуктов, наиболее востребованных нашими пользователями.

Cookies Configuration
We install the technical cookies necessary for our website to function properly in your browser. On the other hand, we would like to install optional analytical cookies that allow us to know how you use our website and the sections you visit. You can then accept this configuration, modify it according to your preferences or reject it. More information in our Cookies Policy.

Cookies policy

TECHNICAL COOKIES REQUIRED

Necessary cookies activate basic functions such as page navigation and access to secure areas of the website. The website cannot function properly without these cookies.

+ Example of functionality

Example:
They allow you to apply for registration or participation in an event
Use security elements while browsing

PREFERENCE OR CUSTOMIZATION COOKIES

Preference cookies allow the website to remember information that changes the way the page behaves or the way it looks.

Allow Reject

+ Example of functionality

Example:
Your preferred language or the region in which you are located.

ANALYSIS OR MEASUREMENT COOKIES

Statistical cookies help web page owners understand how visitors interact with web pages by collecting and providing information anonymously. All this in order to improve the browsing experience.

Allow Reject

+ Example of functionality

Example:
They allow to measure, anonymously, the number of visits or activity.

ADVERTISING COOKIES

They allow the advertising we show you to be personalized and relevant to you. Thanks to these cookies you will not see ads that do not interest you.

Allow Reject

+ Example of functionality

Example:
They allow you to offer advertising according to your interests.

Cookies policy

Format-Hex (Microsoft.PowerShell.Utility) — PowerShell | Microsoft Узнайте

Редактировать

Твиттер LinkedIn Фейсбук Эл. адрес

  • Артикул
Модуль:
Microsoft.PowerShell.Утилита

Отображает файл или другой ввод в шестнадцатеричном формате.

Синтаксис

 Формат-Hex
      [-Путь] <Строка[]>
      [-Count ]
      [-Смещение ]
      [<Общие параметры>] 
 Формат-шестнадцатеричный
      -LiteralPath <Строка[]>
      [-Count ]
      [-Смещение ]
      [<Общие параметры>] 
 Формат-шестнадцатеричный
      -InputObject 
      [-Кодировка <Кодировка>]
      [-Count ]
      [-Смещение ]
      [-Сырой]
      [] 

Описание

Командлет Format-Hex отображает файл или другой ввод в виде шестнадцатеричных значений. Чтобы определить смещение символа от вывода, добавьте число в крайнем левом ряду к числу в вверху столбца для этого символа.

9Командлет 0029 Format-Hex может помочь вам определить тип поврежденного файла или файла, который может не иметь расширения имени файла. Вы можете запустить этот командлет, а затем прочитать шестнадцатеричный вывод чтобы получить информацию о файле.

При использовании Format-Hex для файла командлет игнорирует символы новой строки и возвращает весь содержимое файла в одну строку с сохранением символов новой строки.

Примеры

Пример 1: Получить шестнадцатеричное представление строки

Эта команда возвращает шестнадцатеричные значения строки.

 «Привет, мир» | Формат-шестнадцатеричный
Метка: Строка (System.String) <2944BEC3>
          Смещение байтов Ascii
                 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
          ------ ----------------------------------------------------------- --- -----
0000000000000000 48 65 6C 6C 6F 20 57 6F 72 6C 64 Hello World 

Строка Hello World отправляется по конвейеру в Командлет Format-Hex . Шестнадцатеричный вывод из Format-Hex показывает значения каждого символа в строке.

Пример 2. Поиск типа файла из шестнадцатеричного вывода

В этом примере шестнадцатеричный вывод используется для определения типа файла. Командлет отображает файл полный путь и шестнадцатеричные значения.

Чтобы протестировать следующую команду, сделайте копию существующего файла PDF на локальном компьютере и переименуйте скопированный файл в File.t7f .

 Format-Hex -Path .\File.t7f -Count 48
Метка: C:\Test\File.t7f
          Смещение байтов Ascii
                 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
          ------ ----------------------------------------------------------- --- -----
0000000000000000 25 50 44 46 2D 31 2E 35 0D 0A 25 B5 B5 B5 B5 0D %PDF-1,5..%????.
0000000000000010 0A 31 20 30 20 6F 62 6A 0D 0A 3C 3C 2F 54 79 70 .1 0 объект..<

Командлет Format-Hex использует параметр Path для указания имени файла в текущем каталоге, Файл.t7f . Расширение файла .t7f встречается редко, но шестнадцатеричный вывод %PDF показывает, что это представляет собой PDF-файл. В этом примере параметр Count используется для ограничения вывода первыми 48 байт файла.

Пример 3. Форматирование массива данных разных типов

В этом примере используется массив данных разных типов, чтобы показать, как Format-Hex обрабатывает их в Трубопровод.

Каждый объект будет проходить через конвейер и обрабатываться индивидуально. Однако, если это числовое data, а соседний объект также является числовым, он сгруппирует их в единый выходной блок.

 'Привет, мир!', 1, 1138, 'foo', 'bar', 0xdeadbeef, 1gb, 0b1101011100 , $true, $false | Формат-шестнадцатеричный
Метка: Строка (System.String) <24F1F0A3>
          Смещение байтов Ascii
                 00 01 02 03 04 05 06 07 08 090А 0В 0С 0D 0Е 0F
          ------ ----------------------------------------------------------- --- -----
0000000000000000 48 65 6C 6C 6F 20 77 6F 72 6C 64 21 Привет, мир!
   Метка: Int32 (System.Int32) <2EB933C5>
          Смещение байтов Ascii
                 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
          ------ ----------------------------------------------------------- --- -----
0000000000000000 01 00 00 00 72 04 00 00 � р� 
   Метка: Строка (System. String) <4078B66C>
          Смещение байтов Ascii
                 00 01 02 03 04 05 06 07 08 090А 0В 0С 0D 0Е 0F
          ------ ----------------------------------------------------------- --- -----
0000000000000000 66 6F 6F фу
   Метка: Строка (System.String) <51E4A317>
          Смещение байтов Ascii
                 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
          ------ ----------------------------------------------------------- --- -----
0000000000000000 62 61 72 бар
   Метка: Int32 (System.Int32) <5ADF167B>
          Смещение байтов Ascii
                 00 01 02 03 04 05 06 07 08 090А 0В 0С 0D 0Е 0F
          ------ ----------------------------------------------------------- --- -----
0000000000000000 EF BE AD DE 00 00 00 40 5C 03 00 00 ï¾-Þ @\� 
   Метка: логическое значение (System.Boolean) <7D8C4C1D>
          Смещение байтов Ascii
                 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
          ------ ----------------------------------------------------------- --- -----
0000000000000000 01 00 00 00 00 00 00 00 � 

Параметры

-Count

-Choding

-InputObject

-LiteralPath

-Offset

-Path

-RAW

Вход

-RAW

.

Выводы

ByteCollection

Этот командлет возвращает ByteCollection . Этот объект представляет набор байтов. Это включает в себя методы, которые преобразуют набор байтов в строку, отформатированную как каждая возвращенная строка вывода к Формат-Hex . В выводе также указывается тип обрабатываемых байтов. Если вы укажете Path или LiteralPath параметр, объект содержит путь к файлу, содержащему каждый байт. Если вы передаете строку, логическое значение, целое число и т. д., она будет помечена соответствующим образом.

Примечания

PowerShell включает следующие псевдонимы для Format-Hex :

  • Все платформы:
    • фхх

Крайний правый столбец вывода пытается отобразить байты как символы ASCII:

Как правило, каждый байт интерпретируется как кодовая точка Unicode, что означает, что:

  • Печатаемые символы ASCII всегда отображаются правильно
  • Многобайтовые символы UTF-8 никогда не отображаются правильно
  • Символы UTF-16 отображаются правильно, только если их старший байт равен NUL .
  • about_Quoting_Rules
  • Формат-Пользовательский
  • Список форматов
  • Таблица форматов
  • Широкий формат

Обратная связь

Отправить и просмотреть отзыв для

Этот продукт Эта страница

Просмотреть все отзывы о странице

Формат файла Intel HEX — Справка для разработчиков

Формат файла Intel HEX

Записи файла SQTP (строки текста) соответствуют формату файла Intel ® HEX. Intel HEX состоит из строк текста ASCII, разделенных символами перевода строки или возврата каретки, или и тем, и другим. Каждая текстовая строка содержит шестнадцатеричные символы, которые кодируют несколько двоичных чисел. Двоичные числа могут представлять данные, адреса памяти или другие значения в зависимости от их положения в строке, а также типа и длины строки.

Запись — это строка текста, состоящая из шести полей. Каждое поле содержит символ и несколько цифр в следующем порядке слева направо:

Поле 1. Стартовый код – один символ
Этот символ представляет собой двоеточие ASCII (:).
Поле 2. Счетчик байтов – две шестнадцатеричные цифры
Эти две цифры указывают количество байтов (пары шестнадцатеричных цифр) в поле данных. Максимальное количество байтов составляет 255 (0xFF).
Например, обычно используются счетчики 16 (0x10) и 32 (0x20) байт.
Поле 3. Адрес – четыре шестнадцатеричных цифры
Эти четыре цифры представляют 16-битное смещение начального адреса памяти данных.
Физический адрес данных вычисляется путем добавления этого смещения к ранее установленному базовому адресу. Это обеспечивает адресацию памяти за пределами 64-килобайтного предела 16-битных адресов. Базовый адрес, который по умолчанию равен нулю, может быть изменен различными типами записей.
Базовые адреса и смещения адресов всегда выражаются в виде значений с обратным порядком байтов.
Поле 4. Тип записи – две шестнадцатеричные цифры от 00 до 05
Эти две цифры определяют значение поля данных. Для SQTP используются только три типа; 00, 01 и 04 (см. таблицу в «Пример файла SQTP» ).
Поле 5. Данные – последовательность из n байтов данных.
Данные представлены 2n шестнадцатеричными цифрами. В некоторых записях это поле отсутствует (n равно нулю).
Значение и интерпретация байтов данных зависят от приложения.
Поле 6. Контрольная сумма — две шестнадцатеричные цифры
Эти две цифры представляют собой вычисленное значение, которое используется для проверки отсутствия ошибок в записи путем проверки суммы каждого байта в строке, равной нулю. См. раздел «Вычисление контрольной суммы».

Как указано в таблице форматов выше, последние два символа представляют собой контрольную сумму данных в строке. Поскольку контрольная сумма представляет собой двузначное шестнадцатеричное значение, она может представлять значение от 0 до 255 включительно.

Контрольная сумма вычисляется путем суммирования значения данных в строке, исключая начальное двоеточие и сам байт контрольной суммы, и берется их дополнение до двух. Например, рассмотрим строку:
:0300300002337A1E

Разбив эту строку на компоненты:

  • Длина записи: 03 (3 байта данных)
  • Адрес: 0030 (3 байта будут храниться по адресам 0030, 0031 и 0032)
  • Тип записи: 00 (обычные данные)
  • Данные: 02, 33, 7А
  • Контрольная сумма: 1E

Взяв все байты данных выше, мы должны вычислить контрольную сумму на основе следующих шестнадцатеричных значений:

03 + 00 + 30 + 00 + 02 + 33 + 7A = E2

Дополнение до двух для E2 равно 1E, что равно , как видите, значение контрольной суммы.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *