Re[2]: Поиск в памяти чужой программы
От: INsideR Латвия  
Дата: 12.12.04 03:01
Оценка:
Здравствуйте, BK, Вы писали:

BK>Что сильно медленно работает?


BK>
BK>Я делал так
BK>MEMORY_BASIC_INFORMATION MBI;
BK>    DWORD dwNumByte;

BK>    SYSTEM_INFO sInfo;
BK>    GetSystemInfo(&sInfo);
BK>    PVOID pvAddress =sInfo.lpMinimumApplicationAddress; 

BK>    while( pvAddress < sInfo.lpMaximumApplicationAddress)
BK>    {
BK>        dwNumByte = VirtualQueryEx(hProcess,pvAddress,&MBI,sizeof(MBI) ); 

BK>     if(dwNumByte != sizeof(MBI) )
BK>     {
BK>        //Error
BK>     }
     
BK>     pvAddress = (PVOID) ( (DWORD)MBI.BaseAddress + MBI.RegionSize);

BK>     if( MEM_COMMIT != MBI.State ) continue;

BK>       DWORD dwNumberOfBytesRead;
BK>       void* pdwBuf = 0;
BK>       pdwBuf= new BYTE[MBI.RegionSize];
BK>       if(!pdwBuf) 
BK>       {
BK>            // error at alloc memory
BK>       }

BK>           BOOL b=FALSE;        
BK>        b= ReadProcessMemory(
BK>                  hProcess,       // handle to the process whose memory is read
BK>                  MBI.BaseAddress,       // address to start reading
BK>                  pdwBuf,// address of buffer to place read data
BK>                  MBI.RegionSize,//iCount,                 // number of bytes to read
BK>                  &dwNumberOfBytesRead  // address of number of bytes read
BK>              );
    
BK>


Если нашёл необходимую строку, то как взять адрес? MBI.BaseAddress+i(где i смещение начала искомой строки) даёт не тот адрес который в действительности.
Мудр тот, кто знает не многое, а нужное
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.