Определение позиций доступа к памяти для открытого процесса - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь написать утилиту, которая позволяет мне читать память из процесса, который в данный момент выполняется в Windows. Я использовал CreateToolhelp32Snapshot для создания текущего списка PID для всех программ, запущенных на компьютере, и я открываю дескриптор через OpenProcess с флагами vm_read без каких-либо проблем. Контрольно-пропускной пункт, с которым я сталкиваюсь, заключается в том, что функция readprocessmemory в Windows API не может что-либо прочитать, если указанный базовый адрес в данный момент не читается. При этом, какой метод я могу использовать для определения читаемых разделов процесса.

Моя единственная идея по этому вопросу состоит в том, что я мог бы перебрать функцию readprocessmemory, начиная с середины (размер процесса в памяти) / 2, и продолжать, пока не найду конкретное место, которое позволит мне читать, но я верю это было бы ужасно неэффективно для больших процессов (o (n / 2)), и даже если бы это была единственная опция пользовательского режима, как бы я мог найти общий размер процесса в памяти?

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

1 Ответ

0 голосов
/ 06 мая 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...