Вы не можете избежать передачи адреса в ReadProcessMemory
, как это требуется, и я не верю, что есть какие-либо другие API, которые позволяют вам читать память процесса.
Итак, что вынужно сделать, это передать в базовый адрес.Вместо того, чтобы получить базовый адрес, вы можете рассчитать его самостоятельно. Этот вопрос может помочь .
Далее вам нужно найти размер памяти процесса и передать его параметру nSize
.Но ... это может быть плохой идеей, потому что
вы должны определить, что это за значение (я не знаю, как; вы могли бы перебрать его, выполнив бинарный поиск черезнаибольшее возможное значение и нахождение наибольшего значения, которое не заставляет ReadProcessMemory
возвращать false
или, возможно, с помощью счетчика производительности или какого-либо другого механизма).
Обработка ограничений памяти, связанных с необходимостью выделения огромного куска памяти для вашего буфера.
Таким образом, вместо чтения всей памяти,сделать несколько вызовов ReadProcessMemory
с меньшим размером буфера.Алгоритм может быть что-то вроде
while not an error
read into a buffer, scanning it for your string
if found
return true;
bump the offset
Если вышеуказанный цикл не находит вашу строку, вы все еще не закончили, потому что строка могла охватить границу между двумя буферами.Чтобы справиться с этим, создайте еще один цикл, который сканирует каждую границу от boundary offset - string size
до boundary offset + string size
, возвращая true, если найден.