Можно ли заменить загрузчик ОС? Есть ли способ получить контроль над Loader? - PullRequest
6 голосов
/ 29 января 2010

Мне было просто интересно, можно ли заменить Loader (загрузчик исполняемых программ, а не загрузчик) операционной системы (Windows - мой выбор). Доступны ли сторонние загрузчики, которые исправят установленный по умолчанию.

Есть ли способ получить контроль над загрузчиком ОС? Я имею в виду, я хочу, чтобы все, что он делает, было видно для меня (каждый шаг).

Если вы спросите меня, почему я хочу это сделать, For learning purposes.

Ответы [ 6 ]

5 голосов
/ 29 января 2010

Нет, создание процесса и загрузчик пользовательского режима в ntdll связаны друг с другом (PsCreateProcess будет напрямую отображаться в ntdll и переходить к нему, чтобы он мог завершить разрешение модулей и настройку процесса), вы не можете заменить его.

3 голосов
/ 29 января 2010

Если вы хотите поиграть с подобными вещами, тогда Linux - путь.

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

2 голосов
/ 29 января 2010

Поскольку каждый из ответов и комментариев дает полезную информацию. Я только что собрал все ответы и комментарии в одном посте.

Мне просто интересно, возможно ли это заменить Loader (исполняемая программа загрузчик не загрузчик) Операционная система (Windows мой выбор).

Нет, в процессе создания Windows и загрузчик пользовательского режима в ntdll связаны между собой (PsCreateProcess будет напрямую отображаться в ntdll и переходить к нему, чтобы он мог завершить разрешение модулей и настройку процесса), вы не можете заменить его.

но есть доступные ресурсы, описывающие формат и загрузку процессов.

Вот довольно старая, но все еще актуальная статья MSDN, касающаяся PE-файлов (exe + dll)

  1. Часть I. Углубленный взгляд на переносимый исполняемый файл Win32 Формат Мэтта Петрека (MSDN Журнал, февраль 2002)
  2. Часть II. Углубленный взгляд на портативный исполняемый файл Win32 Формат Мэтта Петрека (MSDN Журнал, март 2002)

Вы можете использовать эту информацию, чтобы написать приложение, которое запускает данный исполняемый файл.

Если вас больше интересует linux и формат elf, вы найдете все, что вам нужно в google.

Есть ли способ, которым я могу получить контроль над загрузчиком ОС? Я имею в виду, я хочу вещи, которые он делает для быть видимым для меня (каждый шаг).

В Windows вы можете получить некоторую наглядность в загрузчике на работе, включив оснастку загрузчика. Это делается с помощью gflags.exe (часть средств отладки для Windows). Есть хорошая gflags.exe ссылка http://www.osronline.com/DDKx/ddtools/gflags_4n77.htm. С включенной функцией «Показать привязки загрузчика» можно просматривать сообщения трассировки загрузчика, запуская приложение в отладчике (WinDBG).

Если вы хотите поиграть с подобными вещами, тогда Linux - это лучший способ.

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

Загрузчики для различных двоичных форматов находятся в fs/binfmt_*.c в источнике Linux (fs/binfmt_elf.c - это загрузчик, используемый для исполняемых файлов в формате ELF - т. Е. Подавляющее большинство).

Динамический загрузчик /lib{,64}/ld-linux.so.2 также используется для динамически связанных двоичных файлов - это пример «интерпретатора», на который ссылается код в binfmt_elf.c.

В Linux есть подключаемые форматы исполняемых файлов, поэтому можно добавить дополнительный загрузчик программ, который будет выполнять собственные пользовательские операции с исполняемыми файлами, а не стандартные (ELF, сценарии оболочки, binfmt_misc).

Модуль binfmt_misc позволяет писать пользовательские загрузчики для исполняемых программ полностью в пользовательском пространстве; обычно используется для выполнения не собственных двоичных файлов или интерпретируемых двоичных файлов, таких как Java, исполняемые файлы CLR и т. д.

С другой стороны, если вы хотите заменить загрузчик ELF чем-то другим, вы можете создать модуль binfmt прямо в ядре. Посмотрите на fs/binfmt_* для примеров. Сам загрузчик ELF находится там.

2 голосов
/ 29 января 2010

В Linux есть подключаемые форматы исполняемых файлов, поэтому можно добавить дополнительный загрузчик программ, который будет выполнять собственные пользовательские операции с исполняемыми файлами, а не стандартные (ELF, сценарии оболочки, binfmt_misc).

Модуль binfmt_misc позволяет писать пользовательские загрузчики для исполняемых программ полностью в пользовательском пространстве; обычно используется для выполнения не собственных двоичных файлов или интерпретируемых двоичных файлов, таких как Java, исполняемые файлы CLR и т. д.

С другой стороны, если вы хотите заменить загрузчик ELF чем-то другим, вы можете сделать модуль binfmt прямо в ядре. Посмотрите на fs / binfmt_ * для примеров. Сам ELF загрузчик там.

1 голос
/ 30 января 2010

Есть ли способ получить контроль над загрузчиком ОС? Я имею в виду, я хочу, чтобы все, что он делает, было видно для меня (каждый шаг).

В Windows вы можете получить некоторое представление о загрузчике на работе, включив оснастку загрузчика. Это делается с помощью gflags.exe (часть средств отладки для Windows). Хорошая ссылка на gflags.exe здесь . С включенной функцией «Показать привязки загрузчика» можно просматривать сообщения трассировки загрузчика, запуская приложение в отладчике (WinDBG).

1 голос
/ 29 января 2010

Нет, вы не можете заменить загрузчик ОС, но есть доступные ресурсы, описывающие формат и загрузку процессов.

Вот довольно старая, но все еще актуальная статья MSDN, касающаяся PE-файлов (exe + dll) http://msdn.microsoft.com/en-us/magazine/cc301805.aspx

Вы можете использовать эту информацию, чтобы написать приложение, которое запускает данный исполняемый файл.

Если вас больше интересует linux и формат elf, вы найдете все, что вам нужно в google.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...