Поток выполнения файла в WINDOWS - PullRequest
1 голос
/ 23 июня 2010

Мой вопрос:

  1. Каков поток выполнения исполняемого файла в WINDOWS? (т.е. что происходит, когда мы запускаем приложение.)
  2. Как ОС интегрирует с приложением для управления или обработки приложения?
  3. Имеет ли он центральное контрольное место , которое проверяет выполнение каждого файла или процесса?
  4. Зарегистрирован ли процесс в каталоге выполнения ? (если есть)
  5. Что на самом деле происходит, когда файл выполняет желаемую задачу в среде WINDOWS?

Вся помощь приветствуется ...

Ответы [ 3 ]

3 голосов
/ 23 июня 2010

Есть много чего, кроме уже указанных этапов (загрузка PE, перечисление dll, от которых он зависит, вызов их точек входа и вызов точки входа exe).

Вероятно, самое раннее действие - это ОС ипроцессор сотрудничает, чтобы создать новую инфраструктуру адресного пространства (я думаю, по существу выделенный TLB ).ОС инициализирует Блок среды процесса с данными всего процесса (например, идентификатор процесса и переменные среды).Он инициализирует блок окружения потока со специфичными для потока данными (идентификатор потока, корневые обработчики SEH и т. Д.).Как только соответствующий адрес выбран для каждой dll и загружен туда, переадресация экспортируемых функций происходит загрузчиком Windows.( очень кратко - во время компиляции, dll не может знать адрес, по которому она будет загружена каждым пользователем exe. Фактические адреса вызовов его функций, таким образом, определяются только во время загрузки).Есть инициализации страниц памяти, разделяемых между процессами - например, для сообщений Windows - и я думаю, что некоторая инициализация структур дискового разбиения на страницы. PLENTY еще продолжается.Основным компонентом Windows действительно является загрузчик Windows, но задействованы ядро ​​и руководитель. Наконец, , вызывается точка входа в exe - по умолчанию BaseProcessStart.

Обычно после этого происходит большая подготовка, выше уровня ОС, в зависимости от используемых платформ (каноническихCRT для собственного кода и CLR для управляемого): платформа должна инициализировать свои собственные внутренние структуры, чтобы иметь возможность предоставлять сервисы приложению - управление памятью, обработка исключений, ввод-вывод, вы называете это.

Aотличное место для таких углубленных обсуждений - Windows Internals .Вы также можете копнуть немного глубже на форумах, таких как SO, но у вас есть , чтобы можно было разбить его на более сфокусированные биты.Как сформулировано, это действительно слишком много для SO сообщения.

0 голосов
/ 23 июня 2010

Ваш вопрос не очень понятен, но я постараюсь объяснить.

Когда вы открываете приложение, оно загружается в оперативную память с вашего диска.Операционная система переходит к точке входа приложения.

ОС обеспечивает все вызовы, необходимые для отображения окна, соединения с оборудованием и получения пользовательского ввода.Он также управляет временем обработки, равномерно распределяя его между приложениями.

0 голосов
/ 23 июня 2010

Это высокоуровневый и пропускает много деталей:

  1. ОС читает PE-заголовок, чтобы найти dll, от которого зависит exe-файл, и точку входа exe-файла
  2. Функция DllMain во всех связанных библиотеках вызывается с сообщением DLL_PROCESS_ATTACH
  3. Точка входа в exe вызывается с соответствующими аргументами

Нет никакого "каталога выполнения" или другого центрального элемента управления, кроме самого ядра. Тем не менее, есть API, которые позволяют перечислять и запрашивать запущенные в данный момент процессы, например EnumProcesses.

...