Я читал по всему сайту и гуглил, чтобы попытаться найти окончательный ответ на то, что я пытаюсь сделать, но я не нашел тот, который отвечает на все мои вопросы.
у меня есть два процесса. у одного есть целочисленная переменная, которую я хочу изменить вторым процессом. я знаю, как читать / записывать в определенные области памяти, но я знаю, как это сделать только по собственным адресам процессов.
Я не понимаю, создать удаленную тему. возможно ли получить самый чистый и простой пример манипулирования памятью процесса, не являющегося родным для работающей программы? при условии, что обе программы работают, конечно.
заранее спасибо
РЕДАКТИРОВАТЬ: я получил некоторые ответы на мой вопрос из других источников. я просто хочу понять, как мне записать переменную в память, скажем:
WriteProcessMemory (phandle, (недействительный *) адрес, вал, SizeOf (Val), NULL);
это, кажется, не имеет никакого эффекта, предполагая, что val — это bool:
while(true){
key=getch();
if(key=='1'){
if(val)val=false;
else val=true;
WriteProcessMemory(phandle,(void*)address,&val,sizeof(val),NULL);
}
bool val2;
ReadProcessMemory(phandle, (void*)address, &val2, sizeof(val2), NULL);
cout<<val2<<endl;
}
всегда показывает 0. почему?
попробуйте прочитать об общей памяти и мьютексе, чтобы убедиться, что два процесса не манипулируют одной и той же областью памяти одновременно.
BOOL WINAPI WriteProcessMemory(
_In_ HANDLE hProcess,
_In_ LPVOID lpBaseAddress,
_In_ LPCVOID lpBuffer,
_In_ SIZE_T nSize,
_Out_ SIZE_T *lpNumberOfBytesWritten
);
если вы передали правильные параметры, как указано выше, вам понадобятся как минимум первые 4 параметра для работы
сделать следующее
WriteProcessMemory(phandle,(void*)address,&val,sizeof(val),NULL);
обратите внимание на val передать адрес val
проблема решена, мне пришлось использовать
HANDLE phandle = OpenProcess (PROCESS_ALL_ACCESS, 0, pid)
вместо
HANDLE phandle = OpenProcess (PROCESS_VM_READ, 0, pid)