![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать размер памяти какого-то процесса?
GrayFace © (2004-01-27 15:46:00)Идея такая: сохранять всю память процесса в файл, а потом загружать. Будет полезно для Diablo2, для выключения компа... Сабж и еще в Artmoney есть понятие 'блок памяти'. Что с ними делать?
VMcL (2004-01-28 16:47:00) [1]>>GrayFace © (28.01.04 15:36) [8]
В коллекцию Rouse_
AKul (2004-01-28 16:09:00) [2]
> GrayFace © (28.01.04 15:36) [8]
> А как им пользоваться?
А зачем им пользоваться?
GrayFace (2004-01-28 15:36:00) [3]>И Swap-файл тоже изобрели
А как им пользоваться?
Digitman (2004-01-27 18:08:00) [4]
> Игорь Шевченко © (27.01.04 17:37) [6]
действительно) ... все гениальное на поверку простое как лапоть)
Игорь Шевченко (2004-01-27 17:37:00) [5]
> Идея такая: сохранять всю память процесса в файл, а потом
> загружать
Hybernate уже изобрели. Причем для всех процессов. И Swap-файл тоже изобрели. Все изобретено до нас, Кулибин отдыхает.
AKul (2004-01-27 17:36:00) [6]Маленькое утешение: можно сохранять только нижние 2 ГБ. А на 500 метровом винте создать сжатый диск с коэффициентом сжатия 1:64.
YuRock (2004-01-27 17:25:00) [7]> Digitman © (27.01.04 17:18) [3]
Да, да... так и есть... Особенно удобно это использовать, когда памяти всего 64мб и винт на 500 метров...
Digitman (2004-01-27 17:18:00) [8]
> GrayFace © (27.01.04 15:46)
> Как узнать размер памяти какого-то процесса?
что его узнавать-то ? 4 гб всегда он
AKul (2004-01-27 17:13:00) [9]
> Mystic © (27.01.04 16:20) [1]
Понимае формата PE-файла здесь ничего не даст :)
> GrayFace © (27.01.04 15:46)
Хорошо, Вы узнаете где находится образ exe-файла, образы всех загруженных DLL, сохраните это все на диск; Вы также найдете и сохраните все данные динамически выделенной памяти; Найдете все потоки и сохраните их стеки и их локальные данные (статические и динамические); Остановите все потоки (с этого должно все начинаться) и сохраните их контексты (состояние регистров); Сохраните описатели всех объектов ядра, USER, GDI и так далее...
Но как Вы потом это все будете загружать?
Допустим Вам удалось загрузить сохраненные образы екзешника и библиотек, Вы даже сказали системе, что используете эти библиотеки (без DLL_PROCESS_ATACH и DLL_THREAD_ATACH), Вы также создали все треды, восстановили их стеки, контексты и каким-то образом локальные данные. Вам даже удалось заново создать все объекты ядра, USER, GDI.
Но как Вы заставите систему присвоить всем описателям объектов (тредам, файлам, окнам...) те же значения, что и перед сохранением? Например, Вам удалось открыть файл с сохраненными правами доступа, установить сохраненную позицию, но как сказать системе, что бы при открытии (вызове CreateFile), она вернула описатель файла с номером, как в прошлый раз? - Никак. Описатель файла будет содержать совершенно другое значение (конечно, иногда оно может и совпасть), а вот сохраненный код будет обращаться к операциям с файлом со старым описателем (какой был сохранен в его данных), а при новом создании этот описатель может быть или другим объектом, или вообще не сущестовать.
Такая задача "разрешима" только на уровне ядра :)
Mystic (2004-01-27 16:20:00) [10]Технически сложно реализуемая задача... Без понимания работы с памятью и формата Win PE лучше за нее не браться.