Блог Обо мне Храню Читаю Ем 99  

07.04.2009, Nº 2078



Libmapi: размер поля

распечатка рекуррентного события (83.09KB)
Вот чем я занимался сегодня большую часть рабочего дня: вручную декодировал события, на которых свалились тесты, побайтово. В отличие от машины, я способен распознавать данные по их внешнему виду, например, вижу границы nttimestamp или вижу где начались буквы. Машина без посторонней помощи это не умеет, а потратить времени на помощь ей можно очень много.

Вывод, кажется, такой: в документации от Microsoft поле ReminderSet имеет тип boolean и размер 8 бит, вот по данным кажется, что оно всё-таки должно иметь размер 32 бита. В таком случае, всё пока встаёт на место. Сейчас поправлю и буду ещё тесты гонять.

P.S. Пока тесты не падают. Значит размер поля ReminderSet в структуре ExceptionInfo действительно 32 бита (это структура внутри PidLidAppointmentRecur).
07.04 18:32
07.04 18:32



07.04.2009, Nº 2078

#1 masterspammer.livejournal.com 08.04.2009, 07:21

В формате Microsoft Word где-то были такие поля - в спецификации одного размера, в жизни - другого.

Есть также милые такие поля (кажется для указания размеров/отступов) - знаковые, но 12-ти битные; лежат два байта - слово, в них - 4095; а значит это - минус 1 (может и не 12, а все 14). Такое может "рости" из разрезания поля по битам на несколько (в doc этого ОЧЕНЬ много), однако выглядит в документации невнятно или вообще отсутствует.

P.S. Писал по "уплывшим" докам до официального открытия формата. Новые чуть лучше в плане общей причёсанности, но не в плане полноты - как нет было описания, что такое LVC, так и нет.

P.P.S. Распечатки это правильно!

#2 bolk @bolknote.ru08.04.2009, 08:30 ответил masterspammer.livejournal.com

Странность в том, что я смотрю в официальную документацию (формат MAPI — открытый).

#3 masterspammer.livejournal.com 08.04.2009, 09:52 ответил bolknote.ru

Собственно ошибки были во внутренней документации - из неё потом сделали открытую. Я не проверял - исправили ли при итоговом приведении в привычный вид.

Оттуда же - видел ошибки в исходном коде - он формально был написан по документации (ещё до открытия), но не работал - то ли catdoc то ли antiword то ли openoffice. Проблема в том что это поле (не то, которое 12bit signed int, а то, которое занимало не столько байт, сколько сказано) могло то появиться, то не появиться - в зависимости от способа сохранения.

#4 masterspammer.livejournal.com 08.04.2009, 09:54

s/что это поле/что такое поле/

#5 u1itka.livejournal.com 08.04.2009, 10:08

У меня такие-же были картинки, когда я разбирал руками номер версии в exe файле.

#6 bolk @bolknote.ru08.04.2009, 11:06 ответил u1itka.livejournal.com

Там-то что разбирать? Это очень хорошо документировано.

#7 u1itka.livejournal.com 08.04.2009, 19:34 ответил bolknote.ru

То-то никто не разобрал до сих пор.
На самом деле проблемы были с некоторыми упаковщиками.

#8 bolk @bolknote.ru09.04.2009, 10:37 ответил u1itka.livejournal.com

Ты что-то путаешь или мы говорим о разных вещах.

Вот спецификация формата PE на сайте Microsoft: http://www.microsoft.com/whdc/…are/PECOFF.mspx

Это оно?

#9 u1itka.livejournal.com 09.04.2009, 15:34 ответил bolknote.ru

Спецификация, это хорошо.
Но разобраться в ней было довольно сложно.
Особенно в рекурсивной структуре VS_VERSIONINFO.
Для чего и потребовались распечатки.

#10 bolk @bolknote.ru09.04.2009, 16:18 ответил u1itka.livejournal.com

Да, распечатки действительно очень помогают в таких случаях
Ваше имя или адрес блога:

Текст комментария (для гиков: не HTML, а текст!)


Кому бы вы хотели ответить (или кликните на его аватару)


Евгений Степанищев (imbolk@gmail.com)
t=0.048