Хуки функций 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 это один байт. Соответственно расчеты проводятся побайтово. Когда Вы кастили во что-то другое вы прибавляли и отнимали не байт, а столько байтов сколько заложено в том типе данных в который Вы кастили. Посмотрите "Арифметика указателей".