Здравствуйте, Аноним, Вы писали:
А>При компилировании под Visual Studio 2003.NET (7.1) spyloader не может найти функцию _startSpy@4
А>в Visual Studio 6.5 все нормально.
Ошибка в функции OtherProcess::FindName.
// Перебирает массив имён функций, ищет там заданное имя
// Возвращает -1 если что-то не вышло или имени нет
int OtherProcess::FindName(
HANDLE hProcess,
const char* baseAddress,
DWORD AddressOfNames,
DWORD count,
const char* name)
{
// Для сравнения имени его нужно прочитать, для этого нужно знать размер
int size = lstrlenA(name) + 1;
std::auto_ptr<char> candidate(new char[size]);
// Перебираем имена в массиве имён функций
for (int index = 0; index < count; index++)
{
DWORD nameRVA;
// Читаем адрес начала строки
if (!ReadProcessMemory(
hProcess,
baseAddress + AddressOfNames + index * sizeof(DWORD),
&nameRVA,
sizeof(nameRVA),
0))
{
return -1;
}
// Читаем строку
if (!ReadProcessMemory( // <-- отсутствовал восклицательный знак
hProcess,
baseAddress + nameRVA,
candidate.get(),
size,
0))
{
return -1;
}
if (strcmp(name, candidate.get()) == 0)
{
// Она! Сваливаем :)
return index;
}
}
// Такой функуии нет
return -1;
}
Добавлял проверку ошибок в самом конце. Каюсь, посыпаю голову пеплом, выложу обновлённые иходники.
А вот почему вдруг работает в 6.5 — тайна веков...