Dado que cada una de las respuestas & comentarios está dando información útil. Acabo de compilar, todas las respuestas & comentarios en una sola publicación.
Me preguntaba si es posible para reemplazar Loader (programa ejecutable cargador no el cargador de arranque) de un sistema operativo (Windows es mi elección).
No, en la creación de ventanas proceso y el modo de usuario del cargador en ntdll están atados juntos (PsCreateProcess será el mapa directamente en ntdll y saltar a él para que pueda terminar la resolución de los módulos y la configuración del proceso), no se puede reemplázalo.
pero hay recursos disponibles que describen el formato y la carga de los procesos.
Aquí es un bastante viejo, pero todavía UptoDate artículo de MSDN con respecto a los archivos PE (EXE + DLL)
- Part I. An In-Depth Look into the Win32 Portable Executable File Format de Matt Pietrek (MSDN Magazine, febrero de 2002)
- Part II. An In-Depth Look into the Win32 Portable Executable File Format por Matt Pietrek (MSDN Magazine, marzo de 2002)
puede utilizar esta i información para escribir una aplicación que inicia un ejecutable dado.
Si está más interesado en el formato de linux y el duende, encontrará todo lo que necesita en google.
¿Hay forma de que pueda obtener el control sobre el cargador de sistema operativo? Quiero decir, quiero que las cosas que está haciendo a sean visibles para mí (en todos y cada uno de los pasos).
En de Windows, usted puede conseguir un poco de visibilidad en el cargador en el trabajo al permitir cargador Snaps. Haga esto con (parte de Debugging Tools for Windows). Hay una buena referencia http://www.osronline.com/DDKx/ddtools/gflags_4n77.htm. Con Show Loader Snaps habilitado, puede ver los mensajes de seguimiento de cargador iniciando la aplicación bajo un depurador (WinDBG).
Si desea jugar con este tipo de cosas, entonces Linux es el mejor manera de ir.
El cargador es parte de la kernal, pero como usted tiene acceso a toda la fuente de kernel, puede jugar con ella a su gusto.
Los cargadores para varios formatos binarios están en fs/binfmt_*.c
en la fuente de Linux (fs/binfmt_elf.c
es el cargador utilizado para ejecutables en formato ELF, es decir, la gran mayoría).
El cargador dinámico /lib{,64}/ld-linux.so.2
también se utiliza para binarios enlazados dinámicamente; es un ejemplo de un "intérprete" como se menciona en el código en binfmt_elf.c.
Linux tiene formatos de archivos ejecutables conectables, por lo que es posible agregar un cargador de programas adicional que hará sus propias cosas personalizadas con archivos ejecutables, en lugar de los estándar (ELF, scripts de shell, binfmt_misc).
El módulo binfmt_misc
le permite escribir cargadores personalizados para programas ejecutables completamente en el espacio de usuario; esto se usa comúnmente para ejecutar binarios no nativos o binarios interpretados, como Java, ejecutables CLR, etc.
Por otro lado, si desea reemplazar el cargador ELF con otra cosa, puede hacer un módulo binfmt directamente en el kernel . Mira fs/binfmt_*
para ver ejemplos. El cargador ELF está ahí.
¿Cargador de arranque o cargador ejecutable? –
'ejecutable loader' – claws