загрузка...

Структуры данных

  Прежде чем переходить к особенностям хранения данных в конкретных файловых системах, необходимо познакомиться с общими принципами организации данных. Вернемся к предыдущему примеру, в котором проводилась аналогия между цифровыми данными и квадратиками на бумажной анкете. Когда вы заполняете анкету, надпись перед полем указывает, что данное поле предназначено для ввода имени или адреса. Как правило, компьютеры не снабжают данные файловых систем подобными метками. Вместо этого они просто знают, что в первых 32 байтах записи хранится (к примеру) имя, а в следующих 32 байтах — название улицы.
Способ размещения данных в памяти определяется структурами данных. Структура данных напоминает шаблон или карту. Она делится на поля, при этом каждое поле обладает определенным размером и именем (хотя эта служебная информация не хранится вместе с данными). Например, структура данных может определить, что первое поле называется number и имеет длину в 2 байта. В программе это поле будет использоваться для хранения номера дома в адресе. Сразу же за полем number следует поле street, длина которого равна 30 байтам. Соответствующая структура данных показана в табл. 2.3.
Таблица 2.3. Простая структура данных для хранения номера дома и названия улицы

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

Описание

0-1

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

2-31

Название улицы в кодировке ASCII (30 байт)


Когда данные требуется записать на носитель информации, область памяти для каждого компонента записи определяется по соответствующей структуре данных. Например, если требуется сохранить адрес 1 Main St., сначала адрес разбивается на составляющие: номер дома и название улицы. Число 1 записывается в байты 0-1 выделенного блока, а строка «Main St.» — в байты 2-9 в виде ASCII- кодов каждого символа. Остальные байты можно обнулить, так как в данном примере они не используются. 32 байта, выделенные для хранения данных, могут располагаться в любом месте устройства. Смещения задаются относительно начала выделенного блока. Не забывайте, что очередность байтов в номере дома зависит от порядка байтов на компьютере.
При чтении данных с носителя информации мы определяем, с какого адреса они начинаются, а затем по структуре данных узнаем смещение нужных данных.
Для примера давайте прочитаем только что записанные данные. Выходные данные утилиты, читающей физические данные с диска, выглядят так:
00000000: 0100 4d61 696е 2053 742е 0000 0000 0000 ..Main St
00000016: 0000 0000 0000 0000 0000 0000 0000 0000
00000032: 1900 536f 7574 6820 5374 2е00 0000 0000 ..South St
00000048: 0000 0000 0000 0000 0000 0000 0000 0000
Результат получен от утилиты UNIX xxd, напоминающей графический шестнадцатеричный редактор. В левом столбце приводится смещение в байтах, в средних 8 столбцах — 16 байт данных в шестнадцатеричной форме, а в последнем столбце -- их представление в кодировке ASCII. Символами «.» обозначается отсутствие
печатных ASCII-символов в данной позиции. Вспомните, что каждый 16-разряд- ный символ представляет 5 бита, поэтому на один байт требуется 2 шестнадцатеричных символа.
Просматривая раскладку структуры данных, мы видим, что каждый адрес занимает 32 байта, поэтому первый адрес хранится в байтах 0-31. Байты 0-1 предназначены для хранения 2-байтового номера дома, а байты 2-31 — для названия улицы. В байтах 0-1 отображается значение 0x0100. Данные взяты из системы Intel, использующей прямой порядок байтов, поэтому 0x01 и 0x00 необходимо поменять местами — получаем 0x0001. Преобразование к десятичному виду дает число 1.
Второе поле структуры данных занимает байты 2-31. Содержащаяся в нем ASCII-строка не зависит от порядка байтов в системе, поэтому переставлять данные не придется. Мы можем либо преобразовать каждый байт в ASCII-эквивалент, либо схитрить и сразу заглянуть в нужные столбцы, чтобы найти в них название «Main St.». Именно это значение было записано ранее. Из приведенного вывода следует, что другая структура данных начинается с байта 32 и продолжается до байта 63. Попробуйте самостоятельно обработать ее для практики (она соответствует адресу «25 South St.»).
Разумеется, в структурах данных файловых систем хранится совершенно иная информация, но базовые принципы остаются прежними. Например, в первом секторе файловой системы обычно хранится большая структура данных с десятками полей; читая ее, мы знаем, что размер файловой системы хранится в байтах 32-35. Во многих файловых системах задействовано несколько больших структур данных, используемых в разных местах. 
<< | >>
Источник: Кэрриэ Б.. Криминалистический анализ файловых систем. 2007

Еще по теме Структуры данных:

  1. Структуры данных
  2. Структуры данных
  3. Структуры данных журнала
  4. Структуры данных
  5. Атрибуты и структуры данных индексов
  6. Структуры данных i386
  7. Структуры данных Sparc
  8. 14.1. ЗАДАЧИ И СТРУКТУРА. ИСТОЧНИКИ ДАННЫХ
  9. Структуры данных FAT
  10. Структуры данных NTFS
  11. Структуры данных Ext2 и Ext3