Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

CreateProcess/ExitProcess

6.0K
11 августа 2007 года
artyom-tyanutov
107 / / 10.07.2006
Здарова!
Тут возник один вопросик-как создать процесс, точнее его адресное пространство?
Ведь тут необходимо монтировать страницы в создающем процессе.
Больше никак?
А то ведь создание процесса можно в принципе оформить как создаваемую задачу и она бы сама себе создала все условия и перешла на точку входа проги!?
А в ExitProcess такая штука-я не могу освободить страницу где выполняется код, тогда как же освободить память процесса?
Даже если эта функция в ядре то ведь пде/пте нельзя освободить!
261
11 августа 2007 года
ahilles
1.5K / / 03.11.2005
если тебе надо создать новый пустой процесс, только лишь для адресного пространства, то мне кажестся проще создать процесс у которого только одна строчка кода в главном потоке
WaitForSingleObject(...,INFINITE);
так как существование процесса (а следовательно его адресного пространства) невозможно без существования объекта-поток и объекта-процесс и т.д. и т.п.......
освободить страницу где сейчас выполняется код невозможно, т.е. код сам себя освободить не может! тогда как выполниться инструкция следующая за вызовом функции VirtualFree сразу будет страничное нарушение, в ядре тоже самое - инструкция следующая сразу за инструкцией удаления PTE вызовет страничное нарушение

P.S. я может вопрос не так понял.....
6.0K
11 августа 2007 года
artyom-tyanutov
107 / / 10.07.2006
Ну дак в этом и фишка как освободить занимаемую процессом память при его завершении?
1.9K
11 августа 2007 года
disasm
232 / / 06.02.2006
Надо просто статус процесса установить в какое-нибудь специфическое значение, которое сигнализирует системному процессу о необходимости его завершения. При этом процессы с таким статусом не должны подвергаться планировке. После задания статуса выполнить hlt и ждать пока системный процесс не освободит память этого процесса сам.
6.0K
12 августа 2007 года
artyom-tyanutov
107 / / 10.07.2006
А если например подменять cr3 процесса на cr3 ядра?
Хотя в принципе наверно создание и завершение процесса лучше сделать именно там.
Тогда создание процесса можно сделать аналогично, ограничиваясь записью чего надо в описатель процесса и задание статуса что его надо запустить)
Но так как то тормозно получается, или так оно на самом деле?
1.9K
12 августа 2007 года
disasm
232 / / 06.02.2006
Менять cr3 не стоит, т.к. могут быть проблемы со стеком и его удалением. Лучше пусть удалением/созданием занимается отдельный процесс.

На самом деле под софтайсом наблюдал картину, когда процесса в списке процессов (Ctrl+Alt+Del) уже нет, но секунд 20 он висит в системном списке процессов со статусом Terminating (или Deleting, не помню). Это создано для того, чтобы вызывающий процесс мог прочитать код завешения этого процесса. Аналогичная система в случае Zombie процессов в UNIX.

По поводу создания процесса: вполне вероятно что именно так и делается.
349
12 августа 2007 года
Phantom-84
656 / / 27.10.2005
Большая часть операций по созданию/уничтожению процесса выполняется в контексте этого процесса. Операции, которые невозможно осуществить в контексте данного процесса, можно выполнить в контексте родительского процесса, в контексте первичной (системной) задачи или планировщиком в контексте произвольного процесса.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог