C ++: дамп содержимого ОЗУ - PullRequest
2 голосов
/ 26 ноября 2010
  • Как мне добиться этого, не вызывая нарушения прав доступа?

Я попытался установить указатель bool в определенное начальное местоположение и затем постепенно увеличивать его. Это приводит к нарушению доступа.

Я использую Visual Studio 2010

Ответы [ 4 ]

9 голосов
/ 26 ноября 2010

Windows - это операционная система с виртуальной памятью. Это означает, что программное обеспечение имеет дело с «памятью», которая может или не может кэшироваться в ОЗУ в определенный момент времени. Довольно много памяти процессов, вероятно, хранится на диске - в файле подкачки или как часть сопоставления файлов.

Итак, если вы понизили рейтинг «сброса памяти» до «сброса памяти», вам нужно спросить себя «какая память».

Помимо того, что ОС является виртуальной памятью, она также защищает приложения друг от друга - каждый процесс получает свое собственное частное адресное пространство для памяти. Итак, вам нужно решить, какую память вы хотите сбросить. наш собственный процесс? Это легко. Используйте VirtualQuery для проверки блоков и выгрузки их.

Глядя на другой процесс? Это сложнее. Существуют барьеры безопасности, которые не позволяют ненадежным приложениям просматривать память более доверенных процессов. VirtualQueryEx позволит вам изучить другой процесс, если у вас достаточно прав.

Наконец, если вы хотите исследовать память ядра, вам нужно разработать какой-то драйвер: код пользовательского режима вообще не может просматривать память ядра.

1 голос
/ 27 ноября 2010

Чтобы проконтролировать ответ @ John, если вы хотите проверить память и другое состояние запущенного процесса, вам действительно нужно узнать о API DbgHelp .Это нетривиальное начинание, по сути вы пишете свой собственный отладчик.

Простой мини-дамп, как предположил Джон, был бы хорошим началом, не требующим такого же количества усилий, но который позволил бы вам просмотреть снимок состояния процесса.

1 голос
/ 26 ноября 2010

Вы можете создать файл дампа, используя MiniDumpWriteDump () , и изучить его, так как вам просто любопытно.

1 голос
/ 26 ноября 2010

Это зависит от ОС.Для окон вы можете использовать VirtualQuery() для получения карты «читаемых» страниц памяти.

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