Реферат: API Spying
// Копирование со смещением на расстояние между указателями.
value = (unsigned long)a.value
+ (unsigned long)&a.value
- (unsigned long)&value;
}
// Корректно присваивает относительный адрес.
relative_address& operator = (const relative_address& a)
{
if (this != &a)
{
// Копирование со смещением на расстояние между указателями.
value = (unsigned long)a.value
+ (unsigned long)&a.value
- (unsigned long)&value;
}
return *this;
}
// Устанавливает относительный адрес соответствующим указанному абсолютному.
void set_absolute(void* a)
{
// Относительный адрес отсчитывается от начала следующей инструкции.
// Поскольку в тех инструкциях, в которые входит относительный адрес,
// он находится в конце, начало следующей инструкции - это конец адреса.
value = (unsigned long)a - (unsigned long)&value - sizeof(value);
}
unsigned long value;
};
// Класс, упрощающий работу с однобайтной командой.
template<unsigned char c>