Реферат: Методы перехвата API-вызовов в Win32

{

PSTR pszModName = (PSTR)((PBYTE) hmodCaller + pImportDesc->Name);

if (lstrcmpiA(pszModName, pszCalleeModName) == 0)

{

//Нашли

if (pImportDesc->Name == 0)

return; //Ни одна функция не импортируется

//Получим адрес таблицы импорта

PIMAGE_THUNK_DATA pThunk =

(PIMAGE_THUNK_DATA)((PBYTE) hmodCaller + pImportDesc->FirstThunk);

//Переберёмвсеимпортируемыефункции

for (; pThunk->u1.Function; pThunk++)

{

PROC* ppfn = (PROC*) &pThunk->u1.Function; //Получимадресфункции

BOOL fFound = (*ppfn == pfnCurrent); //Егоищем?

if (!fFound && (*ppfn > sm_pvMaxAppAddr))

{

// Если не нашли, то поищем поглубже.

// Если мы в Win98 под отладчиком, то

// здесь может быть push с адресом нашей функции

PBYTE pbInFunc = (PBYTE) *ppfn;

if (pbInFunc[0] == cPushOpCode)

{

//Да, здесь PUSH

ppfn = (PROC*) &pbInFunc[1];

//Нашадрес?

fFound = (*ppfn == pfnCurrent);

}

}

К-во Просмотров: 360
Бесплатно скачать Реферат: Методы перехвата API-вызовов в Win32