Хакер » 20.12.2007 (Чт) 22:25
1) Откуда нужно перехватить? Из самой программы? Из внешнего мира?
2) Во время работы или в скомпилированном файле?
3) Что именно вызывается проблемы?
Общий смысл техники таков:
Dim SomeObject As ISomething
VarPtr(SomeObject) - адрес переменной SomeObject в памяти.
По этому адресу лежит указатель на объект. Объект представляет собой множество всяких данных - каких именно - нам не важно, нас интересует лишь первые 4 байта.
Эти первые 4 байта - адрес некоторой таблицы, называемой таблицой виртуальных функций (VTable). В этой таблице лежат адреса методов.
В эту таблицу в нужную ячейку записываешь адрес своего перехватчика, из которого вызывается настоящий метод (с подменой параметров).
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.