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

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

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

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

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


Ответы (1 шт):

Автор решения: Andrei

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

→ Ссылка