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

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

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

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

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

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

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

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

flow:0 - отображение по одной записи. flow:1 - отображение записей одна за другой.
big-endian:1 - определяет порядок байт "big-endian".
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

Условия, циклы и переходы

Условия

IF Выражение1
  ... (инструкции для выполнения, если результат Выражения1 ненулевой/истина)
ELSEIF Выражение2
  ... (иначе инструкции для выполнения, если результат Выражения2 ненулевой/истина)
ELSE
  ... (иначе инструкции для выполнения в остальных случаях)
ENDIF

Циклы

WHILE Выражение3
  ... (инструкции для выполнения пока результат Выражение3 ненулевой/истина)
  перейти к началу цикла:
  CONTINUE
  прервать выполнение цикла:
  BREAK
ENDWHILE

Переходы

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

Переключатели и горячие ссылки

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

Горячая ссылка позволяет перейти к смещению объекта или к записи, задаваемой переменной variable, двойным щелчком (или нажатием клавиши [Enter]) по строке, в которой размещается команда $GOTOREC:=variable или $GOTOOFS:=variable.

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

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

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

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