masterspammer (masterspammer) wrote,
masterspammer
masterspammer

Category:

MS (Бууэээ!!!) Word binary format

Как было сказано, объект Range программы MS Word обладает многими свойствами неведомой ебаной хуйни (аргументация по ссылке). И не только этот объект.

В MS Wordе (здесь и далее я буду обсуждать аспекты сохранения в формате DOC) есть такое понятие как поле. Пример поля (хотя Word это не афиширует) - гиперссылка. Как и всякое обычное поле, ссылка состоит из двух частей - кода поля и текста поля, с тремя спецсимволами - начало поля, разделитель и конец поля. В спецификации сказано, что поля могут быть вложенными (и так до 20 уровней), что смутительно.

Обычно структура документа проста как сатиновые трусы и определяется абзацами, на диапазоны символов в которых навешано строчное форматирование. Абзаца в абзаце не бывает, плавающие блоки текста делаются иначе, а таблицы - вообще противоестественным образом. Другое дело, как сохраняется это форматирование (наследование стилей, таблицы соответствия стилей и коды переменной длины для установки свойств, причём если байткода сильно много - он хранится ещё в одном месте, не там, где обычно - см. первый абзац).

Вот как выглядит строка с гиперссылкой, содержащей в себе поле (OLE-контейнер обработан, фрагменты склеены, форматирование восстановлено.

{}Hello, let {fcPic->0 fSpec->1}13{} HYPERLINK "http://www.ru/" {fcPic->0 fData->1 fSpec->1 fFldVanish->129}01{fcPic->0 fSpec->1}14{istd->15}this {istd->15 fcPic->0 fSpec->1}13{istd->15} EQ \R(1,2) {istd->15 fcPic->0 fSpec->1}15{istd->15} be{fcPic->0 fSpec->1}15{} here!0d

Здесь красно-жирное - шестнадцатеричные коды символов, а синее - свойства фрагмента (от начала и до следующего или конца строки).

Спецсимволы - 01 - картинка (см примечание снизу), 13 - начало кода поля, 14 - разделитель поля (начало текста поля), 15 - конец поля.

Форматирование - fSpec - флаг спецсимвола, fcPic - указатель где искать картинку если спецсимвол - 01 и непонятно что, если спецсимвол другой (истинная причина в том, что использованный код форматирования устанавливает сразу и fSpec и fcPic, хотя есть и другой код, только для fSpec - см. первый абзац), istd - код класса стиля, а fFldVanish - "used internally by Word" - см. абзац номер один.

Если спецсимвол 01 (картинка) отформатирован с fSpec (а иначе он не спецсимвол) и fData, то fcPic оказывает на описание поля формы что здесь, в полном соответствии с первым абзацем, более чем уместно.

Получается, что сначала открыто поле ссылки, его код (после спецсимвола) не имеет форматирования, что радует (вот не готов я к гиперссылке на жирненькую страницу курсивного сайта по фиолетовому протоколу), в коде нет вставок (что тоже правильно), а в тексте (после разделителя) - ещё одно поле. Его код имеет форматирование (наверное из-за того, что у этого поля нет текста, а на внешний вид как-то влиять надо) и за ним сразу окончание поля). А потом и второе поле кончается. Где какое - стоит следить по вложенности, в отличии от абзацев-пунктов списков, в полном соответствии с первым абзацем, поля имеют идентификатор __не всегда__.

Вторая за эти выходные занимательная странность - картинки. Вставил я две гифки (от капчи) в документ и наблюдаю там два фрагмента из 01 с fSpec->1 и fcPic показывает на описание картинки. Одно из полей, если это не Window's METAFILEPICT structure (не она, размеры пустые), имеет значение 100. В спецификации описаны значения 98 и 99, но не 100, как и завещал первый абзац. Значит буду реверсить кусочек этого счастья, уж GIF-то поддержать ну совсем надо!

-----

Как промежуточный вывод можно выдвинуть гипотезу, что MS Word представляет, как говорят немцы, potenzmenge проявлений неведомой ёбаной хуйни. На том и прекратим наши изыскания, а то очень уж противно.
Tags: .doc, Говнокод, Мозгоёбари, ФиксикиПокусали
Subscribe

  • (no subject)

    Дети притащили из школы ротовирус - так-то это довольно регулярная болячка, хотя штаммами разнится как грипп - на этот раз досталось сыну и чуть…

  • Заскочил, значит, за проводочками...

    Хотел в гости зайти к знакомому дедушке/дядюшке, звоню, а он умер сегодня... P.S. Да, именно covid...

  • Стратегическая двуручная харкалка

    Харкалки в школьные годы не то, чтоб совсем мимо меня прошли, но всё же я был больше по брызгалкам. На втором месте были резинки и рогатки (в…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 0 comments