Здесь есть две проблемы: расположение переменных внутри пространства памяти процесса и расположение процесса в физической памяти.Первое должно касаться вас, второе не должно.
Локальные переменные (а также глобальные / статические переменные) будут иметь тот же адрес относительно относительно расположения программы в памяти.Динамически размещенные переменные (new / malloc) будут каждый раз иметь разные адреса.
Когда я говорю «память», я имею в виду пространство виртуальной памяти определенного процесса: адрес 0x100 в одном процессе не равен 0x100в другом процессе и вообще отличается от номера ячейки 0x100 в вашей оперативной памяти.Фактический адрес обычно не интересен, потому что и ReadProcessMemory, и ваш редактор памяти работают только с этими относительными адресами.Вам не нужно расположение программы.exe.
Если вас интересуют локальные переменные, вы можете рассчитывать на ReadProcessMemory, каждый раз возвращающий значимый результат.Если вам нужна память, которая была выделена динамически, вам нужно найти локальный указатель, получить из него адрес выделенной памяти и снова вызвать ReadProcessMemory.