Содержание · Работа · Меню · Режим

## Шаблоны редактора дисков

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

По умолчанию, шаблоны загружаются из файла template.txt. Для использования других файлов можно изменить параметр editortemplates= в ini-файла, допуска.тся символы подстановки (например, editortemplates=template*).

В файлах template.txt и template.tx_ содержатся примеры шаблонов.

### Структура файла шаблонов

Каждый шаблон начинается с указания имени в квадратных скобках [Template Name], за которым следуют параметры и команды шаблона (по одной на строку файла).

### Параметры шаблона

flow:0 - отображение по одной записи. flow:1 - отображение записей одна за другой.
h:Header - отображение постоянного заголовка Header.

### Переменные

$RECSIZE - размер записи шаблона.
$OFFSET - относительное смещение, применяемое к блокам данных. Если значение $OFFSET выходит за пределы записи, обработка заканчивается.
$1 ... $64 - поьзовательские переменные (64-битные целые со знаком).

### Константы

Константы указываются в десятичной или шестнадцатеричной (с префиксом 0x) системах.

### Блоки данных

Блок данных - это, обычно, отдельный байт/слово/двойное слово в указанной позиции, однако также допустимы диапазоны байтов/бит, обрабатываемых как одно значение. Блок данных заключается в фигурные скобки {...}.

{X+Z} определяет диапазон Z байт, начиная со смещения X,
{X:Y+Z} определяет диапазон Z бит, начиная со смещения X байт Y бит,
где X, Y и Z - любые переменные или константы;
несколько диапазонов разделяются запятыми, например, {0x00+4,$1:$2+4}.

### Форматы данных

Формат определяет способ отображения и редактирования блока данных (например, целое число / символ / строка).

Поддерживаются следующие форматы:
%u - беззнаковое целое (до 32 бит)
%D - целое со знаком (32 бита)
%I - целое со знаком (64 бита)
%X - целое в шестнадцатеричной системе (до 32 бит)
%IX - целое в шестнадцатеричной системе (до 64 бит)
%c - символ ANSI (8 бит)
C - массив символов ANSI
U - массив символов Юникода (UTF-16)
UNIXDATE - дата в формате Unix (секунды с 1980)
FILETIME - дата в формате Windows file time (наносекунды с 1601)
F:ABCD.. - флаги (где A отображается, если выставлен бит 0, и B - если снят, и т.д.)

### Вывод

Команда вывода определяет положение на экране и формат блока данных или переменной или выводит текст.

{...},x:X,w:W,c:C,f:Format выводит блок данных {...} в колонке X максимальной ширины W цветом С.
x:X,w:W,c:C,f:Text выводит Text в колонке X максимальной ширины W.
Цвет c:C, - опционально (0 - по умолчанию, 1 - заголовок, 8 - красный, 10 - серый).
= (знак равенства) означает перевод строки.

### Условия

Условия используются следующим образом:
IF Condition
... (команды, которые выполняются, если условие Condition истинно)
ELSE
... (команды, которые выполняются, если условие Condition ложно)
ENDIF
где Condition - это сравнение (==, <>, <= и т.д.) двух переменных, констант или блоков данных.

### Метки и переходы

Строка LABEL:N определяет метку, а команда GOTO:N - переход на строку LABEL:N, где N - любая константа. Неаккуратное использование оператора перехода GOTO может привести к зацикливанию.

### Оператор присваивания

Оператор присваивания := используется для назначения переменным значений постоянных, блоков данных или других переменных, а также результаты их сложения или вычитания, например: $1:=$2+{X:Y}, $OFFSET:=$OFFSET+8.

### Переключатели

Переключатели могут использоваться, например, для скрытия/показа некоторых строк нажатием клавиши пробел или кликом мыши. Например, команда $1:=TOGGLE:N,x:X выводит кнопку [+] ([-]) в колонке X, где N - уникальный номер кнопки (допустимы переменные и константы, наиболее удобно использовать смещение следующего блока данных); переменная $1 получает значение 0 или 1 в зависимости от состояния переключателя. Только один переключатель может быть в состоянии 1.

### Дополнительные разделы шаблона

Вычисление размера записи - команды между строками CALCSIZESTART и CALCSIZEEND. Используется, если размер записи может быть больше размера сектора и может зависеть от данных. Значение переменной $RECSIZE можно изменить только в этом разделе шаблона.

Предварительная обработка данных - команды между строками LOADSTART и LOADEND. Используется, например, для обработки USN в записях MFT (восстановление последних двух байт в каждом секторе). Блоки данных можно изменять в этом разделе шаблона: например, команда {X+Y}:={Z+Y} копирует Y байт по смещению Z в позицию по смещению X.

Постобработка данных - команды между строками FLUSHSTART и FLUSHEND. Используется для обратного преобразования перед записью измененных данных на диск (также можно изменять блоки данных).