witam wszystkich .
juz jakies 8h :) siedze nad dllka do przeszukania pamieci RAM i nie wiem gdzie popelniam blad :(
wzor do przeszukania znalazlem na necie i na jego podstawie napisalem dllke ......
problem polega na tym ze znajduje mi tylko niektore adresy bo Cheat Engine znajduje ich owiele wiecej ....
i nie wiem gdzie popelniam blad :(
czy moze przy string find czy gdzies indziej :(
bardzo prosze o pomoc
pzdr Andrzej
//dllmain.cpp
#include <windows.h>
#include "dll.h"
#include <iostream>
#include <string>
using namespace std;
EXPORT int CALLBACK search(int pid,char* text,int start)
{
SYSTEM_INFO sys_info;
GetSystemInfo(&sys_info);
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,TRUE,pid);
if(hProcess)
{
const void* p = sys_info.lpMinimumApplicationAddress;
MEMORY_BASIC_INFORMATION mem_info;
while(VirtualQueryEx(hProcess,p,&mem_info,sizeof(MEMORY_BASIC_INFORMATION)) == sizeof(MEMORY_BASIC_INFORMATION))
{
if(mem_info.State == MEM_COMMIT)
{
int lenght = 4096;
int i=0;
while (i<(int)mem_info.RegionSize)
{
int address = (int)mem_info.BaseAddress+i;
char buff[lenght];
ReadProcessMemory(hProcess, (LPVOID)address, buff, lenght, 0);
char* newbuff = new char[lenght+1];
for (int j=0;j<lenght;j++)
{
newbuff[j] = buff[j];
}
newbuff[lenght] ='\0';
string str1(newbuff);
string str2(text);
int found1 = 0;
int found2 = 0;
while (true)
{
found1=str1.find(str2,found2);
if (found1>=0 && address+found1>start) return(address+found1);
else found2 = found1+1;
if (found2>found1) break;
if (found1==-1) break;
}
i += lenght;
}
}
p = (char*)mem_info.BaseAddress + mem_info.RegionSize;
if(p >= sys_info.lpMaximumApplicationAddress)break;
}
CloseHandle(hProcess);
}
else return(-1);
return(0);
}