Saturday, February 12, 2011

Some notes on porting C++ application to C++\CLI.

In this post listed some issues which I experienced while porting a plugin (.dll) for native C++ application to C++\CLI.

Monday, November 29, 2010

C++: How to calculate string hash at compile-time

#define HASH_BASE 2166136261
#define HASH_MULT 16777619
#define HASH_ROUND(prev_hash, next_char) \
    unsigned((prev_hash ^ next_char) * (next_char ? HASH_MULT : 1))
#define HASH_IMPL(f, s) f(f(f(f( f(f(f(f( HASH_BASE \
    , s[0]), s[1]), s[2]), s[3]), s[4]), s[5]), s[6]), s[7])

#define HASH(str) HASH_IMPL(HASH_ROUND, (str "\0\0\0\0" "\0\0\0\0"))

// FNV-1a hash
unsigned hash(const char* s)
{
    unsigned value = HASH_BASE;
    for(; *s; ++s)
       value = (value ^ *s) * HASH_MULT;
    return value;
}

Sunday, November 21, 2010

Tuesday, November 9, 2010

Building Python in MSVC2010 with static runtime.

This guide will show an incomplete way how to build CPython (3.1.2, but I think it will work for another versions too) in MSVC2010 with static runtime (/MT option).

Friday, September 17, 2010

VMware replay debugging

Или отладка /чужих/ программ без исходников в записи.

Будет рассмотрена отладка с использованием отладчика MS Visual Studio.

Monday, September 13, 2010

Создание патчей для исполняемых файлов

Задача: пропатчить конкретный исполняемый файл некоторым кодом. Для примера, код будет выполняться до оригинальной точки входа, и вызывать LoadLibrary для всех *.plgn файлов в текущей папке, для добавления в программу пользовательских плагинов.

Инструменты:
  • FASM (или любой ассемблер с возможностью создания .bin файлов - fasm, nasm, yasm, etc).
  • Python, версии 2.5-2.7, в т.ч. IronPython.
  • Библиотека pefile. (работает только с Python'ом 2.5-2.7).
  • Любое средство позволяющее убедиться что в файле есть место под патч и нужные импорты.