Code://got the process handle with OpenProcess , so i just paste from here //not sure if its right void VirtualQueryFunc(HANDLE hProcess) { char Buffer[32]; DWORD dwRead; MEMORY_BASIC_INFORMATION meminfo; SYSTEM_INFO si; GetSystemInfo(&si); printf("%s %i\n" , "si.lpMinimumApplicationAddress", si.lpMinimumApplicationAddress); printf("%s %i\n" , "si.lpMaximumApplicationAddress" , si.lpMaximumApplicationAddress); int address = 0; DWORD codebase = 0x0040000; while (address < (int)si.lpMaximumApplicationAddress){ VirtualQueryEx(hProcess , (LPCVOID) address, &meminfo, sizeof(meminfo)); switch(meminfo.State) { case MEM_COMMIT: ReadProcessMemoryFunc(hProcess , address); printf("%s\n" , "memory commited"); break; case MEM_FREE: printf("%s\n" , "free memory"); break; case MEM_RESERVE: printf("%s\n" , "reserved memory"); break; } Sleep(30); address += meminfo.RegionSize; } } void ReadProcessMemoryFunc(HANDLE hProcess , int addresss) { BYTE byBuffer[0x1000]; DWORD dwRead; ReadProcessMemory(hProcess, (void *)addresss, byBuffer, 0x1000, &dwRead); if(strcmpi((char *)byBuffer ,"PRIVMSG")==0) { printf("%s\n" , (char *)byBuffer); } }