Структура hex-файла

Формат файлов *.hex

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

Для начала разберёмся — чем же оказались неудобны бинарники? Во-первых, в таблице ASCII некоторым кодам соответствуют непечатные символы, соответственно, бинарный файл не может быть целиком просмотрен или распечатан в текстовом режиме. Во-вторых, прошивка редко занимает целиком всю память железки, а бинарник — это, как уже было сказано выше, дамп памяти целиком.

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

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

Почесав репу над этими двумя недоразумениями, джедаи из Intel придумали формат hex или Intel-hex, ставший впоследствии стандартом де-факто для записи всяких разных прошивок.

Мне больше нравится говорить Intel-hex, поскольку в этом случае не возникает путаницы и сразу понятно, что речь идёт об информации в файлах *.hex, а не просто о представлении данных в шестнадцатиричном виде.

Ну ладно, вернёмся к проблемам Intel и к их решению.

Проблему с непечатными символами решили очень просто, — в Intel-hex формате двоичные данные, представленные в шестнадцатиричном виде, записываются символами ASCII. Например, число «00111111» в шестнадцатиричном виде равно «3F» и в формате Intel-hex будет записано двумя символами: «3» и «F».

Не на много сложнее оказалось и решение проблемы с пустыми местами. В *.hex файлы решили писать не всё подряд, а только полезные данные (т.е. пустые места бинарника решили не писать). Но в этом случае нужно было кроме самих данных ещё и как-то указывать адреса, по которым эти данные расположены. Окей, стали писать ещё и адреса.

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

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

  • Data Record (данные); для всех форматов данных
  • End of File Record (конец файла); для всех форматов данных
  • Extended Segment Address Record (расширенный адрес сегмента); для 16- или 32-битного форматов данных
  • Start Segment Address Record (начальный адрес сегмента); для 16- или 32-битного форматов данных
  • Extended Linear Address Record (расширенный линейный адрес); только 32-битного формата данных
  • Start Linear Address Record (начальный линейный адрес); только для 32-битного формата данных

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

RECORD MARK‘:’ RECLEN LOAD OFFSET RECTYPE INFO or DATA CHKSUM
1 byte 2 bytes 1 byte n bytes 1 byte
1 ASCII 2 ASCII 4 ASCII 2 ASCII 2*n ASCII 2 ASCII

В данном случае:

  • RECORD MARK — метка начала записи, всегда ‘:’ (в шестнадцатиричном виде 3Ah)
  • RECLEN — число байт информации или данных, следующих за полем RECTYPE. Помните, что в Intel-hex формате один байт данных записывается двумя символами ASCII. Максимальное значение этого поля — ‘FF’ (в шестнадцатиричном виде 4646h)
  • LOAD OFFSET — 16-ти битное начальное смещение данных. Поскольку это поле используется только в записях данных, то в остальных записях оно кодируется как четыре ASCII символа нуля (‘0000’ или в шестнадцатиричном виде 30303030h)
  • RECTYPE — поле, определяющее тип записи. Может принимать следующие значения:
    • ’00’ — Data Record
    • ’01’ — End of File Record
    • ’02’ — Extended Segment Address Record
    • ’03’ — Start Segment Address Record
    • ’04’ — Extended Linear Address Record
    • ’05’ — Start Linear Address Record
  • INFO or DATA — поле, содержащее 0 или больше байт, закодированных парами шестнадцатиричных символов в формате ASCII (т.е. одна пара ASCII символов — это один байт, например, пара символов ‘B’ ‘3’ соответствует байту B3h ). Интерпретация содержимого этого поля зависит от типа записи (т.е. от значения поля RECTYPE).
  • CHKSUM — контрольная сумма, которая вычисляется как дополнение по модулю 256 до нуля суммы по модулю 256 всех байт, начиная с RECLEN (включительно) до последнего байта поля INFO/DATA (включительно).Тем, кто подзабыл логические операции, поясню немного по другому. Нужно последовательно сложить все байты, так, чтобы результат каждого сложения занимал так же один байт, при этом пеполнение не учитывается и просто отбрасывается, — это будет операция сложения по модулю 256. Далее нужно от 256 отнять полученный байт (или можно по другому — сделать инверсию полученного байта и увеличить результат инверсии на 1) — это будет вычисление дополнения по модулю 256 до нуля.Естественно, в Intel-hex файле CHKSUM записывается так же, как и все остальные байты с помощью двух символов ASCII.

    CHKSUM, вычисленная подобным образом, придаёт записи интересное свойство, — теперь сумма по модулю 256 всех байт, начиная с RECLEN (включительно)до CHKSUM (включительно) даёт в результате ноль. Так проверяется целостность и безошибочность записи при считывании.

А теперь о некоторых типах записей подробнее:

Extended Linear Address Record
RECORD MARK RECLEN LOAD OFFSET RECTYPE ULBA CHKSUM
‘:’ ’02’ ‘0000’ ’04’ 2 bytes 1 byte

Эта запись используется в 32-битных прошивках для определения битов 16-31 линейного базового адреса (LBA), при этом биты 0-15 равны нулю. Сами биты 16-31 называются верхним базовым адресом (ULBA).

Абсолютное значение адреса байта данных в памяти получается добавлением LBA к смещению, вычисленному сложением поля LOAD OFFSET в последующих записях данных и индекса байта в поле DATA этих записей. Все суммирования делаются по модулю 4G, таким образом мы получаем циклический (от FFFFFFFFh происходит переход к 00000000h) 4-х гигабитный (4G=232) линейный адрес (Linear Address).

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

DRLO — значение поля LOAD OFFSET в записи данных

DRI — индекс байта в поле DATA записи данных

Когда запись «Extended Linear Address» встречается в файле, — заданный с помощью неё линейный базовый адрес (LBA) действует для всех последующих записей данных, пока не встретится новая запись «Extended Linear Address». По умолчанию LBA=00000000h.

Extended Segment Address Record
RECORD MARK RECLEN LOAD OFFSET RECTYPE USBA CHKSUM
‘:’ ’02’ ‘0000’ ’02’ 2 bytes 1 byte

Эта запись используется для определения битов 4-19 базового адреса сегмента (SBA), при этом биты 0-3 равны нулю. Сами биты 4-19 называются верхним адресом сегмента (USBA).

Абсолютное значение адреса байта данных в памяти получается добавлением SBA к смещению, вычисленному сложением поля LOAD OFFSET в последующих записях данных и индекса байта в поле DATA этих записей.

Сложение LOAD OFFSET и индекса выполняется по модулю 64K, таким образом мы получаем циклический (от смещения FFFFh происходит переход к 0000h) 64-х килобитный (64K=216) адрес в заданном сегменте.

ByteAddr=SBA+[(DRLO+DRI) mod 64K], где

DRLO — значение поля LOAD OFFSET в записи данных

DRI — индекс байта в поле DATA записи данных

Когда запись «Extended Segment Address» встречается в файле, — заданный с помощью неё базовый адрес сегмента (SBA) действует для всех последующих записей данных, пока не встретится новая запись «Extended Segment Address». По умолчанию базовый адрес сегмента (SBA) равен нулю.

Start Linear Address Record
RECORD MARK RECLEN LOAD OFFSET RECTYPE EIP CHKSUM
‘:’ ’04’ ‘0000’ ’05’ 4 bytes 1 byte

Эта запись используется для указания адреса, с которого начинается исполнение объектного файла. Значение поля EIP определяет адрес, который заносится в регистр EIP процессора.

Отметим, что эта запись определяет только адрес точки старта кода в пределах 32-х битного линейного адресного пространства защищённого режима процессора 80386.

В реальном режиме для определения точки старта должна использоваться запись Start Segment Address Record, поскольку она описывает содержимое пары регистров CS:IP, необходимое для реального режима.

Запись «Start Linear Address» может быть расположена в любом месте файла, если же такой записи нет, то загрузчик использует адрес старта по умолчанию.

Start Segment Address Record
RECORD MARK RECLEN LOAD OFFSET RECTYPE CS:IP CHKSUM
‘:’ ’04’ ‘0000’ ’03’ 4 bytes 1 byte

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

Запись «Start Segment Address» может быть расположена в любом месте файла, если же такой записи нет, то загрузчик использует адрес старта по умолчанию.

Источник: http://radiohlam.ru/?p=1151

Формат Intel-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).

Каждая запись содержит поле 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”. Запись обозначает конец данных в файле. Все последующие строки, если они есть в файле, игнорируются.

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

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

Источник: https://spd.net.ru/Article/Intel-HEX.aspx

Что такое HEX и ASCII-дескрипторы или как определить формат файла без расширения

Как известно любая информация будь то текст, изображение или видео, по сути, является ничем иным как набором двоичного кода — последовательности нулей и единиц. Именно в таком виде на жёстком диске хранятся данные.

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

Положительный заряд такой ячейки имеет знак плюс или 1, отрицательный — минус или 0.

Логически объединенные последовательности нулей и единиц как раз и составляют то, что мы называем файлами. Но ведь мы знаем и то, что типов файлов очень много.

Есть текстовые файлы, мультимедийные, архивные, системные, исполняемые и так далее.

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

Но что будет, если расширение удалить? Всё правильно, операционная система не сможет открыть такой файл, так как не будет знать какую программу для этого использовать.

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

Уверены, с этим у вас проблем не возникнет.

Следовательно, вовсе не расширение определяет тип файла. Тогда что же? Тип файла определяет его формат или иначе спецификация структуры данных. Расширение и формат очень часто путают, хотя на деле это совершенно разные понятия. Тут возникает вполне закономерный вопрос, а как определить формат файла, если его расширение по какой-то причине оказалось утрачено? Оказывается очень просто.

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

Отвечающая за определение типа файла часть заголовка файла именуется дескриптором или описанием. Наиболее распространёнными типами дескрипторов являются HEX и ASCII.

Первый тип заголовков можно просмотреть только с помощью специальных утилит — шестнадцатеричных редакторов.

Для просмотра дескрипторов второго типа можно обойтись обычным текстовым редактором, тем же Блокнотом или Notepad++. Однако следует учитывать, что далеко не все последовательности байтов можно перевести в ASCII-код, поэтому для определения формата всё-таки лучше использовать HEX-редакторы.

Открытый в HEX-редакторе файл отображается в виде матрицы из последовательности байтов. Каждая ячейка соответствует одному байту. Данные дескриптора содержатся как раз в первых трёх ячейках (реже двух или четырех), расположенных по горизонтали.

Представляют они из себя шесть символов в шестнадцатеричном счислении, например 49 44 33 или ff d8 e0.

Естественно они нуждаются в расшифровке. А расшифровать их можно на специальных сайтах с описаниями форматов. Одним из лучших сайтов, где можно определить формат по HEX-дескриптору является open-file.ru.

Есть и другие подобные ресурсы, но они не настолько удобны. На open-file.ru же имеется специальная поисковая форма, куда можно вставить HEX или ASCII дескриптор и пробить его по базе данных.

Система быстро найдёт соответствующий формат и предоставит вам его полное описание.

С HEX-редакторами всё более или менее понятно, но как мы сказали для определения ASCII-заголовков также можно использовать редакторы текстовые. Принцип здесь тот же самый, открываем файл Блокнотом или Notepad++, копируем первые символы и вставляем их в поисковое поле того же open-file или другого сайта с поддержкой поиска по заголовкам.

Казалось бы всё очень просто, но есть в деле идентификации форматов и свои сложности. Иногда ASCII-заголовки совпадают с расширением файла (RAR и PDF), но может быть и такое, что заголовок оказывается принадлежащим сразу нескольким форматам. Это можно видеть на примере офисного формата DOCX (PK и 50 4b 03 04). В таких случаях точно определить формат проблематично.

Но круг поиска можно сузить. Для этого рекомендуется просматривать первую, вторую и третью строку заголовка в текстовом редакторе, так как содержащиеся в них элементы также могут косвенно указывать на принадлежность к тому или иному типу файлов.

Так, строка [Content_Types].xml в DOCX явно указывает на то, что исследуемый файл является размеченным текстовым документом.

Источник: https://www.white-windows.ru/chto-takoe-hex-i-ascii-deskriptory-ili-kak-opredelit-format-fajla-bez-rasshireniya/

Что такое HEX редакторы и зачем они нужны

Сейчас будет большой материал на тему того, из чего состоят данные и как их можно редактировать.

Многие знают, что любой файл на компьютере (картинка, текстовый или мультимедийный) представляет собой двоичный код – нули и единицы.

Для редактирования таких файлов используются HEX-редакторы – приложение, редактирующее данные, состоящие из байтового кода. Байты в редакторе представлены в виде шестнадцатеричной системы.

Расширение файла

Проблема заключается в огромном количестве типов файлов и поначалу не ясно, каким образом операционная система определяет текстовые, мультимедийные или архивные и прочие типы данных. Как известно, определение файла системой осуществляется с помощью расширения, добавляемого после названия, например, «.exe», «.txt» и другие.

Настройки в ОС гибкие, а значит расширение любого файла можно удалить, но тогда операционная система не сможет открыть его, она не поймет, с помощью какой программы его запустить. При этом логическая структура объекта не изменится. На изображении видно текстовый файл, а рядом с ним тот же самое, но без расширения и иконка у него белая.

Если объект без расширения остается тем же самым файлом с логическим набором символом, значит расширение не определяет его тип, но тогда что? Есть такое понятие, как формат – это и определяет тип, также это есть спецификация структуры данных. Расширение же совершенно другой термин. А что делать, если пользователю изначально попался файл без расширения, но его срочно нужно открыть, а чем – неизвестно?

Дескрипторы

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

Вторая составляющая – «тело» объекта, с помощью которого определяется тип объекта и части заголовка, имеющего название дескриптора. Два популярных дескриптора – ASCII и HEX.

Второй вариант анализируется при помощи редакторов, о которых было сказано в начале.

Первый метод ASCII определяется с помощью текстового редактора, например, Notepad++, правда, стоит учесть один момент – некоторые наборы байтов не удастся преобразовать в формат ASCII, а значит рекомендуется применять HEX-редакторы.

Запустив любой файлик с помощью такой утилиты, в окне отобразится вид матрицы с последовательностью байтов, где один байт содержится в одной из ячеек. Сведения о дескрипторе обычно находятся в первых 3-х ячейках, редко в большем количестве. Ячейки считаются по горизонтали.

Данные, отображённые в ячейках представлены в виде шестнадцатеричном коде.

Расшифровка дескриптора

Чтобы понять, что за данные там находятся, нужно код расшифровать. Для этого понадобится специальный сервис, определяющий форматы файлов, например, open-file.ru. Но есть и другие ресурсы, которые легко найти в интернете. После загрузки файла на сайт произойдет анализ данных, а затем вывод результата. Ниже появится таблица с типом, форматом и описанием файла.

То, что мы разобрали выше – использование HEX-редакторов. Теперь разберемся с кодом ASCII. Данный код можно проанализировать при помощи того же open-file.ru. Другими словами, оба кода проверяются на ресурсе и ничего по сути не нужно вводить.

Иногда формат определить не так просто. Это касается ASCII-заголовков. Дело в том, что первые несколько символов могут иметь отношение к расширениям файла, а может и к нескольким форматам.

Конечно, есть вариант определения формата. Для анализа будет использоваться несколько строк, а не одна. Тогда какой-то из элементов, находящийся там, по любому будет указывать на тип объекта.

Что еще можно делать с помощью HEX-редактора

Помимо того, что HEX-редакторы помогают проанализировать любой файл, возможно:

  1. работать с дисковыми образами;
  2. редактировать разделы;
  3. изменять содержимое ОЗУ;
  4. изменять виртуального адресного пространства процесса и прочее.

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

Любой код программы можно изменить с помощью HEX-редактора. Конечно, это нужно уметь делать, находить нужные данные. Таким образом, добиваются исправления ошибок в коде, либо используют для взлома и читерства.

Это значит, применение HEX-редакторов очень широкое.

Какие HEX-редакторы использовать

Существует очень много программ для редактирования данных, и вот они представлены ниже:

Free Hex Editor Neo

Популярная утилита для Windows. С помощью неё пользователю не составит открыть любой тип файла и изменить его. Если что-то отредактировано не так, в утилите есть история изменений и всегда можно вернутся к изначальному состоянию.

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

WinHex

Данный редактор можно использовать в демо-версии некоторое время, а потом необходимо приобрести. Инструмент универсальный, где обнаружено много интересных опций.

Есть возможность работать не только с файлами, но и с жёсткими дисками, флеш-носителями, оптическим дисками и даже дискетами. Поддерживаются все файловые системы Windows. Поддерживает функции клонирования разделов и полного удаления данных без возможности восстановления

Если вы новичок, то этой программы вам хватит, тем более в разделе Help есть опция переключения на русскоязычный интерфейс.

HexCmp

Утилита 2 в 1, так как имеет функцию сравнения файлов и встроенный HEX-редактор. Иногда может понадобится сравнения данных файлов, для определения отличий и сходств, и анализа структуры объектов различных форматов.

При отличии в двух файлов области на матрице будут окрашены в какой-либо цвет, а само сравнение происходит в считанные секунды. Правда, для анализа подойдут файлы не более 4 GB.

Сама утилита имеет возможности изменения интерфейса. Что значит, пользователь может настроить его под себя. Работа будет происходить быстрее.

HxD Hex Editor

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

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

Hex Workshop

Если какой-то файл не открылся в одном редакторе, значит откроется в этом. Поэтому я и привел здесь список из нескольких утилит. Указанный инструмент отвечает за открытие бинарных файлов. Настроек много, а системные требования доступны для любого компьютера.

Работа в этом редакторе проста, как при печати в Word. Есть опции сравнения файлов, их контрольных сумм и экспорт анализа в различные форматы, например, html.

Если необходимо перевести один код в другую систему счисления, то в Hex Workshop присутствует конвертер. Программка условно-бесплатная, что можно считать одним из недостатков.

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

https://computerinfo.ru/chto-takoe-hex-redaktory/https://i0.wp.com/computerinfo.ru/wp-content/uploads/2018/08/chto-takoe-hex-redaktory-1.png?fit=700%2C348&ssl=1https://i0.wp.com/computerinfo.ru/wp-content/uploads/2018/08/chto-takoe-hex-redaktory-1.png?fit=300%2C149&ssl=12018-08-26T19:36:27+00:00EvilSin225PCFree Hex Editor Neo,HEX,Hex Workshop,HEX редакторы,HexCmp,HxD Hex Editor,WinHexСейчас будет большой материал на тему того, из чего состоят данные и как их можно редактировать. Многие знают, что любой файл на компьютере (картинка, текстовый или мультимедийный) представляет собой двоичный код – нули и единицы.

Для редактирования таких файлов используются HEX-редакторы – приложение, редактирующее данные, состоящие из байтового кода….EvilSin225Андрей Тереховandrei1445@yandex.ruAdministratorКомпьютерные технологии

Делитесь в социальных сетях

Источник: https://computerinfo.ru/chto-takoe-hex-redaktory/

Какие hex-редакторы можно посоветовать начинающим? Список из 5-ти лучших

Доброго всем дня.

Многие почему-то считают, что работа с hex-редакторами — это удел профессионалов и начинающим пользователям соваться в них не следует. Но, на мой взгляд, если иметь хотя бы базовые навыки работы с ПК, и представлять за чем вам нужен hex-редактор — то почему нет?!

С помощью программы подобного рода можно изменить любой файл, вне зависимости от его типа (многие руководства и гайды содержат в себе информацию по изменению того или иного файла с помощью hex-редактора)! Правда, пользователю необходимо иметь хотя бы основное понятие о шестнадцатеричной системе (данные в hex-редакторе представляются именно в ней). Впрочем, базовые знания по ней дают на уроках информатике в школе, и наверное, многие слышали и имеют представление о ней (поэтому ее комментировать в этой статье я не стану). Итак, приведу лучшие hex-редакторы для начинающих (на мой скромный взгляд).

1) Free Hex Editor Neo

http://www.hhdsoftware.com/free-hex-editor

Один из самых простых и распространенных редакторов шестнадцатеричных, десятичных и бинарных файлов под ОС Windows. Программа позволяет открыть любой тип файлов, произвести изменения (история изменений сохраняется), удобно выделять и редактировать файл, производить отладку и вести анализ.

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

Кроме всего прочего, программа поддерживает русский язык, имеет продуманный и интуитивно-понятный интерфейс. Даже начинающий пользователь сможет разобраться и начать работать с утилитой. В общем, рекомендую всем, кто начинает свое знакомство с hex-редакторами.

2) WinHex

http://www.winhex.com/

Этот редактор, к сожалению, условно-бесплатен, зато он — один из самых универсальных, поддерживает кучу разнообразных опций и возможностей (часть из которых сложно найти у конкурентов).

В режиме редактора дисков позволяет работать с: HDD, дискетками, флешками, DVD, ZIP-дисками и пр. Поддерживает файловые системы: NTFS, FAT16, FAT32, CDFS.

Не могу не отметить удобные инструменты для анализа: кроме основного окна, можно подключить дополнительные с различными калькуляторами, инструментами для поиска и анализирования структуры файла. В общем, подойдет как новичкам, так и опытным пользователям. Программа поддерживает русский язык (выбрать следующее меню: Help / Setup / Russian).

WinHex, кроме своих самых обычных функций (которые поддерживают аналогичные программы), позволяет производить «клонирование» дисков и удалять информацию с них так, чтобы ее уже никто и никогда не смог восстановить!

3) HxD Hex Editor

https://mh-nexus.de/en/

Бесплатный и довольно мощный редактор бинарных файлов. Поддерживает все основные кодировки (ANSI, DOS/IBM-ASCII и EBCDIC), файлы практически любого размера (кстати, редактор позволяет кроме файлов редактировать оперативную память, напрямую записывать изменения на винчестер!).

Так же можно отметить продуманный интерфейс, удобную и простую функцию поиска и замены данных, ступенчатую и многоуровневую систему резервных копий и откатов.

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

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

4) HexCmp

http://www.fairdell.com/hexcmp/

HexCmp — эта небольшая утилита совмещает в себе сразу 2 программы: первая позволяет сравнивать бинарные файлы между собой, а вторая — это hex-редактор. Это очень ценная опция, когда нужно найти различия в разных файлах, помогает исследовать различную структуру самых разных типов файлов.

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

Кроме обычного сравнения, можно вести сравнение и в текстовом варианте (или даже в обоих сразу!). Программа достаточно гибка, позволяет настроить под себя цветовую гамму, указать кнопки быстрого вызова. Если настроить программу подобающим образом — то работать с ней можно вообще без мышки! В общем, рекомендую к ознакомлению всем начинающим «проверяльщикам» hex-редакторов и структуры файлов.

5) Hex Workshop

http://www.hexworkshop.com/

Hex Workshop — простой и удобный редактор бинарных файлов, который отличается прежде всего своими гибкими настройками и низкими системными требованиями. Благодаря этому, в нем можно вести редактирование достаточно больших файлов, которые в других редакторах просто не открываются или зависают.

В арсенале редактора есть все самые нужные функции: редактирование, поиск и замена, копирование, вставка и пр. В программе можно выполнять логические операции, вести бинарное сравнение файлов, смотреть и генерировать различные контрольные суммы файлов, экспортировать данные в популярные форматы: rtf и html.

Так же в арсенале редактора есть конвертер между бинарной, двоичной и шестнадцатеричной системами. В общем-то, неплохой арсенал для hex-редактора. Пожалуй, единственный минус — программа условно-бесплатная…

Good Luck!

Источник: https://pcpro100.info/hex-redaktori/

FlexHex Возможности hex-редактора: просмотр и редактирование любых двоичных файлов ASCII или UNICODE

FlexHEX Editor – полнофункциональный (даже во время триального периода) редактор бинарных файлов и дисков. С его помощью вы можете работать с любыми данными в любом виде: бинарном, ASCII или UNICODE.

В дополнение к функциям вставки, поиска и замены данных, FlexHEX содержит многоуровневый список истории для отмена или повтора операций (Undo/Redo), что резко снижает риск потери данных вследствие ошибочных действий.

Просмотр и редактирование любых двоичных файлов

  • Открывает и редактирует файлы длиной до 8 экзабайт (или 8·1018 байт)
  • Любые бинарные форматы
  • Многопоточные файлы NTFS
  • Разреженные (sparse) файлы NTFS
  • OLE compound (составные) файлы
  • Файлы, заблокированные системой или другим приложением
  • Логические диски
  • Жёсткие диски
  • Флэш-карты и другие типы физических носителей
  • Несколько файлов одновременно

Когда другие производители заявляют, что их продукт может открывать “огромные файлы”, обычно это означает 4Gb, а иногда даже и меньше. Но с FlexHEX это не так. Под огромными файлами мы подразумеваем истинно большие файлы вплоть до 8 экзабайт, что является теоретическим пределом NTFS раздела.

Во современных условиях ограничение на размер файла в 4 GB является неприемлимо малым. Ведь 4 GB – это всего около 18 минут видео, записанного на цифровой рекордер. К счастью, FlexHex такого ограничения не имеет.

Каким бы большим по размеру не был ваш файл, FlexHEX с ним справится.   Читать дальше …

Поддерживаемые типы данных

  • В главном окне редактора: Hex байты, ANSI/MBCS текст, UNICODE текст
  • Шестнадцатиричные байты, слова, двойные слова и 8-битовые слова
  • Десятичные целые числа со знаком и без знака, байты, короткие целые, 32-х и 64-х битовые целые
  • ANSI/MBCS и UNICODE строки
  • 64-битные значения FILETIME
  • 64-х битовый вещественный тип DATE
  • 32-х битовый тип time_t
  • 32-х битовый тип RGB с альфа-компонентой
  • GUIDs (Globally Unique Identifiers)
  • Поддержка обратного порядка байтов в слове

Типы данных, определенные пользователем

  • Структуры, именованные и анонимные
  • Типы Union, поименованные и анонимные
  • Именованные и анонимные битовые структуры для доступа к битовым полям
  • Массивы фиксированного и переменного размера
  • ANSI и UNICODE строки фиксированной и переменной длины, а так же нуль-терминированные.
  • Перечисления в стиле C
  • Специальные директивы unused, align address и align offset
  • Типы, определенные пользователем, могут быть связаны с адресом (fixed), данными (sticky), или курсором (floating)

Data Field (Поле данных, определённых пользователем) – это область файла, которой пользователь присвоил тип и, опционально, имя.

Команда Edit Data Field обеспечивает более удобный способ изменения значений в поле данных, хотя это значение можно по прежнему ввести и в главном окне редактирования. Панель Data Field отображает все заданные поля данных и обеспечивает удобную навигацию по ним.

Основные операции редактирования

  • Прямое редактирование шестнадцатиричных, строковых и юникодых данных
  • Редактирование областей памяти как типизированных данных
  • Функция быстрого просмотра данных и объектов
  • Многоуровневая отмена и повтор действий, список отменённых действий
  • Отслеживание модифицированных областей
  • Многоформатный ввод данных, включая шаблоны повторения
  • Редактирование разреженных (sparse) блоков
  • Битовые операции NOT, AND, OR, и XOR над выбранным блоком
  • Арифметические операции: отрицание, сложение, вычитание, умножение, деление и взятие остатка
  • Групповые арифметические, логические, и циклические сдвиги
  • Задание и редактирование полей данных
  • Импорт и экспорт двоичных данных, и полная поддержка drag-and-drop
  • Импорт и экспорт в CSV (comma-separated values)

Буфер обмена и перетаскивание (drag-and-drop) файлов

  • Быстрое открытие файла путём перетаскивания файла мышью на окно FlexHex
  • Поддержка копирования и вставки бинарных данных и файлов
  • Поддерживаются данные в форматах ASCII, multi-byte (MBCS) и UNICODE
  • Автоматические преобразования binaryASCII, binaryUNICODE и ASCIIUNICODE
  • Неограниченный размер буфера обмена
  • Поддержка перетаскивания, копирования и вставки данных между приложениями (включая Проводник Windows)

Средства поиска, замены, сравнения и анализа

  • Многоформатный поиск с помощью команды Search
  • Многоформатная команда Find All
  • Многоформатная команды Replace / Replace All
  • Multi-Search – однопроходный поиск группы образцов
  • Поиск ANSI/MBCS или UNICODE строк
  • Поиск известных GUIDs (COM class и interface IDs)
  • Выделение образцов цветом (с поддержкой автозагрузки паттернов)
  • Сравнение с файлом, именованным потоком, логическим или физическим диском
  • Частичное сравнение потока данных
  • Карты сравнения предоставляют наглядное представление результатов сравнения

Карта сравнения отображает позиции и соответствие блоков в сравниваемых файлах. Щелчок левой кнопкой по карте перемещает в соответствующую позицию. Щелчок правой вызывает меню карты сравнения.

Сравнивать файлы можно целиком или частично. Чтобы сравнить только определённые части файлов, отметьте чекбокс Block Comparison и введите начальное смещение и размеры сравниваемых блоков. Если оставить поле смещения пустым, то сравнение начнётся с наименьшего адреса.

Навигация

  • Закладки в стиле Visual Studio
  • Панели навигации: Streams, Area, Bookmarks, Found Data и Compare
  • Панели данных: Data Fields, ANSI/MBCS/UNICODE Strings, CLSIDs и IIDs
  • Переходы по адресам и смещениям
  • Неограниченная история переходов

Разное

  • Вывод на принтер всего файла или выделенной области файла
  • Подсчёт контрольных сумм CRC-32, MD5, SHA-1, SHA-256
  • Криптографически стойкий генератор случайных чисел на основе AES
  • Просмотр зарегистрированных COM-классов
  • Калькулятор с поддержкой перетаскивания двоичных и текстовых данных
  • Настраиваемое меню пользовательских инструментов
  • Полностью настраиваемый внешний вид и цвет
  • Автовыбор порядка следования байтов
  • Настраиваемый интерфейс пользователя в стиле Visual Studio, включая тулбары, меню и быстрые клавиши
  • Интеграция с контекстным меню Проводника Windows
  • Интерфейс командной строки
  • Чего-то всё равно не хватает? Сообщите нам!

FlexHex работает на Windows 2000/XP/2003/Vista/7/8/10

Минимальные системные требования: Процессор Intel Pentium® или AMD K5 166 MHz

16 MB RAM

Источник: http://www.heaventools.ru/flexhex-features.htm

Золотой сертификат Microsoft

автор: Jay Geater, главный писатель по вопросам технологий

Вам кто-то послал по электронной почте файл HEX, и вы не знаете, как его открыть? Может быть, вы нашли файл HEX на вашем компьютере и вас заинтересовало, что это за файл? Windows может сказать вам, что вы не можете открыть его, или, в худшем случае, вы можете столкнуться с соответствующим сообщением об ошибке, связанным с файлом HEX.

До того, как вы сможете открыть файл HEX, вам необходимо выяснить, к какому виду файла относится расширения файла HEX.

Tip: Incorrect HEX file association errors can be a symptom of other underlying issues within your Windows operating system.

These invalid entries can also produce associated symptoms such as slow Windows startups, computer freezes, and other PC performance issues.

Therefore, it highly recommended that you scan your Windows registry for invalid file associations and other issues related to a fragmented registry.

Ответ:

Файлы HEX имеют Разные файлы, который преимущественно ассоциирован с Unknown Apple II File (found on Golden Orchard Apple II CD Rom).

Файлы HEX также ассоциированы с Magellan GPS Receiver Flash Upgrade File (Thales Navigation Inc.), Smart Touch Analyze and Retrieve Tool (START) Classic Operator Software Update (HySecurity), SPLITGRADE Upgrade File (Heiland electronic GmbH), HUGO Game File, Macintosh BinHex 2.0 File, Hex Dump и FileViewPro.

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

Как открыть ваш файл HEX:

Самый быстрый и легкий способ открыть свой файл HEX — это два раза щелкнуть по нему мышью. В данном случае система Windows сама выберет необходимую программу для открытия вашего файла HEX.

В случае, если ваш файл HEX не открывается, весьма вероятно, что на вашем ПК не установлена необходимая прикладная программа для просмотра или редактирования файлов с расширениями HEX.

Если ваш ПК открывает файл HEX, но в неверной программе, вам потребуется изменить настройки ассоциации файлов в вашем реестре Windows. Другими словами, Windows ассоциирует расширения файлов HEX с неверной программой.

We highly recommend scanning your Windows registry for invalid file associations and other related registry issues.

Загрузки программного обеспечения, связанные с расширением файла HEX:

* Некоторые форматы расширений файлов HEX можно открыть только в двоичном формате.

Скачать FileViewPro для открытия ваших файлов HEX прямо сейчас

Установить необязательные продукты – FileViewPro (Solvusoft) | Лицензия | Политика защиты личных сведений | Условия | Удаление

HEX Инструмент анализа файлов™

Вы не уверены, какой тип у файла HEX? Хотите получить точную информацию о файле, его создателе и как его можно открыть?

Теперь можно мгновенно получить всю необходимую информацию о файле HEX!

Революционный HEX Инструмент анализа файлов™ сканирует, анализирует и сообщает подробную информацию о файле HEX. Наш алгоритм (ожидается выдача патента) быстро проанализирует файл и через несколько секунд предоставит подробную информацию в наглядном и легко читаемом формате.†

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

Чтобы начать бесплатный анализ файла, просто перетащите ваш файл HEX внутрь пунктирной линии ниже или нажмите «Просмотреть мой компьютер» и выберите файл. Отчет об анализе файла HEX будет показан внизу, прямо в окне браузера.

Ваш файл анализируется… пожалуйста подождите.

Имя файла:

Размер файла:

Прервать

† Инструмент анализа файлов HEX использует компоненты стороннего программного обеспечения. Нажмите здесь, чтобы прочитать правовую оговорку.

Установить необязательные продукты – FileViewPro (Solvusoft) | Лицензия | Политика защиты личных сведений | Условия | Удаление

# A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Источник: https://www.solvusoft.com/ru/file-extensions/file-extension-hex/

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}