Реферат: Перехват методов 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 интерфейсов