Внутренний формат документов MS WORD
Страница 4. FAT \"Больших Блоков\"



3.1. FAT "Больших Блоков"

Я не случайно пошел вразрез с англоязычной терминологией. Дело в том, что структура, о которой пойдет речь в этом разделе, является ничем иным, как FAT - File Allocation Table, т.е. таблицей секторов, занимаемых файлом (вернее, занимаемых потоком или каким-либо другим объектом). А оригинальный термин "BBD - big blocks depot" может только ввести в заблуждение.

FAT - она и в Африке FAT. Это последовательный список 4-байтовых "строчек", каждая из которых соответствует одному сектору. Нулевая запись соответствует сектору с номером 0 (т.е. 512-байтовому сектору, начинающемуся в файле по абсолютному смещению 200h), первая - сектору с номером 1 (смещение 400h) и т.д. Еще раз напомним: сектора нумеруются с -1, т.е. самый первый сектор составного файла в этой таблице просто не упоминается!

Содержимое 4-байтовой строчки FAT может быть выбрано из следующих вариантов:

  • -3 = 0FFFFFFFDh - признак специального сектора;
  • -2 = 0FFFFFFFEh - конец цепочки секторов;
  • -1 = 0FFFFFFFFh - неиспользуемый сектор;
  • иное >0 - номер сектора, следующего за текущим.

Если мы знаем номер стартового сектора для какого-либо объекта (например, для потока), мы легко можем вытянуть всю цепочку принадлежащих ему секторов. Вот конкретный пример, фрагмент дампа файла, содержащий начало FAT:


01 00 00 00 - 02 00 00 00 - 05 00 00 00 - 06 00 00 00
07 00 00 00 - 03 00 00 00 - FF FF FF FE - 08 00 00 00
FF FF FF FE - FF FF FF FD - FF FF FF FF - FF FF FF FF

Давайте выпишем значения "строчек" таблицы в более удобной для глаза форме и в скобочках каждой строчке припишем ее номер:


(00) 01
(01) 02
(02) 05
(03) 06
(04) 07
(05) 03
(06) -2
(07) 08
(08) -2
(09) -3
(0A) -1
(0B) -1

Допустим, известно, что стартовый сектор потока имеет значение 0, т.е. этот сектор заведомо уже принадлежит потоку. В нулевой строчке читаем: следующий сектор потока имеет номер 1. Переходим к строчке номер 1, и т.д., окончательно получаем цепочку номеров секторов: {0, 1, 2, 5, 3, 6}. Именно так, именно в таком порядке и разместил MS Word фрагменты какого-то потока внутри составного файла!

Кстати, обратите внимание на вклинившиеся куски какого-то другого объекта, живущего в секторах {4, 7, 8} и на пустые сектора с адресами 0A и 0B. Вероятно, это свидетельство того, что над документом долго и мучительно работали: многократно удаляли и вставляли фрагменты текста, рисунки, формулы и т.п.

Осталось выяснить, как же до этой FAT добраться. Смотрим на заголовок составного файла: по смещению 4Ch живет адрес стартового сектора в составном файле, а количество этих секторов живет по смещению 2Ch. Сектора располагаются непрерывно.

 
« Предыдущая статья   Следующая статья »