Прежде чем переходить к реальным структурам данных, я хотел бы обсудить еще один тип данных - флаги. Некоторые данные всего лишь показывают, выполняется или не выполняется некоторое условие: скажем, является ли раздел загрузочным или нет. Значения таких данных представляются одной двоичной цифрой (1 или 0). Конечно, для этой информации можно выделить целый байт, в котором сохраняется значение 0 или 1. Однако такой способ крайне неэффективен: из 8 выделенных битов реально используется всего один. Более эффективный способ основан на упаковке нескольких двоичных условий в одно значение, каждый бит которого соответствует некоторому признаку или условию. Такие биты часто называются флагами (flags). Чтобы получить значение флага, необходимо преобразовать число в двоичную форму и проанализировать нужный бит. Если бит равен 1, значит, флаг установлен.

Давайте рассмотрим практический пример и преобразуем структуру данных с почтовым адресом в нечто более сложное. Исходная структура содержала два поля данных: для номера дома и названия улицы. В новой версии в нее добавляется необязательное 16-байтовое название города, следующее за названием улицы. Так как имя города не является обязательным, необходимо добавить флаг, указывающий на его наличие или отсутствие. Флаг хранится в байте 31; если запись содержит название города, бит 0 устанавливается (то есть 0000 0001). Если название города присутствует, структура данных содержит 48 байт вместо 32. Новая структура данных приведена в табл. 2.4.

Таблица 2.4. Структура данных со значением флага

Диапазон байтов

Описание

0-1

Номер дома (2 байта)

2-30

Название улицы в кодировке АБСІІ (29 байт)

31-31

Флаги

32-47

Название города в кодировке АБСІІ (16 байт) - если флаг установлен

Пример данных, записанных на диск с использованием этой структуры:

00000000: 0100 4d61 696е 2053 742е 0000 0000 0000 ..Main St.......

00000016: 0000 0000 0000 0000 0000 0000 0000 0061 ...............а 00000032: 426f 7374 6f6e 0000 0000 0000 0000 0000 Boston..........

00000032: 1900 536f 7574 6820 5374 2e00 0000 0000 ..South St......

00000064: 0000 0000 0000 0000 0000 0000 0000 0000 ................

Первая строка выглядит точно так же, как в предыдущем примере. Флагу в бай те 31 присвоено значение 0x61. Размер флага составляет всего 1 байт, поэтому беспокоиться о порядке байтов не нужно. Значение необходимо преобразовать в двоичную систему; по табл. 2.1 значения 0x6 и 0x1 заменяются двоичным значением 0110 0001. Младший бит, то есть флаг города, установлен. В остальных битах содержатся значения других флагов - скажем, признак юридического адреса. На основании значения флага известно, что в байтах 32-47 хранится название города («Boston»). Следующая структура данных начинается с байта 48, а ее поле флагов хранится в байте 79. Значение равно 0x60, флаг города не установлен. Следовательно, третья структура данных начинается с байта 80.

Флаги часто встречаются в структурах данных файловых систем. Обычно они показывают, какие возможности активны, какие разрешения предоставлены пользователю, находится ли файловая система в «чистом» состоянии и т. д.

Строковые данные и кодировка символов | Криминалистический анализ файловых систем | Процесс загрузки


Криминалистический анализ файловых систем



Новости за месяц

  • Апрель
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31