Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как узнать размер памяти какого-то процесса?


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 лучше за нее не браться.


Наверх

Титульная страница Поиск, карта сайта Написать письмо