В современных операционных системах каждый процесс имеет собственную карту памяти. Каждый процесс с одним и тем же адресом может иметь разные участки памяти или даже ничего.
Вот почему вы должны использовать системный API ReadProcessMemory , чтобы иметь возможность читать память другого процесса.
Теперь, когда вы читаете некоторую память из другого процесса (значение ptr2int
), он не определяет, является ли считанное значение указателем, с точки зрения текущего процесса адрес в этой ячейке не имеет существенного значения. Этот адрес действителен в другом процессе, но в текущем процессе указывает на недопустимое местоположение.
Таким образом, в основном эта строка имеет неопределенное поведение:
cout<<"buffer:"<<*(uintptr_t*)buffer<<endl;
Это должно быть:
cout << "buffer:" << buffer << endl;
Если вам нужно прочитать, что указывает на ptr2int
, вы должны снова вызвать ReadProcessMemory
с соответствующими аргументами.