Что такое HEX-файл и для чего он используется. Какова структура и формат HEX-файла. Как открыть и редактировать HEX-файлы. Какие существуют программы для работы с шестнадцатеричными данными.
Что такое HEX-файл и его назначение
HEX-файл (от англ. hexadecimal — шестнадцатеричный) — это способ представления двоичных данных в текстовом виде с использованием шестнадцатеричной системы счисления. Основное назначение HEX-файлов:
- Хранение и передача двоичных данных в текстовом формате
- Представление содержимого исполняемых файлов, прошивок, дампов памяти
- Отладка программ и анализ двоичных данных
- Модификация двоичных файлов без использования специализированных редакторов
HEX-формат позволяет работать с двоичными данными в удобном для человека виде, сохраняя при этом всю информацию без потерь. Это делает его популярным форматом среди разработчиков и специалистов по компьютерной безопасности.
Структура и формат HEX-файла
Стандартный формат Intel HEX имеет следующую структуру:

- Каждая строка начинается с символа «:» (двоеточие)
- Далее следуют поля с информацией о данных и их размещении
- В конце каждой строки находится контрольная сумма
Типичная строка HEX-файла выглядит так:
:10010000214601360121470136007EFE09D2190140
Где:
- :10 — количество байт данных в этой строке (16 в десятичной системе)
- 0100 — адрес, по которому размещаются данные
- 00 — тип записи (00 — данные, 01 — конец файла и т.д.)
- 214601360121470136007EFE09D21901 — собственно данные
- 40 — контрольная сумма
Как открыть HEX-файл
Для просмотра содержимого HEX-файла можно использовать:
- Обычный текстовый редактор (например, Блокнот в Windows)
- Продвинутые текстовые редакторы с подсветкой синтаксиса (Notepad++, Sublime Text)
- Специализированные HEX-редакторы
Чтобы открыть HEX-файл в Блокноте:
- Кликните правой кнопкой мыши по файлу
- Выберите «Открыть с помощью» -> «Блокнот»
Однако для более удобной работы рекомендуется использовать специальные HEX-редакторы.
Популярные HEX-редакторы
Рассмотрим несколько бесплатных программ для работы с HEX-файлами:

HxD
HxD — мощный и простой в использовании HEX-редактор с широкими возможностями:
- Редактирование файлов любого размера
- Встроенный генератор контрольных сумм
- Поддержка различных кодировок
- Редактор оперативной памяти
- Экспорт данных в исходный код на C, Java и других языках
Free Hex Editor Neo
Free Hex Editor Neo отличается высокой производительностью и богатым функционалом:
- Быстрая обработка больших файлов
- Продвинутый поиск и замена
- Анализ и статистика данных
- Сравнение файлов
- Встроенный дизассемблер
Применение HEX-редакторов
HEX-редакторы находят применение в различных областях:
Отладка программ
Разработчики используют HEX-редакторы для:
- Анализа дампов памяти
- Поиска ошибок в бинарных файлах
- Изучения внутренней структуры программ
Реверс-инжиниринг
HEX-редакторы помогают изучать и модифицировать программы без исходного кода:
- Анализ алгоритмов работы
- Поиск уязвимостей
- Модификация поведения программ
Восстановление данных
С помощью HEX-редакторов можно:
- Анализировать поврежденные файлы
- Восстанавливать удаленную информацию
- Извлекать данные из нестандартных форматов
Преимущества и недостатки HEX-формата
Рассмотрим основные плюсы и минусы использования HEX-файлов:

Преимущества:
- Человекочитаемое представление двоичных данных
- Возможность легкого редактирования в текстовом виде
- Компактность по сравнению с другими текстовыми форматами
- Широкая поддержка различными инструментами
Недостатки:
- Увеличение размера файла по сравнению с двоичным представлением
- Необходимость конвертации для использования данных
- Сложность восприятия больших объемов информации
Безопасность при работе с HEX-файлами
При работе с HEX-файлами следует соблюдать меры предосторожности:
- Всегда создавайте резервные копии перед редактированием файлов
- Используйте проверенные HEX-редакторы из надежных источников
- Будьте осторожны при модификации системных файлов
- Не открывайте HEX-файлы из неизвестных источников
Соблюдение этих правил поможет избежать повреждения данных и проблем с работой системы.
Заключение
HEX-файлы представляют собой мощный инструмент для работы с двоичными данными. Они позволяют анализировать и модифицировать содержимое файлов на низком уровне, что делает их незаменимыми для разработчиков, специалистов по безопасности и энтузиастов компьютерных технологий. Правильное понимание структуры HEX-файлов и умение работать с HEX-редакторами открывает широкие возможности для анализа и модификации программ и данных.

СпецПромДизайн
Формат 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).
Каждая запись содержит поле 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
Маркер записи
Кол-во данных
Смещение
Тип записи
Данные
Контрольная сумма
Чем и как открыть файл HEX
Формат файла hex, сокращённо от «шестнадцатеричный» или «base-16», является структурой необработанных данных, которой следуют все файлы, хранящиеся на вашем компьютере. Хотя буквально каждый документ хранится в этом формате, найти его на ПК практически невозможно. Хотя далеко не все знают, что возможность напрямую изменять необработанные биты и байты на ПК иногда может быть очень полезна.
Что обозначает расширение HEX
Система счисления, которую люди используют для подсчёта, называется десятичной (числа от 0 до 9), и была изобретена персами около 6000 лет назад. В 1950-х или 1960-х годах IBM формализовала шестнадцатеричную систему счисления, которая является коротким способом представления двоичных данных. Вместо использования цифр 0-9, шестнадцатеричное число использует цифры от 0 до F. Достигнув конца числовых «цифр», вы просто увеличиваете число влево на единицу, точно так же, как вы делаете это с системой счёта десятичных чисел.
Файлы с расширением HEX имеют те же свойства, что и двоичные. Все байты размещаются один за другим. Информация об адресе или контрольные суммы не добавляются. Единственная разница с двоичным форматом такова, что каждый байт преобразуется в 2 символа ASCII в диапазоне 0-9 и A-F, представляющие 2 шестнадцатеричные цифры. Эти символы сгруппированы по строкам. Номер пары в строке обычно может варьироваться от 1 до 255, где наиболее общей длиной являются 16 или 32 пары. Каждая строка заканчивается парой CR (ASCII-значение $ 0D) или CRLF (ASCII). Для работы с такими документами требуется специальная программа-редактор хекс-файлов. Она в удобном виде выведет всю информацию и позволит достаточно комфортно её воспринимать и изменять.
Как открыть файл HEX
Далеко не все являются программистами, и иногда открыть файл с расширением HEX может понадобиться обычному человеку, чтобы посмотреть в нём некую информацию. На самом деле для такой простой задачи вполне достаточно обычного Блокнота – стандартного приложения, которое имеется в любой системе Windows. Ведь этот файл, по сути, является текстовым, просто в нём записана специфическая информация, но обычными символами.
Для этого достаточно кликнуть на файле правой кнопкой мыши, выбрать в меню пункт «Открыть» или «Открыть с помощью», затем «Выбрать из списка установленных программ», а далее просто выбрать стандартный Блокнот. Снимите галочку с пункта «Использовать выбранную программу для всех файлов этого типа» — вдруг вы его потом будете открывать другой программой. Можно просто открыть Блокнот, а файл в него перетащить, и он откроется.
Гораздо удобнее для открытия таких файлов подходит другая версия Блокнота – Notepad++. Скачать можно по этой ссылке. Эта программа также есть у многих, так как более удобна. Но она может к тому же распознавать многие языки программирования и файлы HEX в ней выглядят гораздо удобнее, так как есть выделение цветом. Notepad++ представляет собой как бы примитивный HEX-редактор, и этим можно пользоваться совершенно свободно.
Так выглядит HEX-файл, открытый в Notepad++. В стандартном Блокноте так же, но без цвета.
А теперь рассмотрим более подробно, для чего может понадобиться открывать, а тем более изменять файлы с шестнадцатеричным содержимым. Кстати, если вы собираетесь делать это часто, то лучше скачайте и установите специальный HEX-редактор – их в Интернете довольно много. Некоторые из них подробнее рассматриваются далее.
Взлом игр и файлов
Популярная причина, по которой вы можете использовать шестнадацтеричный редактор, – взлом игр. Вы можете загрузить документ сохранения игры и изменить сумму денег, например, от 1000 до 1000000 долларов. В более поздних играх всё сделано намного сложнее. Многие современные игры используют либо сжатие, либо шифрование, что во много раз затрудняет декомпиляцию состояния сохранения или игры. Тем не менее, некоторые игры по-прежнему позволяют редактировать определённые переменные, например, Sonic Spinball. В дополнение к просмотру файлов игры, из сохранённого файла иногда можно извлечь другую важную информацию, к которой у вас иначе не было бы доступа. Это сильно зависит от типа файла и того, какую информацию вы ищете, но использование шестнадцатеричного редактора полезно для определения того, что именно находится в документе.
Отладка и редактирование
Наконец, еще одна популярная причина, по которой вы можете использовать шестнадцатеричный редактор, – это если вы программист, и вам нужно отладить код. Вместо того, чтобы возвращаться к перекомпиляции кода, для проверки шаблона может потребоваться простое шестнадцатеричное редактирование. Но для начала обязательно убедитесь, что у вас есть резервная копия, прежде чем изменять какие-либо файлы с помощью шестнадцатеричного редактора.
Какие hex-редакторы использовать
Шестнадцатеричный редактор представляет собой софт, используемый для просмотра и редактирования бинарных файлов. Двоичный документ представляет собой документ, который содержит данные в машиночитаемой форме. HEX-редакторы позволяют изменять содержимое необработанных данных файла. Поскольку шестнадцатеричный редактор используется для редактирования двоичных файлов, их иногда называют двоичным редактором или редактором двоичных файлов. Если открыть документ с помощью шестнадцатеричного редактора, появится сообщение о том, что документ редактируется в шестнадцатеричном формате, а процесс использования шестнадцатеричного редактора называется шестнадцатеричным редактированием. Шестнадцатеричные редакторы отличаются от обычных текстовых рядом функций. Основой шестнадцатеричного редактора является то, что они отображают необработанное содержимое файла. Нет кодирования или перевода в текст – только необработанный машинный код. Во-вторых, номера строк вместо того являются адресом смещения от начала файла. Мы подобрали несколько лучших бесплатных программ для просмотра и редактирования документов HEX.
HxD
HxD – это бесплатный шестнадцатеричный редактор, который может открывать и изменять компьютерный код. Это очень мощная утилита в правильных руках, которая может проверять, сравнивать и диагностировать файлы, диски, образы дисков, память и журналы, а также исправлять ошибки и восстанавливать структуру диска.
Преимущества:
- Действительно большие данные – последняя версия HxD обрабатывает большие наборы данных. Если он помещается на диск, HxD сможет его открыть.
- Стандартные параметры – HxD содержит множество полезных дополнений, таких как генератор контрольных сумм, поддержка нескольких наборов символов, редактор ОЗУ, уничтожитель файлов, разбиение и объединение, неограниченное количество отмен и портативная версия.
- Экспорт данных – программа экспортирует данные в исходный код (C, C#, Java, Pascal и VB.NET) или в шестнадцатеричные форматы.
Недостатки:
- Не для неопытного пользователя, но это не недостаток. Программа ориентирована на продвинутых пользователей.
DeltaHex Editor
Один из лучших hex-редакторов на основе библиотеки deltahex. Используйте действие «Открыть как шестнадцатеричный» в главном меню «Файл» или в контекстном меню файлов проекта.
Характеристики:
- Отображение данных в виде шестнадцатеричного кода, предварительный просмотр текста.
- «Вставить» и «Перезаписать» режимы редактирования.
- Поддержка выбора и буфера обмена.
- Отмена/повтор.
- Выбор кодировки.
- Отображение непечатных символов.
- Коды также могут быть двоичными, восьмеричными или десятичными.
- Поиск текстового/шестнадцатеричного кода с соответствующей подсветкой.
- Дельта-режим – изменения сохраняются только в памяти до сохранения.
- Поддержка огромных файлов.
Free Hex Editor Neo
Free Hex Editor Neo – это самый быстрый бесплатный редактор двоичных файлов для платформы Windows. Алгоритмы обработки данных Neo Hex Editor чрезвычайно оптимизированы и тщательно настроены для обработки операций с большими файлами.
Характеристики программы:
- Неограниченное Undo/Redo.
- Редактировать, Копировать, Вырезать, Вставить, Удалить, Заполнить, Импорт/Экспорт, Вставить шаблон/файл, Изменить размер файла, Смещение к началу, Изменить биты.
- Поиск и замена шаблонов.
- Подсветка.
- Байты, слова, двойные слова, группировка четырёх слов.
- Шестнадцатеричное, Десятичное, Восьмеричное, Двоичное и т.д. представление данных.
- Изменение атрибутов файла.
- Анализ данных буфера обмена.
- Создание бинарных патчей, поиск/замена регулярных выражений.
- Многоязычный интерфейс.
Функции и возможности утилиты:
- Статистика и шестнадцатеричный анализатор – модуль анализа двоичных данных позволяет анализировать распределение байтов, символов и строк по шестнадцатеричным дампам и текстовым данным.
Анализатор двоичных файлов Neo поддерживает шаблоны следующих типов: шаблоны символов и строк ASCII/Unicode, шаблоны данных Hex, Decimal, Octal, Binary, Float, Double и RegEx (Regular Expression).
- Графическое представление проанализированных данных в пользовательском интерфейсе Neo – софт поддерживает тепловую карту и визуализацию данных гистограммы. Вы также можете анализировать двоичный документ в форме описательной статистики: среднее значение, дисперсия выборки, стандартное отклонение, стандартная ошибка, эксцесс, асимметрия, медиана, диапазон, минимальное, максимальное, сумма и т.д.
- Сравнение файлов – Neo представляет собой расширенный инструмент сравнения в шестнадцатеричном формате. Встроенный редактор hex позволяет сравнивать 2 шестнадцатеричных файла, используя два разных алгоритма сравнения: простой (от байта к байту) и алгоритм разности (сопоставление блоков).
- Редактор ОЗУ – модификатор процесса позволяют редактировать память и обрабатывать данные, загруженные в ОЗУ ПК операционной системой.
RAM Explorer предоставляет возможность легко просматривать загруженные процессы и переходить к определённым смещениям. Затем вы можете напрямую обращаться к этим блокам данных и редактировать их в окне шестнадцатеричного редактора. Таким образом, Hex Editor Neo предоставляет возможность просматривать и редактировать данные бинарных программ прямо в оперативной памяти.
- Дизассемблер – программа также позволяет разбирать исполняемые файлы x86, x64 и .NET. Neo Assembler View поддерживает следующие наборы инструкций: x86, x86-64, MMX, SSE, SSE2, 3DNow!, MSIL. Вы можете загружать файлы символов как для 32-битных, так и для 64-битных исполняемых файлов. Neo – просто идеальный редактор dll/exe!
- Двоичные шаблоны/редактор структуры – программа поддерживает синтаксический анализ внутренней структуры следующих файлов: exe, dll, sys, ocx, bmp, png, avi, rar, icc, vhd, zip, tiff, wav, tga, psd, pic, pcx, pal, emf EPS.
- Модуль Structure View – позволяет настраивать двоичные шаблоны.
Вы можете написать своё собственное определение структуры файла, используя внутренний язык, подобный C/C++, почти для любого двоичного документа. Например, если вы хотите редактировать файлы данных, вам нужно сначала описать файловую структуру, а затем привязать её к конкретному файлу, используя специальное окно редактора.
- Анализатор структуры файла делает двоичную корректировку намного проще, чем просто редактирование необработанных шестнадцатеричных байтов. Открывайте, просматривайте и редактируйте файлы hex/bin с небывалой лёгкостью!
Hex Editor Neo предоставляет базовые, расширенные и даже инновационные функции. Шестнадцатеричное редактирование теперь доступно каждому начинающему пользователю!
PSPad
Любимый шестнадцатеричный редактор большинства программистов. PSPad, помимо того, что он является отличным редактором текста и кода, предлагает опцию «Открыть в HEX Editor…», которая запускает специальный режим редактирования. Когда вы находитесь в этом режиме, вы можете увидеть местоположение и шестнадцатеричные значения каждого бита файла. У вас есть два варианта корректировки – вы можете редактировать шестнадцатеричные значения по местоположению, или справа у вас есть буквенно-цифровое представление этого значения, которое вы также можете редактировать.
XVI32
XVI32 также очень способный шестнадцатеричный редактор. Как и в PSPad, вы можете редактировать шестнадцатеричные значения напрямую или через отображение символов. В нём также есть несколько расширенных инструментов редактирования шестнадцатеричных кодов, таких как калькулятор адресов для проверки смещений и других специфичных для шестнадцатеричных данных параметров, которые могут помочь вам обойти шестнадцатеричный документ. Если вы, конечно, знаете, что делаете.
Знание того, как работает ваш ПК, становится всё более и более важным, поскольку техника становится всё проще и проще в использовании. Если у вас остались вопросы относительно редактирования шестнадцатеричных файлов, оставьте комментарий под этой статьёй.
Формат файла 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, что равно , как видите, значение контрольной суммы. Дополнение числа до двух — это значение, которое необходимо прибавить к числу, чтобы получить значение 256 (десятичное число). Другими словами, E2 + 1E = 100.
Вы также можете вычислить дополнение до двух, вычитая значение из 100h. Другими словами, 100h — E2h = 1Eh, что является контрольной суммой.
Если рассматриваемое значение больше FFh, просто взять часть, которая меньше 100h.
Например, если вам нужно дополнение до двух для значения 494h, просто отбросьте ведущую цифру «4», и у вас останется 94h. Дополнение до двойки 94h равно 6Ch.
Вернуться к началу
Объяснение формата шестнадцатеричного файла Intel
Мы часто сталкиваемся с проблемой, когда понимание формата шестнадцатеричного файла Intel помогает решить проблему программирования или техническую проблему. Формат Intel Hex — это стандартная компоновка файлов, создаваемых ассемблером или компилятором C при компиляции исходного кода. Он используется программистами устройств для программирования целевого микроконтроллера с помощью вашего кода.
Символы ASCII
Ассемблер или компилятор C могут просто выводить двоичные данные, которые нужны микроконтроллеру, и сохранять их в виде двоичного файла. Если вы настроите свой компилятор на вывод файла .bin, он будет выглядеть как мусор в текстовом редакторе, поэтому файл Intel Hex хранит данные в виде символов ASCII, которые могут быть прочитаны редактором. Программист устройства должен преобразовать эти значения ASCII в двоичные данные для микроконтроллера.
В этом посте не будет обсуждаться ASCII, кодировка данных, Unicode или другие способы отображения данных в текстовом редакторе, но вы должны знать, что формат Intel Hex использует кодировку символов, чтобы вы могли понять вывод.
Intel Hex Data Layout
Каждая строка в Intel Hex-файле имеет одинаковую базовую структуру, например:
:BBAAAATT[DDDDDDDD]CC
, где
: 007 — маркер начала строки. — количество байтов данных в строке
AAAA — адрес в байтах
TT — тип, обсуждаемый ниже, но 00 означает данные дополнение числа байт+адрес+тип+данные)
Вот пример.
:10000000112233445566778899AABBCCDDEEFF00F8
Строка должна начинаться с двоеточия, :, за которым следует количество байтов данных в строке, в данном случае 0x10 или 16 десятичных знаков. Каждый байт данных представлен двумя символами.
Вот пример всего с четырьмя байтами данных в строке:
:040010001122334442
Далее в строке идет 2-байтовый адрес, представленный 4 символами, с возможными значениями от 0x0000 до 0xFFFF (от 0 до 64 КБ) . Далее следует тип. Это может иметь диапазон значений в зависимости от того, содержит ли строка данные или нет. Тип 00, как в этих примерах, показывает, что строка содержит данные.
Далее идут байты данных, 2 символа в байте. Количество байтов данных устанавливается в начале строки.
Контрольная сумма
Каждая строка должна заканчиваться контрольной суммой. Это дополнение до 2 суммы количества байтов плюс адрес плюс данные. Для этого сложите количество байтов, адрес и все данные и отбросьте любой перенос, чтобы получить 8-битную сумму. Запишите это в двоичном формате, затем инвертируйте каждую цифру, чтобы получить комплимент 1s. Добавьте один, чтобы дать 2s-комплимент.
Контрольная сумма в строке этого примера :040010001122334442 равна 42. Это вычисляется следующим образом: в двоичном формате.
Инвертировать это значение, например, XOR с 0xFF дает 01000001 = 0x41.
Добавить 1, дает результат 0x42, что соответствует показанной контрольной сумме. Калькулятор программистов в Windows упрощает эту операцию.
Генератор контрольных сумм
Томас Фишл предоставил онлайн-генератор контрольных сумм для строк в шестнадцатеричном файле. Это очень полезно для проверки файлов или для изменения значений в шестнадцатеричном файле на лету, так как при изменении данных будет создаваться новая правильная контрольная сумма.
https://www.fischl.de/hex_checksum_calculator/
Другие типы
Тип данных 00 указывает, что строка содержит байты данных. Другим типом, который должен встречаться в каждом шестнадцатеричном файле Intel, является 01, так как это маркер конца файла. Каждый файл должен заканчиваться типом 01, который выглядит так: :00000001FF .
Другие типы, которые вы можете увидеть, это 02 и 04, которые показывают, что строка является расширенной адресной строкой.
Расширенные адреса
Возможно, вы поняли, что с возможным диапазоном адресов от 0x0000 до 0xFFFF этот формат файла Intel Hex может хранить только 64 КБ (0xFFFF) данных. Новые микроконтроллеры и, конечно же, микросхемы памяти могут хранить гораздо больше данных, чем это, так как мы можем включать данные выше 64 КБ?
Ответ заключается в использовании типа, который означает, что строка представляет собой расширенный адрес, а не строку, содержащую данные, и оба типа 02 и 04 делают это немного по-разному. Поскольку стандартная адресация от 0 до 0xFFFF, нам нужен маркер, который увеличивает адрес следующего блока на 0x10000, следующего блока на 0x20000, затем 0x30000 и так далее.
Первый блок имеет адреса в обычном диапазоне 0..0xFFFF. Затем у нас есть маркер расширенного адреса, который означает добавление 0x10000 ко всем последующим адресам, что дает возможные адреса от 0x10000 до 1FFFF. Затем у нас могут быть дополнительные расширенные адреса, которые добавляют 0x20000 к каждому следующему адресу, 0x30000, 0x40000 и т. д.
Оба типа 02 и 04 делают это.
02 Тип линейного адреса
Для каждого блока размером 64 КБ это имеет следующую форму:
1-й блок — добавить 0x00000: :020000020000FE
2-й блок — добавить 0x10000: :020000021000FD
3-й блок — добавить 0x20000: :020000022000FC
4-й блок — добавить 0x30000: :020000023000FB
00 становится 0x10000, 0x2000 становится 0x20000 и так далее. Большинство файлов с расширенной адресацией включают первый нулевой маркер :020000020000FE, но это ничего не дает — сдвиг 0x0000 влево на 4 по-прежнему равен нулю.
04 Расширенный тип адреса
Делает то же самое, но имеет немного другой формат
:020000040000FA
:020000040001F9
:020000040002F8
:020000040003F7
:020000040004F6
это значение времени сдвинуто влево 4.