Что такое дамп памяти/снимок/состояние?
-
У меня есть игра, в которой есть персонаж, который может ходить, бегать и прыгать. У него есть здоровье. Я могу сохранить состояние игры (процесса) - сделать снимок/дамп с помощью специального инструмента. Дальше похожу, побегаю, уменьшу количество здоровья и загружу дамп/снимок в память процесса и в итоге получу исходные координаты и начальное количество здоровья (которое было на момент создания дампа). Похожая штука есть в эмуляторах.
Могу ли я сказать, что снимок или дамп памяти — это байты, которые были сохранены на момент создания снимка в виртуальном адресном пространстве (в куче, сегменте кода, сегменте данных, BSS-сегменте, стеке и в области для загруженных библиотек, см. изображение ниже)?
Если да, то я могу прочитать байты в адресах памяти и записать эти байты и соответствующие адреса памяти в файл, а потом, когда мне нужно, с помощью цикла или чего-то подобного записать эти байты по нужным адресам обратно в игровой процесс.
-
@Sergey99 привет, не совсем понимаю твой вопрос. Дамп памяти - это всегда байты, снятые с определенного региона памяти, или же со всего адресного пространства памяти.
-
@StoneWeaver вот если прочитать байты со всего виртуального адресного пространства процесса, это будет называться сохранением состояния или снимка программы? Если да, то получается если я запишу обратно все эти байты в память процесса это будет называться восстановлением состояния.
Тот же пример с игрой - это будет считаться будто я сохранил игровой процесс в файл в виде снимка, а потом восстановил его, только использовал не игровую функцию сохранения, а функцию чтения/записи байт в памяти.
-
@Sergey99 В общем случае да, но ты учти, что после перезапуска программы велика вероятность, что восстановление из предыдущего сохранённого состояния не сработает.
-
Это что имеется ввиду? Это как у артмани. Есть функция сохранения процесса. Если да то это не дамп.