Я ищу способ хранения памяти процесса и восстановления ее позже при определенных условиях.
...
На самом деле я читал вопросы об этом ...Это кажется большой проблемой!
Итак, давайте проанализируем: приложение распределено, но многие процессы не имеют состояния (запрашивают свое состояние на централизованном сервере).Процессы используют сетевые соединения и разделяемую память для связи с другими процессами.
Центральный сервер должен сохранить свое состояние путем сброса памяти процесса, которая должна быть восстановлена позднее при определенных условиях.(1)
Я знаю о ReadProcessMemory и WriteProcessMemory функциях, которые позволяют процессу считывать себя и перезаписывать уже выделенную память, не так ли?Итак, мне нужен адрес, с которого я начинаю чтение / запись, и количество байтов для чтения / записи.Итак ... по каким адресам ?Во многих прочитанных мною кодах используется адрес, возвращаемый VirtualAlloc , но я не знаю, может ли это быть полезным для меня.
Я предполагаю, что исполняемые сегменты процесса не меняются,поэтому они не нуждаются в красном / написано.Во время восстановления я мог бы также предположить, что все потоки процесса находятся в одной и той же позиции выполнения, когда память была прочитана основным потоком.
Остается память стека и память кучи, которые являются сегментами памятичто меня интересует.
Возможно ли это?
(1) Совершенно законно спросить, почему я пытаюсь это сделать.Причина ... сложна, как обычно.Однако предположим, что приложение имеет очень сложное состояние, для которого требуется слишком сложный алгоритм сохранения состояния.Другой альтернативой (которая является предметом анализа) является реализация механизма ведения журнала / воспроизведения, способного воспроизводить каждое событие, которое внесло свой вклад в измененное состояние.
Мне пришло в голову malloc & co.крюк .Так что я могу отслеживать память, выделенную процессом.Но на самом деле я заметил структуру _CrtMemState , но я не знаю, может ли она быть полезной для меня.