Хуки функций C++

Рейтинг: 2Ответов: 1Опубликовано: 08.01.2023

В попытках подробно изучить механизм "хуков", наткнулся на статью Intercepting API function calls, я задался вопросом касательно некоторых моментов.

Есть функция, определяющая относительный адрес между функциями:

size_t CalcDisplacement(void* lpStartAddress, void* lpEndAddress) {
    return reinterpret_cast<char*>(lpEndAddress) - (reinterpret_cast<char*>(lpStartAddress) + 5);
}

И так вопрос, почему при вычислении адреса кастятся в char* для его определения? При моих попытках кастить в что-то еще, они приводили к Access Violation.

Ответы

▲ 5Принят

Потому что char это один байт. Соответственно расчеты проводятся побайтово. Когда Вы кастили во что-то другое вы прибавляли и отнимали не байт, а столько байтов сколько заложено в том типе данных в который Вы кастили. Посмотрите "Арифметика указателей".