пятница, 22 апреля 2011 г.

VeriSign "Signtool Error: The provided cross certificate would not be present in the certificate chain."

Проблема

Попытка подписать драйвер сертификатом от VeriSign и кросс-сертификатом от Microsoft:
%WDKPATH%\Bin\x86\signtool.exe sign /v /ac MSCV-VSClass3.cer /f cert.pfx /p password /t http://timestamp.verisign.com/scripts/timtamp.dll driver.sys
Не увенчалась успехом:
Signtool Error: The provided cross certificate would not be present in the certificate chain.
Алгоритм подписания рабочий и проверенный. Изучение базы знаний US Home > Support > Code Signing Support с ходу результата не дало.

Решение

понедельник, 18 апреля 2011 г.

#pragma message + __LINE__

Проблема

Необходимо вывести сообщение во время компиляции с указанием номера строки в исходном файле:
#pragma message(__FILE__ " (" __LINE__ "): Some important message.")
Данный код генерирует ошибку:
warning C4081: expected ')'; found 'constant'
Решение

Дело в том что __LINE__ имеет целочисленный тип, а данная директива принимает только строки. Для того что-бы всё работало как нужно, следует использовать следующий приём:
#define STRING2(x) #x
#define STRING(x) STRING2(x)

#pragma message(__FILE__ " (" STRING(__LINE__) "): Some important message.")

воскресенье, 17 апреля 2011 г.

PYTHONPATH в Windows x64

Проблема

Для удобства создания скриптов на Python-е, в т.ч. для pykd, решил воспользоваться расширением pytools для Visual Studio.

Чтобы интерпретатор Python-а находил модуль pykd без указания полного пути, добавил в переменную окружения PYTHONPATH путь к 64-х битной и 32-х битной версии расширения. В моём случае C:\WinDDK\WinDbgX64\winext и C:\WinDDK\WinDbgX86\winext соответственно. После этого интерпретатор начал падать при попытке использования модуля (похоже что происходит сбой во время загрузки pykd.pyd не соответствующей разрядности).

Вывод очевиден. Если в системе одновременно установлен Python для x86 и x64, то переменную окружения PYTHONPATH лучше не использовать.

Решение

воскресенье, 10 апреля 2011 г.

Отладка STL контейнера map в WinDbg

Проблема

Довольно часто во время отладки или анализа креш-дампов требуется узнать содержимое контейнера map. Насколько мне известно, WinDbg для этого не предоставляет никаких средств.

Решение

Решить задачу можно несколькими способами:
  • Зная внутреннюю структуру контейнера вручную найти необходимые смещения структур в памяти;
  • Создать своё расширение отладчика;
  • Воспользоваться возможностями расширения pykd.