2013-06-20 3 views
2

ive читал по сайту и по поисковому запросу, чтобы попытаться найти окончательный ответ на то, что я пытаюсь сделать, но я не нашел тот, который отвечает на все мои вопросы.доступ к памяти иностранного процесса

У меня есть два процесса. у меня есть целочисленная переменная, которую я хочу изменить вторым процессом. я знаю, как читать/писать в определенные ячейки памяти, но я знаю только, как это сделать на собственных адресах процессов.

Я не понимаю, что такое createremotethread. возможно ли получить самый чистый, самый простой пример манипулирования памятью процесса, не являющегося родным для текущей программы? при условии, что обе программы работают, конечно.

заранее спасибо

EDIT: я получил ответы на некоторые вопросы по поводу моего вопроса из других источников. я просто хочу понять, как я могу написать vairable в ячейку памяти, скажем:

WriteProcessMemory (phandle, (void *) address, val, sizeof (val), NULL);

это, кажется, не имеет никакого эффекта, предполагая, что Вэл логическое значение:

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. почему?

+0

если 'val' является актуальной' bool' переменная, то вам нужно использовать '& val' вместо этого. Но если 'val' уже является указателем на' bool', вам не нужно '&'. –

+0

Прежде всего, сделайте это BOOL result = ReadProcessMemory, затем выведите результат, если результат равен 0, тогда что-то не так с фандле, или адрес – aah134

+0

сделал это, он возвращает положительный результат. ничего плохого в чтении из памяти кажется – ziggyyoyo

ответ

0

проблема решена, мне пришлось использовать HANDLE phandle = OpenProcess (PROCESS_ALL_ACCESS, 0, pid)

вместо HANDLE phandle = OpenProcess (PROCESS_VM_READ, 0, ИДП)

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

+0

Я сделал, единственный вопрос, который у меня остается, - использование writeprocessmemory. я не могу заставить его работать – ziggyyoyo

+0

не работает ни WriteProcessMemory (phandle, (void *) address, & val, sizeof (val), NULL); int val2; ReadProcessMemory (phandle, (void *) address, & val2, sizeof (val2), NULL); cout << val2 << endl; всегда показывает 0. почему? – ziggyyoyo

+0

проверить возвращаемое значение, если 0, то какой-то параметр неверен – aah134