Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лек 008.doc
Скачиваний:
14
Добавлен:
07.02.2015
Размер:
47.62 Кб
Скачать

4. Структура документа ms word

Итак, мы подробно изучили с разных сторон множество действительно интересных вопросов, но... Следует признать, что основную тему статьи мы пока не раскрыли. В ближайшее же время попытаемся исправиться.

В Интернете можно найти немало ссылок на фирменные материалы "Microsoft Word 6.0 Binary File Format" и "Microsoft Word 97 Binary File Format", которые представляют собой огромные файлы, заполненные большим количеством малопонятных терминов, таблиц, списков и пр. Но название не совсем точно отражает действительность: на самом деле эти материалы описывают всего лишь структуру потока под названием "WordDocument". Продемонстрируем, что ничего совсем уж иррационального и трансцендентного в фирменной документации от Micrisoft нет.

Итак, поток "WordDocument" (в документации он называется "главным потоком" - main stream) начинается со своего собственного внутреннего заголовка, в котором мы упомянем всего несколько наиболее интересных для нас полей:

„R„}„u„‹„u„~„y„u „D„|„y„~„p „N„p„x„~„p„‰„u„~„y„u „P„‚„y„}„u„‰„p„~„y„u

-----------------------------------------------

0h 2 „R„y„s„~„p„„„…„‚„p Word6/Word97

2h 2 „K„Ђ„t „r„u„‚„ѓ„y„y Word6/Word97

18h 4 „N„p„‰„p„|„Ђ „„„u„{„ѓ„„„p Word6/Word97

1Ch 4 „K„Ђ„~„u„€ „„„u„{„ѓ„„„p+1 Word6/Word97

34h 4 „D„|„y„~„p „„„u„{„ѓ„„„p+1 Word6

4Ch 4 „D„|„y„~„p „„„u„{„ѓ„„„p+1 Word97

Для документов, созданных в Word v6.0/7.0 или WordPad, сигнатура обычно равна 0A5DCh, а для Word97/2K/XP она равна 0A5ECh (все это верно по крайней мере для русских версий).

Если документ создан в MS WinWord, то текст обычно начинается по "круглым" смещениям (например, 200h или 300h), для прочих продуктов это не всегда выполняется (например, WordPad может разместить его по "треугольному" смещению 312h).

Текст для формата версий 6.0/7.0 представляет собой обычную последовательность однобайтовых символов в той или иной кодировке, а для более старших версий - в двухбайтовой кодировке UNICODE:

„R„y„}„r„Ђ„| „K„Ђ„t„y„‚„Ђ„r„{„p

-----------------

0-9 030h-039h

A-Z 041h-05Ah

a-z 061h-07Ah

„@-„` 410h-42Fh

„F 401h

„p-„‘ 430h-44Fh

„v 451h

Этой информации вполне достаточно, чтобы, например, извлечь из Word-документа текст. Производить обратную операцию несколько сложнее - для этого придется параллельно формировать таблицы описания свойств символов и абзацев.

Ссылки: 1) Microsoft Word for Windows 6.0 Binary File Format. Updated structures and sprm table for Windows Word 6.0 format; 2) Microsoft Word for Windows 6.0 Binary File Format 09/03/94; 3) Microsoft Word 97 Binary File Format For Windows and Macintosh. Last Revised July, 1997. 1998 Microsoft Corporation; 4) Microsoft Word 97 (aka Version 8) Binary File Format. Revised Aug 1 1998;

Заключение

В этой статье для меня все ясно, за исключением упоминаний о сепульках, трансме и хмепе. Увы, последний вышедший в свет том энциклопедии кончался статьей "Соус грибной", значит, ни о трансме, ни о хмепе ничего нет.

С. Лем. Звездные дневники Ийона Тихого. Путешествие четырандцатое.

Конечно, в статье рассмотрено далеко не все, что хотелось бы. И не всему вышенаписанному стоит беспрекословно доверять: например, весьма вероятно, что в случае огромных DOC-файлов структурированное хранилище может быть образовано из "секторов" с размерами большими, чем 512 байтов. Но теперь любознательный читатель может не только проверить информацию, но и продолжить собственные иследования двоичного формата документов WinWord.

Кому-то может показаться излишним приведенное выше подробное описание формата структурированных хранилищ. Но мне, например, оно сильно пригодилась, когда необходимо было вытаскивать текст из DOC-файлов, записанных на поцарапанную дискету. Функции OLE2 API в этой ситуации просто отказывались работать.

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

Возможны и иные применения для информации, приведенной в этой статье. Желаю успехов!

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]