Archive

Posts Tagged ‘C/C++’

Деманглинг имен в Visual C++.

November 11th, 2009

На днях пытался понять, отчего и почему крошечное приложение пухнет как на дрожжах при добавлении некоторых библиотек из Boost. Рассматривая сгенерированный map файл, выяснил, что утилита undname.exe поставляется вместе с Visual Studio и в состав Windows SDK не входит. Пришлось написать свою – там всего-то нужно вызвать одну функцию (UnDecorateSymbolName). По ходу дела нашел несколько интересных ссылок по теме:

  • Схема, по которой кодируются имена:
  • Tips: Visual C++ – упоминает, что UnDecorateSymbolName не умеет декодировать имена классов. Вместо неё предлагается использовать недокументированную функцию, предоставляемую самим компилятором – _unDName. Вот аналогичная жалоба на rsdn.ru.
  • Исходный код _unDName из проекта Wine

Разница между UnDecorateSymbolName и _unDName меня совсем не удивляет. Эти функции происходят из двух разных проектов. UnDecorateSymbolName (dbghelp.dll) – это реализация из WinDbg (Windows Division). _unDName (msvcrt.dll) пишут разработчики компилятора (DevDiv). К счастью, новые версии WinDbg выходят гораздо чаще, чем новые версии Visual C++. Есть шанс, что найденные ошибки будет оперативно подправлены. :-)

, , ,

Возвращаясь к теме про фаззеры.

January 31st, 2008

Вот код, которым я пользуюсь для написания стресс тестов и фаззеров в своих проектах. Класс EntropyGenerator – обертка вокруг генератора случайных чисел.

Read more…

, ,

SAL аннотации.

October 31st, 2007

В последнее время я немного забросил Win32.Utf8 – на работе завал, так что, приходя домой, делать ничего особенного не хочется. Тем не менее, проект потихоньку движется и, на сегодняшний день, я добрался до разбора SAL аннотаций.

Read more…

, ,

Boost переехал в Subversion репозиторий.

August 28th, 2007

Я как-то упустил из виду. Похоже, что Boost наконец-то переехал в Subversion репозиторий, а баги теперь ведутся в Trac. Давно пора.

,

sizeof(void) == 1

August 20th, 2007

Наткнулся на забавную вещь. Вот такой код спокойно компилируется GCC (версия 3.4.2 (mingw-special)):

#include <stdio.h>

int main()
{
    void* ptr;

    printf("sizeof(void): %d\\n", sizeof(void));

    ptr = 0;
    printf("before increment: %p\\n", ptr);
    ptr += 1;
    printf("after increment: %p\\n", ptr);

    return 0;
}

Read more…

,

C++ обёртка для HANDLE.

October 31st, 2006

Пару лет назад я пользовался вот такой C++ обёрткой для HANDLE (часть методов и обработка ошибок опущены):

Read more…

,

Алёна C++.

August 19th, 2006
Comments Off

Мучая Blog Search наткнулся на блог Елены Сагалаевой – Алёна C++. Елена пишет много, интересно и «по теме» – С++, программирование, Windows и т.д.

PS: Попутно добавил секцию «Blogs» справа. :-)