Реферат: Перехват методов COM интерфейсов
DWORD m_n;
BYTE m_jmp;
DWORD m_offset;
void init(DWORD_PTR proc, int n)
{
m_push = 0x68;
m_n = n;
m_jmp = 0xE9;
m_offset = DWORD((INT_PTR)proc - ((INT_PTR)this+sizeof(vthunk)));
FlushInstructionCache(GetCurrentProcess(), this, sizeof(vthunk));
}
};
#pragma pack(pop)
Структуру vtbl можно имитировать с помощью массива указателей на vthunk:
struct ThunkVtbl { ThunkVtbl(DWORD_PTR pthunk) { for(int i = 0; i < thunk_n; ++ i) { code[i].init(pthunk, i); vtbl[i] = reinterpret_cast<DWORD_PTR>(&code[i]); } } static const int thunk_n = 1024; DWORD_PTR vtbl[thunk_n]; vthunk code[thunk_n]; }; |
В конструкторе ThunkVtbl мы инициализируем каждый из перехватчиков vthunk порядковым номером n и адресом универсального перехватчика pthunk. Теперь массив vtbl содержит 1024 указателя на структуры vthunk, каждая из которых содержит код для вызова перехватчика:
К-во Просмотров: 664
Бесплатно скачать Реферат: Перехват методов COM интерфейсов
|