Создание Собственных Шаблонов

Top  Previous  Next

Вы можете сами создавать шаблоны.

Пример шаблона с комментариями для анализа AVI файла.

Синтаксис описания шаблона схож с языком XML. Файлы с шаблонами должны хранится в папке, заданной на вкладке Главная диалогового окна Настройки .

Структура шаблона

Заголовок шаблона

Каждый шаблон начинается со стандартного заголовка

<?xml version="1.0" encoding="utf-8"?>

Элемент template

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

Атрибуты:

name 

Определяет имя шаблона, показанное в области анализируемых данных

Пример:

<template name="AVI File LIST">

........

</template>

Элемент signature

Атрибуты:

align <целое положительное число> 

Указывается, если адрес структуры данных выровнен (например, по сектору: 512)

Элемент содержит элементы field, значениями которых являются шестнадцатиричные коды сигнатуры. В атрибуте offset указывается смещение относительно начала записи. Длина поля соответствует числу шестнадцатиричных значений.

Пример:

<signature align="1">

<field offset="0">46 49</field>

<field offset="2">4c 45</field>

</signature>

Элемент section

В данном элементе содержатся все выражения и операции, необходимые шаблону для анализа данных. Имя section показано в области анализируемых данных. На самом деле sections это виртуальные объекты, используемые для группировки логически связанных fields. Sections могут составлять гнездо.

Главная section не показана в области анализируемых данных.

В элементе присутствуют элементы field, которые являются реальными объектами с данными. Имена field показаны в области анализируемых данных вместе с их величинами.

Атрибуты:

name 

Определяет имя шаблона, показанное в области анализируемых данных

Пример:

<section name="JUNK">

 ....

</section>

Список Всех Объектов в Шаблонах

Типы данных (поле field)

integer

Подтипы:

int8

int16

int32

int64

uint8

uint16

uint32

uint64

uintX

Атрибуты:

endian: (be | le | system) 

Необязательный.  По умолчанию: system.

base: (decimal | hex | octal) 

Необязательный. Указывает, в каком виде представлять число. По умолчанию: decimal.

as-offset: <выражение> 

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

purpose: (offset | rsector |sector | cluster | rcluster) 

Необязательный. Указывает тип результата в выражении as-offset . Если этот атрибут присутствует, то указывать атрибут offset необходимо только в случае, если значение "смещения" должно отличаться от значения этого поля (переменной this ).

rsector и rcluster  говорят о том, что смещения указаны относительно абсолютной позиции начала шаблона.

assigned-template: <Имя Темплейта> 

Указывает имя шаблона, ассоциированного с данным полем. Игнорируется, если не указан атрибут as-offset или purpose.

var: <Имя> 

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

 

binary

Атрибуты:

display-encoding: (hex | binary) 

Необязательный. По умолчанию: hex.

size: <bytes> 

Обязательный.

 

char

Атрибуты:

size: <bytes> 

Обязательный.

codepage: (ansi | oem | utf8 | utf16)

Необязательный. Указывает используемую кодировку. По умолчанию: ansi.

 

filetime

Показывает время в формате Win32 (64 бита)

 

unixtime

Показывает время в формате Unix (секунды с 01/01/1970)

 

filetime

Показывает время в формате DOS format (дата: hiword, время: loword)

 

bits

Атрибуты:

size: <bytes> 

Обязательный.

pos: <comma separated list of bit positions> 

Обязательный. Указывает позиции битов в блоке данных.

Команды

goto

Переход по указанному смещению (абсолютному или относительному)

Атрибуты:

address: <выражение> 

Указывает абсолютный адрес перехода.

offset: <выражение> 

Указывает относительный адрес перехода.

Всегда указывается только один из этих атрибутов.

 

if

Вычисляет условие, заданное в атрибуте test, и читает указанные внутри этого тэга поля, если условие истинное.

Атрибуты:

test: <выражение> 

Задает условие.

 

repeat

Читает указанные в тэге поля  заданное число раз или пока условие выхода не равно нулю

Атрибуты:

count: <выражение> 

<выражение> вычисляется один раз при входе в блок. Внутренние элементы читаются указанное число раз.

test: <выражение> 

<выражение> условие, вычисляемое при входе в блок. Аналогично C++ конструкции while(...) {}.

test: <выражение>

<выражение> условие, вычисляемое при выходе из блока. Аналогично C++ конструкции do {} while(...).

 

setvar

Устанавливает значение внутренней переменной. Например, эту команду удобно использовать для сохранения текущего смещения. Значение текущего смещения хранится в предопределенной переменной offset.

Attributes:

var: <строка> 

Указывает имя переменной.

expr: <выражение> 

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

Выражения

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

Поддерживаются следующие операции:

+ - * / & | > < <= >= != == || &&

Предопределенные переменные

offset

Смещение, по которому в настоящий момент осуществляется чтение. В байтах относительно начала шаблона.

 

start_position

Абсолютная позиция начала шаблона. offset + start_position = абсолютное смещение.

 

this

Данная переменная существует только в контексте вычисления выражения ass-offset и является текущим значением поля данных, для которого задано это выражение