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

Существует два формата структуры записи каталога, но обе версии имеют одинаковый размер. Второй формат более эффективно использует доступное пространство. Используемая версия определяется флагом несовместимой функции в суперблоке. Исходный формат не используется по умолчанию в современных системах; его поля перечислены в табл. 15.22.

Таблица 15.22. Структура данных исходной версии записи каталога

Диапазон

Описание

Необходимость

0-3

Значение индексного узла

Да

4-5

Длина записи

Да

Диапазон

Описание

Необходимость

6-7

Длина имени

Да

84-

Имя в кодировке ASCII

Да

Это минимальная структура данных, в которой все поля являются необходимыми. Для каждого имени в каталоге существует одна структура, которая ссылается на индексный узел с метаданными. Имя не завершается нуль-символом, поэтому в записи должно присутствовать поле длины. Ьіпих выравнивает эти структуры данных по границам 4 байт.

Вторая версия записи каталога более эффективно использует поле длины имени. Максимальное количество символов в имени файла равно 255, поэтому для его хранения достаточно одного байта. Во второй версии записи каталога второй байт используется для хранения типа файла (который также хранится в индексном узле). Поля второй версии записи каталога представлены в табл. 15.23.

Таблица 15.23. Структура данных второй версии записи каталога

Диапазон

Описание

Необходимость

0-3

Значение индексного узла

Да

4-5

Длина записи

Да

6-6

Длина имени

Да

7-7

Тип файла (см. табл. 15.24)

Нет

8+

Имя в кодировке АБСН

Да

Значение типа не является необходимым. Его допустимые значения перечислены в табл. 15.24.

Таблица 15.24. Допустимые значения поля типа файла в записи каталога

Флаг разрешений

Описание

0

Неизвестный тип

1

Обычный файл

2

Каталог

3

Символьное устройство

4

Блочное устройство

5

FIFO

6

Сокет UNIX

7

Символическая ссылка

Для просмотра низкоуровневого содержимого каталога можно воспользоваться командой icat. В тестовом образе используются записи каталогов новой версии, а индексный узел 69 457 соответствует каталогу:

# icat -f linux-ext3 ext3.dd 69457 xxd

0000000: 510f 0100 OcOO 0102 2e00 0000 OOdO 0000 Q...............

0000016: OcOO 0202 2e2e 0000 520f 0100 2800 ObOl ........

0000032: 6162 6364 6566 672e 7478 7400 530f 0100 abcdefg.txt.S...

0000048: 1400 OcOl 6669 6c65 2074 776f 2e64 6174 ....file two.dat

0000064: 540f 0100 1000 0702 7375 6264 6972 3100 T.......subdirl.

0000080: 550f 0100 ЬООЗ 0801 5253 5455 5657 5859 U.......RSTUVWXY

0000096: 0000 0000 0000 0000 0000 0000 0000 0000 ................

[...]

Байты 0-3 показывают, что первая запись соответствует индексному узлу 64 457 (0х010£51),абайты4-5 - что длина записи каталога равна 12 байтам (0x0с). По содержимому байта 6 видно, что длина имени равна всего 1 байту, а по содержимому байта 7 - что запись представляет каталог (0x02). Имя, заданное в байте 8, представляет собой строку «.». Эта запись каталога представляет текущий каталог. Для проверки можно сравнить индексный узел в записи со значением, полученным при выводе содержимого каталога программой icat; мы видим, что в обоих случаях оно равно 64 457.

Чтобы найти вторую запись, следует прибавить длину первой записи к ее начальному смещению; это означает, что вторая запись начинается в байте 12. Согласно содержимому байтов 16-17, длина этой записи также равна 12 байтам, и она представляет родительский каталог «..».

Чтобы найти третью запись, мы прибавляем длину второй записи к ее начальному смещению и получаем смещение 24. Байты 28-29 показывают, что длина записи равна 40 байтам (0x28). Байт 30 показывает, что длина имени равна 11 (ОхОЬ). Имя (байты 32-47) представляет собой строку abcdefg.txt.

При переходе от начала записи в байте 24 к следующей записи мы оказываемся у байта 64. Так как предыдущая запись заканчивается в байте 42, между ними остаются 20 неиспользуемых байт. В этом пространстве хранится имя удаленного файла two.dat; до удаления эта запись начиналась с байта 42.

Если хотите, проанализируйте остальные записи самостоятельно. Далее приводится результат выполнения программы fis для того же каталога:

# fis -f linux-ext3 -a ext3.dd 69457

d/d 69457: d/d 53248:

г/г 69458: abcdefg.txt

г/г * 69459: file two.dat

d/d 69460: subdirl

r/r 69461: RSTUVWXY

Расширенные атрибуты | Криминалистический анализ файловых систем | Символическая ссылка


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



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

  • Март
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс