Есть dos'овская игрушка( исходников нет), в которой нет сохранения
может кто знает, как легче всего его сделать??
как вариант сохранять состояние памяти процесса( для dosa только первый мегабайт ),
а потом его восстанавливать, но вот проблема : при сохранении памяти в рамках процесса
выполняется 4 потока, а при восстановлении( восстанавливаю при запуске игрушки ) только один

как тут быть? где копать?
спасибо
Здравствуйте mda, Вы писали:
mda>Есть dos'овская игрушка( исходников нет), в которой нет сохранения
mda>может кто знает, как легче всего его сделать??
mda>как вариант сохранять состояние памяти процесса( для dosa только первый мегабайт ),
mda>а потом его восстанавливать, но вот проблема : при сохранении памяти в рамках процесса
mda>выполняется 4 потока, а при восстановлении( восстанавливаю при запуске игрушки ) только один
mda>как тут быть? где копать?
Так это, контест надо тоже сохранять, причем для всех потоков. При восстановлении сначала считывать память, потом создавать недостающие потоки в остановленном состоянии, восстанавливать их контекст, после чего отпускать их на волю.
А вообще это extreme hackery, особенно для DOS. За деньги я еще может быть взялся за нечто подобное, но из любви к искусству — ни за что.
Здравствуйте Alex Fedotov, Вы писали:
AF>Так это, контест надо тоже сохранять, причем для всех потоков. При восстановлении сначала считывать память, потом создавать недостающие потоки в остановленном состоянии, восстанавливать их контекст, после чего отпускать их на волю.
А как создать недостающие потоки, если с помощью win api невозможно получить адрес потоковой функции?

или я что-то просмотрел?
Здравствуйте mda, Вы писали:
AF>>Так это, контест надо тоже сохранять, причем для всех потоков. При восстановлении сначала считывать память, потом создавать недостающие потоки в остановленном состоянии, восстанавливать их контекст, после чего отпускать их на волю.
mda>А как создать недостающие потоки, если с помощью win api невозможно получить адрес потоковой функции?
mda>или я что-то просмотрел?
А он не нужен. Все что нужно иметь — это память процесса и содержимое регистров каждого потока. При восстановлении процесса можешь указать любой стартовый адрес потокам, все равно ты будешь делать SetThreadContext, прежде чем позволишь им выполняться.
Только это все равно работать не будет (мог бы и раньше сообразить — старею). Мало сохранять память процесса, надо еще сохранять объекты ядра. Скажем, программа имела открытый файл в момент сохранения. При восстановлении кто его заново отрывать будет? А вот это, батенька, я даже за деньги делать не буду
Здравствуйте Alex Fedotov, Вы писали:
AF>А он не нужен. Все что нужно иметь — это память процесса и содержимое регистров каждого потока. При восстановлении процесса можешь указать любой стартовый адрес потокам, все равно ты будешь делать SetThreadContext, прежде чем позволишь им выполняться.
спасибо, не знал...
AF>Только это все равно работать не будет (мог бы и раньше сообразить — старею). Мало сохранять память процесса, надо еще сохранять объекты ядра. Скажем, программа имела открытый файл в момент сохранения. При восстановлении кто его заново отрывать будет? А вот это, батенька, я даже за деньги делать не буду
да, не подумал...

жаль
а хоть какие идеи по этому поводу есть?