© 2021 R-Tools Technology Inc.
All rights reserved.
Вы можете сами создавать шаблоны.
Пример шаблона с комментариями для анализа 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 это виртуальные объекты, используемые для группировки логически связанных field s. 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: <выражение> |
Задает условие. |
• repea t
Читает указанные в тэге поля заданное число раз или пока условие выхода не равно нулю
Атрибуты:
count: <выражение> |
<выражение> вычисляется один раз при входе в блок. Внутренние элементы читаются указанное число раз. |
test: <выражение> |
<выражение> условие, вычисляемое при входе в блок. Аналогично C++ конструкции while(...) {} . |
test: <выражение> |
<выражение> условие, вычисляемое при выходе из блока. Аналогично C++ конструкции do {} while(...) . |
• setvar
Устанавливает значение внутренней переменной. Например, эту команду удобно использовать для сохранения текущего смещения. Значение текущего смещения хранится в предопределенной переменной offset .
Attributes:
var: <строка> |
Указывает имя переменной. |
expr: <выражение> |
Указывает выражение, результат вычисления которого будет присвоен переменной. |
Выражения
Выражения в шаблонах представляют собой арифметическое выражение с синтаксисом, аналогичном языку C (это касается и приотитета операций).
Поддерживаются следующие операции:
+ - * / & | > < <= >= != == || &&
Предопределенные переменные
• offset
Смещение, по которому в настоящий момент осуществляется чтение. В байтах относительно начала шаблона.
• start_position
Абсолютная позиция начала шаблона. offset + start_position = абсолютное смещение.
• this
Данная переменная существует только в контексте вычисления выражения ass-offset и является текущим значением поля данных, для которого задано это выражение