На днях пытался понять, отчего и почему крошечное приложение пухнет как на дрожжах при добавлении некоторых библиотек из 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++. Есть шанс, что найденные ошибки будет оперативно подправлены.
C/C++, Программирование, Mangling, Visual C++
Вот код, которым я пользуюсь для написания стресс тестов и фаззеров в своих проектах. Класс EntropyGenerator – обертка вокруг генератора случайных чисел.
Read more…
C/C++, Программирование, Тестирование
В последнее время я немного забросил Win32.Utf8 – на работе завал, так что, приходя домой, делать ничего особенного не хочется. Тем не менее, проект потихоньку движется и, на сегодняшний день, я добрался до разбора SAL аннотаций.
Read more…
C/C++, SAL, Win32.Utf8
Я как-то упустил из виду. Похоже, что Boost наконец-то переехал в Subversion репозиторий, а баги теперь ведутся в Trac. Давно пора.
Boost, C/C++
Наткнулся на забавную вещь. Вот такой код спокойно компилируется 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/C++, Программирование
Пару лет назад я пользовался вот такой C++ обёрткой для HANDLE (часть методов и обработка ошибок опущены):
Read more…
C/C++, Программирование
Мучая Blog Search наткнулся на блог Елены Сагалаевой – Алёна C++. Елена пишет много, интересно и «по теме» – С++, программирование, Windows и т.д.
PS: Попутно добавил секцию «Blogs» справа.
C/C++
Recent Comments