2010-01-29 18 views
6

Me preguntaba si es posible reemplazar Loader (cargador de programa ejecutable no cargador de arranque) de un sistema operativo (Windows es mi elección). ¿Hay cargadores de terceros disponibles que corregirían el predeterminado?¿Es posible reemplazar el cargador de un sistema operativo? ¿Alguna forma de obtener el control del cargador?

¿Hay alguna manera de obtener el control del cargador de sistema operativo? Quiero decir, quiero que las cosas que está haciendo sean visibles para mí (en todos y cada uno de los pasos).

Si usted me pregunta qué quiero hacer esto, For learning purposes.

+1

¿Cargador de arranque o cargador ejecutable? –

+0

'ejecutable loader' – claws

Respuesta

2

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)

  1. Part I. An In-Depth Look into the Win32 Portable Executable File Format de Matt Pietrek (MSDN Magazine, febrero de 2002)
  2. 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í.

5

No, la creación de procesos y el modo de usuario del cargador en ntdll están unidas entre sí (PsCreateProcess será el mapa directamente en ntdll y saltar a él de modo que pueda termine de resolver los módulos y configurar el proceso), no puede reemplazarlo.

+0

No será agradable, pero no sería al menos posible, a través de algo como [API hooking] (http://www.codeproject.com/Articles/2082/API-hooking-revealed) o técnicas similares de interceptación de bajo nivel? – rubenvb

3

Si quieres jugar con este tipo de cosas, entonces Linux es el camino a seguir.

El cargador es parte del kernel, pero como usted tiene acceso a toda la fuente del kernel, puede jugar con él a su gusto.

+1

En realidad, el cargador en Linux es /lib{,64}/ld-linux.so.2. –

+3

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 'ld-linux.so.2' que Ignacio señala también se usa para los binarios enlazados dinámicamente; es un ejemplo de un" intérprete "como se menciona en el código en' binfmt_elf.c'. – caf

1

No, no puede reemplazar el cargador del sistema operativo, pero hay recursos disponibles que describen el formato y la carga de los procesos.

Aquí es un artículo de MSDN bastante viejo, pero todavía uptodate con respecto a los archivos PE (EXE + DLL) http://msdn.microsoft.com/en-us/magazine/cc301805.aspx

Puede utilizar esta 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.

2

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 es comúnmente utilizado para ejecutar binarios que no son nativos o binarios interpretados como Java, etc. CLR ejecutables

Por otro lado si desea reemplazar el cargador ELF con otra cosa se puede hacer un módulo de binfmt directamente el kernel Mire fs/binfmt_ * para ver ejemplos. El cargador ELF está ahí.

1

¿Hay alguna manera de obtener el control del cargador de sistema operativo?Quiero decir, quiero que las cosas que está haciendo sean visibles para mí (en todos y cada uno de los pasos).

En Windows, puede obtener un poco de visibilidad en el cargador en el trabajo al habilitar Loader Snaps. Haga esto con gflags.exe (parte de Debugging Tools for Windows). Hay una buena referencia de gflags.exe here. Con Show Loader Snaps habilitado, puede ver los mensajes de seguimiento de cargador iniciando la aplicación bajo un depurador (WinDBG).

Cuestiones relacionadas