Академический Документы
Профессиональный Документы
Культура Документы
DataExtractor Structures View
DataExtractor Structures View
Просмотрщик структур
011
11
1
Содержание
1. Просмотрщик структур ..................................................................................................................................................3
1.1. Общие сведения ......................................................................................................................................................3
1.2. Просмотр структур в программе Data Extractor ...................................................................................................3
1.2.1. Использование вкладки “Структура” ..............................................................................................................3
1.2.1.1. Просмотр структур для объектов проводника Data Extractor ................................................................3
1.2.1.2. Просмотр структур в режиме карты объекта ..........................................................................................4
1.2.1.3. Просмотр структур в режиме чернового восстановления......................................................................4
1.2.1.4. Просмотр структур в режиме поиска GREP ............................................................................................5
1.2.1.5. Просмотр структур в режиме создания RAID .........................................................................................5
1.2.1.6. Просмотр структур в режиме редактирования диска, созданного на основе карты ............................6
1.2.2. Использование комбинированного режима просмотра структур и справочника шаблонов структур .....6
1.3. Режим просмотра структур ....................................................................................................................................7
1.3.1. Интерфейс программы в режиме просмотра .................................................................................................7
1.3.1.1. Основные элементы окна с разобранной структурой.............................................................................8
1.3.1.2. Основные элементы окна HEX-редактора ..............................................................................................9
1.3.2. Навигация в HEX-редакторе ..........................................................................................................................11
1.3.2.1. Базовые возможности..............................................................................................................................11
1.3.2.2. Закладки ...................................................................................................................................................12
1.3.3. Взаимодействие окон просмотра структур и HEX-редактора ....................................................................15
1.3.4. Редактирование данных .................................................................................................................................16
1.3.5. Подсчет контрольных сумм ...........................................................................................................................16
1.3.6. Дополнительные возможности, доступные в режиме просмотра ..............................................................18
1.3.6.1. Построение карты ....................................................................................................................................18
1.3.6.2. Выполнение переходов ...........................................................................................................................18
1.3.6.3. Исполнение произвольных скриптов .....................................................................................................19
1.4. Комбинированный режим просмотра структур и справочника шаблонов структур ......................................19
1.4.1. Внешний вид ...................................................................................................................................................19
1.4.2. Просмотр структур .........................................................................................................................................21
1.4.3. Использование справочника при просмотре ................................................................................................21
1.4.4. Редактирование справочника ........................................................................................................................22
1.5. Навигация по структурам.....................................................................................................................................22
1.6. Справочник структур ...........................................................................................................................................25
1.6.1. Общие сведения ..............................................................................................................................................25
1.6.2. Работа со справочником ................................................................................................................................29
1.6.2.1. Основные действия ..................................................................................................................................29
1.6.2.2. Каталог .....................................................................................................................................................30
1.6.2.3. Структура .................................................................................................................................................30
1.6.2.4. Поле ..........................................................................................................................................................32
1.6.2.4.1. Создание поля простого типа ..........................................................................................................32
1.6.2.4.2. Создание поля произвольного типа ................................................................................................33
1.6.2.5. Скрипт ......................................................................................................................................................34
1.6.2.6. Параметр ..................................................................................................................................................35
1.6.2.7. Группа параметров ..................................................................................................................................36
1.6.2.8. Группировка полей и структур ...............................................................................................................37
1.6.3. Скриптовая модель .........................................................................................................................................37
1.6.3.1. Общие сведения .......................................................................................................................................37
1.6.3.2. Типы скриптов .........................................................................................................................................38
1.6.3.3. Объекты и методы, доступные из скрипта ............................................................................................39
1.6.3.3.1. Перечисления ....................................................................................................................................39
1.6.3.3.2. Класс TFieldNode ..............................................................................................................................40
1. Просмотрщик структур
10101010110011010101011011010101001101010100110101101101101010100101
1011010101100110011010101011010101111010111
11010101101101010100111110
1101110110110011
0111011110
Рис. 1.7. Просмотр структур в режиме редактирования диска, созданного на основе карты
Для перехода в комбинированный режим из режима карты нужно нажать на кнопку и в открывшемся
выпадающем меню выбрать пункт «Структура».
относительно начала структуры, размер, текстовое представление (или описание) содержимого поля и кнопки
11
1
исполнения скриптов.
Над древовидным списком находится панель элементов управления окном структуры:
Назначение
По умолчанию просмотрщик структур пытается найти шаблон структуры, наиболее подходящий для
представления текущих данных. Кнопка позволяет отключить это поведение – в этом случае для
интерпретации любых данных будет использоваться шаблон структуры, активный на момент отключения.
Кнопка позволяет перейти на следующую структуру выбранного типа, т.е. отобразить данные,
следующие за текущей структурой, с использованием текущего шаблона – такая возможность полезна для
навигации по списку однотипных структур. Данная кнопка становится доступной, если для соответствующего
шаблона установлен признак Next (см. 1.6.2.3).
Кнопка позволяет прервать любой текущий процесс, в том числе разбор текущей структуры.
Необходимость прервать разбор структуры может возникнуть в следующих случаях:
Кнопка обновления структуры вызывает повторный разбор структуры. Использовать эту кнопку нужно,
если данные, на основании которых построена структура, изменились (например, были вычитаны данные,
которые ранее прочитать не удалось, или была уточнена конфигурация RAID, служащего источником данных).
Поле позволяет задать порядок байтов, используемый для интерпретации целых чисел и строк
Unicode. Доступны опции LE (Intel), BE (Motorola) и опция по умолчанию – использовать порядок байтов,
заданный в определении шаблона.
На вкладке «Структура» нижней панели Data Extractor дополнительно имеются следующие кнопки:
Назначение 1011010101100110011010101011010101111010111
11010101101101010100111110
1101110110110011
выбор шаблона структуры из справочника (см. 1.6. «Справочник структур») 0111011110
111101
011
редактирование значений групп параметров (см. 1.5. «Навигация по структурам») 11
1
Назначение
Кнопка позволяет сохранить сделанные изменения. Она становится активной только в том случае, если
данные были изменены.
Рис. 1.14. Смещение относительно начала источника данных и относительно начала сектора
1.3.2.2. Закладки
Под закладкой понимается отмеченное смещение в источнике данных.
Закладки локальны для задачи Data Extractor: каждая задача имеет свои списки закладок для источников
данных, сохраняемые между запусками Data Extractor и доступные во всех представлениях просмотрщика
структур, а также в режиме параллельного просмотра источников данных (см. 2. «Параллельный просмотр
источников данных»).
Работа с закладками доступна из контекстного меню HEX-редактора и по «горячим клавишам».
данные, но делают это в разном виде – в левом окне отображаются данные в виде структуры, а в правом – в
шестнадцатеричном представлении.
При выполнении навигации по одному из окон выполняется синхронизация с другим окном. Например,
если, находясь в режиме просмотра структур, мы выберем поле структуры, то в редакторе выделятся те данные,
которые относятся к этому полю (см. Рис. 1.24). Верно и обратное: если переместить курсор в редакторе, то в
структуре выделится поле, связанное с этим диапазоном данных.
♦ первое поле
− 1048925($0010015D) – текущее смещение курсора;
− B: 142 – значение байтовой переменной для данных, начиная с текущего смещения;
− W: 49806 – значение переменной типа Word (беззнаковое 16-битное целое);
− DW: 251642510 – значение переменной типа DWord (беззнаковое 32-битное целое);
♦ второе поле
− Имя шаблона структуры, предназначенного для просмотра данных, расположенных по
выбранному смещению. Имя появляется только в том случае, если подходящий шаблон найден.
В случае, если был выделен блок данных, в первое поле выводится информация о смещении и размере
выделенных данных:
Справочник шаблонов имеет древовидную организацию. Для того, чтобы раскрыть или свернуть узел
справочника (каталог или структуру), можно воспользоваться ЛКМ или следующими клавишами:
«+» – раскрыть текущий каталог или структуру. Все вложенные подструктуры и подкаталоги останутся свернутыми
«-» – свернуть текущий каталог или структуру
«*» – раскрыть текущий каталог или структуру. Все вложенные подструктуры и подкаталоги также будут развернуты
«/» – свернуть текущий каталог или структуру вместе со всеми подкаталогами и подструктурами.
Навигация по редактору осуществляется аналогично методам, описанным в главе «Навигация в HEX-редакторе».
7) Параметры, используемые в скриптах. Параметр похож на обычное поле, но отличается от него тем, что
показывает не данные, которые расположены на носителе, а значения, которые может вводить
пользователь и которые используются для расчетов. Значение, указанное в параметре, влияет только на
вычисления, используемые для переходов на другие структуры, построения карт и т.д., и никак не влияет
на данные, хранящиеся на накопителе. Напротив параметра изображен значок .
Подробнее о параметрах см. 1.6.2.6.
8) Группа взаимосвязанных параметров, значения которых сохраняются при переходах между структурами,
имеющими связи с данной группой – .
Подробнее о группах параметров см. 1.5, 1.6.2.7.
9) Наличие значка в данном поле показывает, что со структурой связаны одна или несколько групп
параметров. Кликнув по значку, можно увидеть список всех групп параметров, связанных с данной
структурой, и перейти к редактированию любой связи из списка.
Служебный каталог “Simple types” содержит список базовых, простых типов данных, с помощью которых
описываются все остальные, производные типы.
♦ Типы Short, Smallint, Longint, Int64, Byte, Word, DWord, QWord описывают целочисленные знаковые
и беззнаковые данные разной разрядности:
− Byte – целое число без знака размерности 1 байт;
− Short – целое число со знаком размерности 1 байт;
− Word – целое число без знака размерности 2 байта;
− Smallint – целое число со знаком размерности 2 байта;
− DWord – целое число без знака размерности 4 байта;
− Longint – целое число со знаком размерности 4 байта;
− QWord – целое число без знака размерности 8 байтов;
− Int64 – целое число со знаком размерности 8 байтов;
Идентификация структуры
Кнопка позволяет добавить новые разделы в дерево структур. По нажатию на эту кнопку откроется
список действий, доступных для текущего узла справочника.
Кнопка позволяет открыть редактор объекта. В зависимости от того, что выбрано (структура, поле,
параметр, …), открывается соответствующий редактор.
Для редактирования скрипта необходимо нажать на значок в крайнем правом столбце справочника и в
появившемся списке выбрать необходимый скрипт.
Увидеть тип данных, к которому привязана структура, можно в редакторе структур. Для этого необходимо
011
11
1
выбрать нужную структуру, нажать ПКМ и выбрать пункт «Редактировать». В открывшемся окне в поле RAW
будет содержаться информация об идентифицированном типе данных. Если с редактируемой структурой не
связан никакой тип данных, поле RAW будет содержать значение “Unknown”.
1.6.2.2. Каталог
Каталоги предназначены для того, чтобы в одном разделе, имеющем осмысленное имя, собрать все
необходимые структуры и каталоги. Например, в каталоге FileSystems содержатся такие каталоги, как FAT,
NTFS, HFS и другие. Каждый из каталогов в свою очередь содержит в себе ряд структур, предназначенных для
описания конкретной файловой системы.
Для того, чтобы создать новый каталог, необходимо выбрать каталог, который будет родительским по
отношению к вновь создаваемому. В качестве родительского может выступать как корневой каталог Root, так и
любой другой. Выбрав действие «Добавить каталог» на панели инструментов или в контекстном меню
выбранного каталога, мы увидим окно, представленное на рисунке ниже.
1.6.2.3. Структура
Структура – это набор данных, организованных по предварительно заданным правилам. Структуры бывают
2 типов – статические и динамические.
Статическая структура представляет собой список идущих друг за другом именованных полей различных
типов. В качестве примера статической структуры может рассматриваться структура Boot_Ntfs.
Создаваемую структуру желательно поместить в каталог с таким именем, которое позволило бы легко ее
011
11
найти. Для того, чтобы создать новую структуру, необходимо выбрать каталог, который будет содержать 1
создаваемую структуру, нажать на кнопку или ПКМ и выбрать пункт «Добавить структуру». После этого
откроется окно редактирования структуры.
1.6.2.4. Поле
Поля позволяют просматривать данные в определенном формате, который определяется типом поля. Тип
поля может быть простым (Byte, Integer, Double, Char, String, …) или задаваться шаблоном некоторой ранее
определенной структуры. Например, если в справочной системе описана структура JPEG, то при создании
структуры TIFF мы можем добавить в нее поле типа JPEG. Во время просмотра поле JPEG будет выглядеть как
подструктура TIFF, содержащая собственные поля.
1.6.2.5. Скрипт
11
1
Скрипты предназначены для выполнения различных действий, таких как динамическое добавление новых
полей любого типа, считывание данных, расположенных за пределами структуры по некоторому известному
смещению, изменение размера полей и структур, осуществление переходов, построение карт объектов и многое
другое. Скрипты подробно описаны в разделе 1.6.3.
Для того чтобы создать скрипт, нужно, выбрав структуру/поле, нажать ПКМ или кнопку «Создать» ив
появившемся меню выбрать «Добавить скрипт».
Кнопка появляется только при редактировании ранее созданного скрипта и служит для его удаления.
Список выбора типа активен только для вновь создаваемого скрипта. Он позволяет задать назначение этого
скрипта (см. 1.6.3.4).
Name – имя скрипта, позволяющее пользователю различать однотипные скрипты типов Actions и Library.
Для остальных типов скриптов в данный момент не используется.
About – дополнительная информация о скрипте.
1.6.2.6. Параметр
Параметр — это поле, данные которого задаются пользователем или вычисляются в скрипте, а не
считываются с накопителя. Значения параметров используются в скриптах: например, для того, чтобы
рассчитать смещение, по которому расположена некоторая структура, или построить карту объекта.
Параметры хранят свои значения в специальном хранилище, что позволяет при повторном открытии
структуры использовать значения, заданные ранее.
Редактор параметра имеет следующий вид:
Создать группу параметров можно в любом каталоге, нажав на кнопку или ПКМ и выбрав пункт
«Добавить группу параметров» в открывшемся меню.
При необходимости изменить расположение объекта, такого как поле, параметр или структура, можно
воспользоваться механизмом перетаскивания, реализованным в инструменте просмотра структур. Для этого,
находясь в режиме редактирования, необходимо:
1)Выбрать объект, который необходимо переместить в другую структуру или папку;
2)Нажав Shift, с помощью мышки переместить выбранный объект в нужное место.
определенных событий. Например, скрипт типа OnGetCaption выполняется в тот момент, когда просмотрщик
011
11
1
запрашивает у структуры/поля её заголовок для отображения. К событийным относятся следующие типы
скриптов: OnParse, OnAfterCreate, OnGetCaption, OnGetValue, OnSetValue.
Несобытийные скрипты необходимо запускать «вручную». Напротив полей и структур, имеющих скрипты
данной группы, отображаются специальные значки ( , , ), по клику на которые скрипт соответствующего
типа запустится на выполнение. К этой группе скриптов относятся Jump, FillMap, Actions.
Скрипты можно добавлять только полям и структурам, при этом структура или поле могут иметь не более одного
скрипта каждого типа. Исключение составляет тип Actions – количество скриптов этого типа не ограничено.
Исполнение скрипта заключается в исполнении его процедуры Main(field: Integer).
К типам данных, доступным для использования в скриптах, относятся простые типы данных Pascal, такие
как Integer, Double, String и т.д., служебные перечисления, а также специальные типы TDataSource
(представляет источник данных), TMap (представляет карту и предоставляет методы для ее построения; является
частным случаем TDataSource), TContext (позволяет выводить сообщения в протокол и проверять, запрошено ли
прерывание исполнения текущего скрипта), TFieldNode (все структуры, поля и параметры являются объектами
этого класса), TParamGroup (представляет группу параметров; определяет методы чтения и записи значений
параметров группы).
1.6.3.3.1. Перечисления
Свойства и методы встроенных типов данных используют следующие перечисления:
TScriptType – тип скрипта (типы скриптов рассмотрены в разделе 1.6.3.2)
♦ stLibrary
♦ stOnParse
♦ stOnGetCaption
♦ stOnAfterCreate
♦ stOnGetValue
♦ stOnSetValue
♦ stJump
♦ stFillMap
♦ stActions
TOffsetType – тип смещения
♦ ot_Prev – от предыдущего элемента (для первого элемента от Parent)
♦ ot_Abs_Parent – от начала Parent
♦ ot_Abs_Start – от начала Owner
(свойства Parent и Owner рассмотрены в разделе 1.6.3.3.2. «Класс TFieldNode»)
TFld_Type – тип данных
♦ st_Unknown – неизвестный тип данных
♦ st_Binary – произвольные двоичные данные
♦ st_Byte – целое число без знака размерности 1 байт
♦ st_Short – целое число со знаком размерности 1 байт
♦ st_Word – целое число без знака размерности 2 байта
♦ st_SmallInt – целое число со знаком размерности 2 байта
♦ st_DWord – целое число без знака размерности 4 байта
♦ st_LongInt – целое число со знаком размерности 4 байта
♦ st_QWord – целое число без знака размерности 8 байтов
♦ st_Int64 – целое число со знаком размерности 8 байтов
♦ st_Single – вещественное число с плавающей точкой одинарной точности
♦ st_Double – вещественное число с плавающей точкой двойной точности
♦ st_DateTime – дата/время
Свойства TFieldNode
Тип
Свойство Тип данных Значение
доступа
ID R Integer Идентификатор объекта (поля, структуры), под которым он
хранится в базе данных
Имя объекта
1011010101100110011010101011010101111010111
Name RW WideString 11010101101101010100111110
1101110110110011
0111011110
Tag RW Int64 Произвольное целое 64-битное число, связанное с объектом 111101
011
11
AsInteger RW Int64 Целочисленное значение поля 1
Тип
Параметр Значение
данных
typeID Integer Идентификатор шаблона создаваемого поля в базе данных. Для
определения шаблона на основе данных, а также для поиска шаблона по
имени при вызове AppendFieldEx может быть использована константа
ID_AUTODETECT.
typeName String Имя шаблона создаваемого поля в базе данных. Поиск по имени
осуществляется среди
− шаблонов, дочерних для данной структуры,
− шаблонов, находящихся в том же каталоге, что и данная структура,
− простых типов,
− библиотечных шаблонов (т.е. шаблонов, для которых установлен
признак Library).
При поиске шаблона по идентификатору с помощью AppendFieldEx в
этом параметре должна быть передана пустая строка.
name WideString Имя поля, которое будет отображаться в режиме просмотра структур.
Тип
Параметр Значение
данных
typeID Integer Идентификатор шаблона структуры в базе данных. Для определения
шаблона на основе данных может быть использована константа
ID_AUTODETECT.
Если параметр options в вызове функции содержит значение gs_ResultNeeded, то возвращаемым значением
функции будет созданная структура, в противном случае функция вернет nil.
В типичных случаях могут быть использованы «облегченные» версии функции:
procedure GotoField (typeId: Integer; offset: Int64);
function GotoField_Ext (typeId: Integer; offset: Int64): TFieldNode.
Первая из них не дожидается создания структуры и не возвращает значения, вторая возвращает управление
только после создания структуры, ссылка на которую становится результатом вызова функции. В обоих случаях
offset – смещение создаваемой структуры в источнике данных.
function GetBufferStructID (offset: Int64; size: Integer): Integer — определение идентификатора структуры
на основе size байтов данных по смещению offset на диске текущего источника данных.
function ReadInteger (dataType: TFld_Type; offset: Int64; offsetType: TOffsetType; dataOrder:
TFld_DataOrder): Int64 — чтение целого числа из источника данных по указанному смещению. Способ
интерпретации параметра offset зависит от значения параметра offsetType:
− ot_Prev — относительно конца текущего поля
− ot_Abs_Parent — относительно начала Parent
− ot_Abs_Start — относительно начала Owner
Допустимыми значениями параметра dataType являются st_Byte, st_Short, st_Word, st_SmallInt, st_DWord,
st_LongInt, st_QWord, st_Int64 (см. 1.6.3.3.1 «Перечисления»).
function CreateMap: TMap — создание объекта карты.
procedure ShowMap (map: TMap) — показ карты в стандартном окне Data Extractor.
procedure LockData — переход в режим работы с данными структуры/поля как с областью памяти.
Изменения, сделанные в данном режиме, не будут зафиксированы в источнике данных до тех пор, пока не будет
вызвана procedure UnLockData (которая вызывается автоматически при выгрузке поля из просмотрщика, но
может быть вызвана и раньше). Данный режим может быть полезен при необходимости внесения временных
изменений в данные перед разбором структуры – в этом случае следует вызывать LockData в скрипте
OnGetValue, после чего вносить требуемые временные изменения. Обратные изменения следует вносить в
скрипте OnSetValue.
function DriveID: Integer — получение идентификатора диска, с которого прочитано данное поле (если оно
прочитано с диска; если оно прочитано из источника данных, созданного каким-либо специальным способом,
функция сгенерирует исключение).
function VirtualToLogicalByteOffset (v: Int64): Int64,
function LogicalToVirtualByteOffset (v: Int64): Int64,
function GetParamByName (name: WideString): TFieldNode — получение параметра данной структуры по имени.
11
1
function GetParamGroupByID (id: Integer): TParamGroup — получение группы параметров (не обязательно
связанной с текущей структурой) по ID. Получение группы, не связанной с текущей структурой, может иметь
смысл в том случае, когда нужно проинициализировать какие-то параметры этой группы и сохранить ее по
смещению, на которое будет осуществлен переход – параметры группы, созданной для структуры, к которой
осуществляется переход, будут иметь эти сохраненные значения.
function GetOwnParamGroupByName (name: String): TParamGroup — получение группы параметров
(связанной с текущей структурой) по имени её шаблона.
function GetParamGroupByIDEx (id: Integer; const requiredParamIDs: array of Integer; const
requiredParamNames: array of String; out ok: Boolean): TParamGroup — получение группы параметров (не
обязательно связанной с текущей структурой) по ID, с проверкой, что необходимые параметры определены, и
отображением формы их определения, если нет. Значение выходного параметра ok может быть установлено в
false в одном из двух случаев:
1) искомая группа параметров не найдена;
2) один или несколько требуемых параметров не были инициализированы, и пользователь отказался
от их инициализации.
Таким образом, значение true параметра ok не гарантирует, что все требуемые параметры группы имеют значения.
function GetOwnParamGroupByNameEx (name: String; const requiredParamIDs: array of Integer; const
requiredParamNames: array of String; out ok: Boolean): TParamGroup — получение группы параметров
(связанной с текущей структурой) по имени её шаблона, с проверкой, что необходимые параметры определены,
и отображением формы их определения, если нет. Значение выходного параметра ok может быть установлено в
false в одном из двух случаев:
1) искомая группа параметров не найдена;
2) один или несколько требуемых параметров не были инициализированы, и пользователь отказался
от их инициализации.
Таким образом значение true параметра ok не гарантирует, что все требуемые параметры группы имеют значения.
function EnsureParamGroupParams (group: TParamGroup; const requiredParamIDs: array of Integer; const
requiredParamNames: array of String): Boolean — проверка, что необходимые параметры группы определены, и
отображение формы их определения, если нет. Результатом функции будет false, если один или несколько
требуемых параметров не были определены, и пользователь отказался от их определения. Таким образом,
результат функции true не гарантирует, что все требуемые параметры группы определены.
procedure StoreParamGroup (group: TParamGroup) — сохранение всех значений параметров группы для
текущей структуры. При отображении данной структуры (по данному смещению) в будущем эти параметры
будут проинициализированы сохраненными значениями.
procedure StoreParamGroupForVirtualOffset (group: TParamGroup; offset: Int64) — сохранение всех
значений параметров группы с привязкой этого набора значений к смещению в источнике данных.
procedure StoreParamGroupForLogicalOffset (group: TParamGroup; offset: Int64) — сохранение всех
значений параметров группы с привязкой этого набора значений к смещению на диске.
procedure AddVirtualPartition (offset: Int64) — добавление виртуального раздела с началом по указанному
смещению в источнике данных.
procedure CalcSelfCRC32 (var res: LongWord; maxSize: Int64) — подсчет контрольной суммы CRC32 для
данных текущей структуры/поля с опциональным ограничением размера. Для подсчета контрольной суммы всей
структуры/поля в параметре maxSize нужно передать константу SIZE_AUTODETECT.
procedure CalcDataCRC32 (var res: LongWord; offset: Int64; offsetType: TOffsetType; size: Int64) — подсчет
контрольной суммы CRC32 для данных размера size по смещению offset. Способ интерпретации параметра offset
зависит от значения параметра offsetType:
♦ вывода сообщений в протокол Data Extractor. Такие сообщения могут информировать пользователя о
наступлении определенных событий (например, о завершении работы скрипта) или о различных
проблемах разбора данных;
♦ проверки, запрошено ли прерывание текущего скрипта (например, по кнопке Stop в Data Extractor);
♦ управления индикатором прогресса операции.
Объект данного класса доступен через свойство Context класса TFieldNode.
Класс TContext предоставляет следующие методы и свойства:
procedure Debug (const text: WideString; log: Boolean; level: Integer; toLast: Boolean; kind: Integer) — вывод
сообщения в протокол. Назначение его параметров приведено в следующей таблице:
Тип
Параметр Значение
данных
text WideString Текст сообщения.
toLast Boolean Сообщение должно быть выведено без предварительного перевода строки,
т.е. образовать с предыдущим сообщением одну строку протокола.
Характер сообщения:
kind Integer
dk_Normal Информационное сообщение
dk_Error Ошибка
dk_Success Успех
procedure InitProgress (min: Int64; max: Int64) — инициализация индикатора прогресса некоторой
операции с заданными минимальным и максимальным значениями.
procedure Lock — сообщает среде исполнения скриптов о начале потенциально длительной операции,
11
1
которая может быть прервана методом Terminate (см. нижe). Не требуется для событийных скриптов, т.к. они
всегда выполняются в рамках такой операции.
procedure Unlock — сообщает среде исполнения скриптов об окончании потенциально длительной
операции. Каждому вызову Lock должен соответствовать парный вызов Unlock. Стандартный подход к
обеспечению такого соответствия выглядит следующим образом:
context.Lock;
try
...
finally
context.Unlock;
end;
property Locked: Boolean — позволяет определить, выполняется ли код в рамках потенциально длительной
операции, которая может быть прервана методом Terminate.
property Terminated: Boolean — позволяет определить, запрошено ли прерывание текущей операции.
Скрипту следует проверять значение этого свойства перед выполнением потенциально длительных действий, а
также в циклах, и прекращать исполнение, если данное свойство выставлено в true.
procedure Terminate — позволяет скрипту инициировать прерывание текущей операции. Таким способом
вызванный скрипт может проинформировать вызвавший скрипт о том, что текущая операция не может быть
выполнена и выполнение всей цепочки скриптов должно быть завершено.
♦ TextField.
Создание поля каждого из этих типов по имени возможно потому, что типы являются соответственно
простым, библиотечным и дочерним для структуры (см. описание параметра typeName метода
AppendFieldByName).
В строке 23 размер создаваемой структуры устанавливается как сумма смещения и размера созданного поля.
В строках 25 – 30 демонстрируется использование типа EmptyBin из Library → UserTypes → UserTypes,
удобного в тех случаях, когда нужно отобразить некоторую дополнительную информацию, не считывая
дополнительных данных из источника. Поля данного типа по умолчанию имеют нулевой размер, и потому не
влияют на размер содержащей их структуры. В приведенном примере поле типа EmptyBin используется для
отображения контрольной суммы поля newField.
Результат разбора структуры для данных, начинающихся с байта со значением 2, представлен на рисунке
ниже.
О том, что для структуры или поля определен скрипт Jump, говорит наличие кнопки напротив заголовка
структуры/поля.
В качестве примера рассмотрим переход от структуры Boot_Ntfs к таблице MFT.
Рис. 1.107. Верхняя вкладка «Структура» для просмотра содержимого файла на RAID, нижняя вкладка для
просмотра структур на дисках по текущему смещению
В нашем примере следующая структура должна находиться в 4м блоке, которого еще нет в таблице. Этот блок
011
11
должен находиться в одной из ячеек в строке 1. Выделяя блок за блоком в этой строке, мы будем видеть в нижней 1
части формы результат разбора данных, находящихся на соответствующем диске по вычисленному смещению.
Рис. 1.115. Результаты чернового восстановления на временном RAID, где установлен только блок 8
В нашем случае архив нашелся на LBA = 1 987 632. Выполним экспорт результатов в виртуальную
файловую систему, и вернемся к сборке массива.
Перед тем как расставлять блоки с помощью этого файла, необходимо включить опцию учета конфигураций
со сдвигом. При сравнении текущей конфигурации со стандартными комплекс будет учитывать, что выбранный
нами блок 8 на самом деле может быть блоком 9, 10 или 11.
♦ некоторые блоки будут попадать не в свою строку. Например, в нашем случае блок 3 оказался в
строке 1, когда должен находиться в строке 0;
♦ в списке подходящих конфигураций появятся конфигурации со сдвигом, например, L5LS>1 –
конфигурация со сдвигом в один блок (блок 8 на самом деле является блоком 9);
♦ кандидаты, подходящие для текущего блока с учетом сравнения со стандартными конфигурациями
(ячейки обведенные серым), могут располагаться в нескольких строках и их может быть больше.
В левой части окна расположен просмотрщик структур, отображающий данные активного источника в виде
011
11
1
структуры. Внешний вид просмотрщика структур и его связь с активным HEX-редактором не отличаются от
таковых в режиме просмотра структур, описанном в разделе 1.
Между просмотрщиком структур и областью HEX-редакторов находится панель управления источниками
данных, позволяющая отключать отображение части источников и менять взаимное расположение
соответствующих HEX-редакторов (с помощью Drag and Drop).
Рис. 2.7 Интерфейс режима параллельного просмотра источников данных: управление источниками
Вверху расположена панель инструментов режима, элементы которой будут рассмотрены далее.
– кнопка выхода из режима. Если данные в каком-либо источнике были отредактированы, перед
выходом будет предложено сохранить изменения.
Рис. 2.8 Интерфейс режима параллельного просмотра источников данных со скрытыми просмотрщиком
структур и панелью управления источниками
Кнопка включает синхронную прокрутку данных: при изменении текущего смещения в любом HEX-
редакторе смещения в остальных HEX-редакторах изменяются на ту же величину. Нужно подчеркнуть, что
смещения в разных редакторах могут различаться – можно сравнивать, например, начало одного источника данных
с некоторым участком другого источника, не находящимся в начале, и «прокручивать» оба участка синхронно.
Для установки смещений во всех HEX-редакторах в одно и то же значение – значение смещения в активном
Кнопка включает режим сравнения данных. В данном режиме различия выделяются цветом, причем
♦ в активном редакторе более темным цветом выделяются различия со всеми источниками данных;
если же в каком-то из источников по соответствующему смещению находятся те же данные, что и в
активном источнике, цвет выделения будет светлее;
♦ в неактивном редакторе выделяются только отличия от данных в активном редакторе.
Поиск данных доступен по кнопке на панели инструментов режима, а также из контекстного меню
HEX-редактора и по «горячим клавишам».
Искомые данные могут быть введены в шестнадцатеричном или текстовом представлении, а в качестве
диапазона поиска может быть задан как активный источник данных, так и все отображаемые. По скрытым (с
помощью панели управления источниками) источникам данных поиск производиться не может.
Запущенный поиск может быть прерван кнопкой . Данная кнопка может служить также для
прерывания поиска различий и разбора структур.
2.4. HEX-редактор
Основные возможности HEX-редактора рассмотрены в разделе 1 «Просмотрщик структур», поэтому
остановимся только на особенностях HEX-редактора данного режима.