Поскольку каждый из ответов и комментариев дает полезную информацию. Я только что собрал все ответы и комментарии в одном посте.
Мне просто интересно, возможно ли это
заменить Loader (исполняемая программа
загрузчик не загрузчик)
Операционная система (Windows мой
выбор).
Нет, в процессе создания Windows и загрузчик пользовательского режима в ntdll связаны между собой (PsCreateProcess будет напрямую отображаться в ntdll и переходить к нему, чтобы он мог завершить разрешение модулей и настройку процесса), вы не можете заменить его.
но есть доступные ресурсы, описывающие формат и загрузку процессов.
Вот довольно старая, но все еще актуальная статья MSDN, касающаяся PE-файлов (exe + dll)
- Часть I. Углубленный взгляд на переносимый исполняемый файл Win32
Формат Мэтта Петрека (MSDN
Журнал, февраль 2002)
- Часть 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 находится там.