Стоит такая задача - Допустим мы запустили калькулятор, сделали там определенные расчеты, теперь я делаю дамп памяти этого процесса. Задача стоит в том чтобы теперь этот дамп памяти воспроизвести опять но уже с помощью моего ехе. То есть мой ехе будет ложить дамп (левой программы) обратно в память и должен выскочить калькулятор с расчетами который я делал. Возможно ли такое может уже есть софт какой-то для этого? Что-то я гуглил вообще глухо.
Такое можно сделать но это потребует огромного геморроя. 1) необходимо что бы все адреса (памяти) в новом процессе соответствовали тому с которого был снят дамп. (это не так сложно будет сделать если 1] приложение маленькое; 2] не используется множество отдельных регионов памяти) 2) необходимо будет делать еще и дамп стека... 3) помимо собственных ресурсов, каждое приложение взаимодействует с ОС, и это, влечет создание в памяти ОС структур данных для приложения, некоторые из которых не получится скопировать/вставить и и придется воспроизводить действия (запросы ядру/библиотекам) что бы ОС их создала... (Как пирмер: Окно которое отображается это именно такая структура) (Стоит обмолвиться о том, что вместо адресов таких структур ОС возвращает для них числовой номер (handle) по которому она определит с какой структурой работать, а потому не факт, что ОС сгенерирует нам именно такой же handle какой был выдан приложению на момент снятия дампа...)
хм вот интересно в Windows можно же уйти в спящий режим и комп вырубается но при включении робота восстанавливается. Да винде легче потому-что она хранит все а тут именно придется один процесс. Хотя бы найти готовый софт который делает что-то похожее..
Винда так делает потому что она управляет всеми программами, и она решает какой процесс будет исполнятся сейчас а какой позже, перед спящим режимом она тупо по очереди останавливает процессы, сохраняет их и СВОЮ память на ЖД (если это гибернация) либо оставляет все в оперативной памяти и переходит в режим пониженного энергопотребления. Да да, в спящем режиме процессор и оперативная память продолжают работать, но в специальном режиме, в котором выполнение прикладных программ невозможно.
Немного оффтопа. "Спящий режим" понятие двусмысленное. Раньше ру версиях винды так назывался "hibernation". Начиная с висты спящим режимом стал называться "sleep mode", который ранее переводили как "ждущий режим".
Dump Memory 000A9C08 31 00 39 00 38 00 32 00 31 00 31 00 31 00 37 1.9.8.2.1.1.1.7 Address -> 000A9C08 Bytes Unicode -> 31 00 39 00 38 00 32 00 31 00 31 00 31 00 37 расчет calc.exe -> 1.9.8.2.1.1.1.7 Например: Spoiler: NEXT [DllImport("kernel32.dll")] public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId); [DllImport("kernel32.dll")] public static extern bool ReadProcessMemory(int hProcess, int lpBaseAddress, byte[] lpBuffer, int dwSize, ref int lpNumberOfBytesRead); const int PROCESS_WM_READ = 0x0010; Process process = Process.GetProcessesByName("calc")[0]; IntPtr processHandle = OpenProcess(PROCESS_WM_READ, false, process.Id); int bytesRead = 0; byte[] buffer = new byte[24]; //bytes Unicode // 0x000A9C08 address ReadProcessMemory(processHandle, 000A9C08, buffer, buffer.Length, bytesRead); Console.WriteLine(Encoding.Unicode.GetString(buffer) + " (" + bytesRead.ToString() + "bytes)");