Дисковый редактор, кроме встроенных шаблонов, поддерживает пользовательские шаблоны для просмотра и редактирования различных дисковых структур. В шаблонах могут использоваться условия, операторы перехода, переменные для разбора сложных дисковых структур, таких как записи MFT.
По умолчанию, шаблоны загружаются из файла template.txt. Для использования других файлов можно изменить параметр editortemplates= в ini-файла, допускаются символы подстановки (например, editortemplates=template*).
В файлах template.txt и template.tx_ содержатся примеры шаблонов.
Каждый шаблон начинается с указания имени в квадратных скобках [Template Name], за которым следуют параметры и инструкции шаблона (по одной на строку файла).
flow:0 - отображение по одной записи. flow:1 - отображение записей одна за другой.
h:Header - отображение постоянного заголовка Header.
Константы указываются в десятичной или шестнадцатеричной (с префиксом 0x) системах.
$RECSIZE - размер записи шаблона.
$OFFSET - относительное смещение, применяемое к блокам данных.
Если значение $OFFSET выходит за пределы редактируемой записи, обработка заканчивается.
$1 ... $64 - поьзовательские переменные (64-битные целые со знаком).
Блок данных - это, обычно, отдельный байт/слово/двойное слово в указанной позиции, также допустимы диапазоны байтов/бит, обрабатываемых как одно значение. Блок данных заключается в фигурные скобки {...}.
{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)
T - массив текстовых символов (в зависимости от таблицы кодировки)
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 - серый).
= (знак равенства) означает перевод строки.
Выражение - это комбинация переменных, констант, блоков данных и операторов
(~,
NOT;
*,
/,
%;
+,
-;
<<,
>>;
<,
<=,
>,
>=;
=,
!=;
&;
^;
|;
AND;
OR), например:
$2+{0x08:$1,5}
Оператор присваивания := используется для копирования результата выражения в переменную,
например:
$1:=$2+{0x08:$1,5}
$2:=$OFFSET & 8
Строка LABEL:N определяет метку, а инструкция GOTO:N - переход на строку LABEL:N, где N - любая константа. Неаккуратное использование оператора перехода GOTO может привести к зацикливанию.
Переключатели могут использоваться, например, для скрытия/показа некоторых строк нажатием клавиши пробел или кликом мыши. Например, инструкция $1:=TOGGLE:N,x:X выводит кнопку [+] ([-]) в колонке X, где N - уникальный номер кнопки (допустимы переменные и константы, наиболее удобно использовать смещение следующего блока данных); переменная $1 получает значение 0 или 1 в зависимости от состояния переключателя.
Вычисление размера записи - инструкции между строками CALCSIZESTART и CALCSIZEEND. Используется, если размер записи может быть больше размера сектора и может зависеть от данных. Значение переменной $RECSIZE можно изменить только в этом разделе шаблона.
Предварительная обработка данных - инструкции между строками LOADSTART и LOADEND. Используется, например, для обработки USN в записях MFT (восстановление последних двух байт в каждом секторе). Блоки данных можно изменять в этом разделе шаблона: например, инструкция {X,Y}:={Z,Y} копирует Y байт по смещению Z в позицию по смещению X.
Постобработка данных - инструкции между строками FLUSHSTART и FLUSHEND. Используется для обратного преобразования перед записью измененных данных на диск (также можно изменять блоки данных).