2016-05-25 3 views
0

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

Спасибо!

+1

Надежный SEH Обработка исключений? –

+3

Просто процесс чтения памяти может изменить ситуацию (см., Например, Страж-страницы), так что вы делаете, если это чревато опасностью. Тем не менее, если вы можете [приостановить процесс] (http://stackoverflow.com/questions/11010165/how-to-suspend-resume-a-process-in-windows), вы, скорее всего, добьетесь успеха. Тем не менее, CreateRemoteThread и т. П. Все равно будут вас удивлять. –

+0

Приостановка процесса невозможна, это для видеоигры, я думаю, что исключения SEH будут способом печально! – awpsoleet

ответ

4

Лучший способ (и единственный способ, которым я могу думать о том, что поддерживается) - в основном быть отладчиком. Таким образом, вы можете приостановить/возобновить процесс, а его приостановленный читать его память, как и любой отладчик. Это предполагает, что приостановка процесса является приемлемым решением для вас (и приостановленный процесс не имеет функции защиты от отладки, хотя это редко).

См отправную точку DebugActiveProcess

Вы все еще нужно обрабатывать чтения памяти может изменить [, например, удаление PAGE_GUARD перед чтением страницы и ее восстановление после], но теперь гораздо более сдержан проблема ,

Смежные вопросы