Поиск в памяти чужой программы
От: XeKeN Россия  
Дата: 23.07.04 09:16
Оценка:
Добрый день. Появилась нужда поиска разной информации в памяти некой запущенной программе. Зарание место поиска не извесно. Как правильно произвести поиск и быстро? Вот код, до которого я пока дошел и вот что мне помогло когда я искал в интернете как это сделать (http://subscribe.ru/archive/comp.inroad/199912/12031837.html).
/////////////////////////////////////////
HWND hwndUO;
DWORD d;
int nBUFFER=255;
DWORD dwRead = 0;
DWORD *offset = 0;
char* lpBuffer = new char [nBUFFER];
ZeroMemory (lpBuffer, nBUFFER);
CString sBuffer, sFind = "то что я ищу";

hwndUO=FindWindowEx(NULL,NULL,"некая программа",NULL);
GetWindowThreadProcessId(hwndUO,&d);
HANDLE h=OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ,0,d);
for(;;)
{
if(ReadProcessMemory(h, offset, lpBuffer,nBUFFER,&dwRead))
{
sBuffer = lpBuffer;
if(sBuffer.Find(sFind)!=-1)
{
//если нашел, то что-то делаю
}
}
else break;
offset++;
}
CloseHandle(h);
delete [] lpBuffer;
/////////////////////////////////////////
Вопросы:
1) Как ускорить поиск? Пробывал методы: увеличения буфера или вместо offset++; заменял на offset=offset+nBUFFER; (это мне кажется самым лучшем, но сомнения... сомнения ).
2) Какие недостатки в коде который я написал? (если они есть)
3) Переменная offset увеличивается всегда на 4. Это нормально?
4) Может вообще это я ерундой занился и есть лучше принцип поиска в памяти?

Зарание благодарю всех, кто откликнится на мои вопросы.

23.07.04 19:45: Перенесено модератором из 'C/C++' — Павел Кузнецов
Хочешь поиграть в Бога?
Займись программированием!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.