Реферат: API Spying
void* address = _GetProcAddress(hLib, name);
if (address == 0)
{
// Несудьба
return NULL;
}
char full_name[MAX_PATH * 2];
GetModuleFileNameA(hLib, full_name, sizeof(full_name)/sizeof(full_name[0]));
strcat(full_name, " ");
if (reinterpret_cast<int>(name) > 0x0000ffff)
{
// Копируемимя
strcat(full_name, name);
}
else
{
// А некоторые функции экспортируются по ординалам...
char ordinal[10];
strcat(full_name, "by ordinal: ");
strcat(full_name, itoa(reinterpret_cast<int>(name), ordinal, 16));
}
COPYDATASTRUCT cd = {0};
// 1 требуется, чтобы учесть в длине завершающий NULL-символ.
cd.cbData = strlen(full_name) + 1;
cd.lpData = full_name;
// посылаемстрочку
int number = SendMessage(g_hSecretWindow, WM_COPYDATA, 0,
reinterpret_cast<LPARAM>(&cd));
// Генерируемфункцию-шпиона