2009-07-31 17 views
6

Tengo curiosidad por las cosas que pasan antes de llamar a main(), como cargar el archivo ejecutable en la memoria, carga dinámica de la biblioteca compartida. ¿Tiene alguna sugerencia de cómo entender estas cosas con un ejercicio práctico?Cualquier ejercicio práctico para comprender cómo se carga un programa en la memoria y ejecutarlo

Las herramientas amd cosas que sé de, y utilizando ahora, incluye:

  • strace
  • desmontar
  • readelf
  • /proc/PID/mapa

NOTAS: Conozco el gran libro linkers and loaders, pero el ejercicio práctico me puede enseñar mejor que leer el libro.

Respuesta

3
  • ld.so man page documenta varias variables de entorno que pueden configurarse para modificar el proceso de vinculación dinámica o proporcionar detalles adicionales.

e.g.

LD_DEBUG=all cat </dev/null 
  • Usted puede obtener el código fuente de cada pieza involucrada - núcleo de Linux, enlazador dinámico, biblioteca C, código de inicio (crt0.o o similar). Puedes comenzar estudiando el código y haciendo modificaciones experimentales.
3

Si desea comprobar cómo está empaquetado un binario y las diferentes secciones del mismo, creo que el mejor programa disponible es objdump.

Elija lo ejecutable y hacer:


objdump -S <executable> > myfile.S 

Otro buen ejercicio será:

  • Crea un programa que utilice una biblioteca externa
  • Compilar el programa mediante el enlazado estático
  • Run el programa
  • Cambie el nombre del archivo de la biblioteca y compruebe si el programa se ejecuta
  • compilar el programa utilizando la biblioteca compartida
  • Cambiar el nombre de la biblioteca y comprobar si el programa se ejecuta

que responderá a algunas de sus preguntas acerca de lo que está sucediendo bajo las cortinas y cómo.

1

Cuando tomé una clase de sistema operativo en la universidad, utilizamos Nachos. No es un sistema operativo per se, sino una especie de "simulación" de sistema operativo que se ejecuta en el espacio de usuario. Está escrito en C++ y puedes compilar en forma cruzada ejecutables que luego los Nachos pueden cargar y ejecutar. Puede jugar con la interfaz de llamada del sistema y, en general, experimentar todo lo que quiera jugando con el código.

Lo ejecutamos en un laboratorio de Solaris, y tuve algunos problemas para ejecutarlo en Linux en mi máquina personal, pero podría ser un juguete divertido si está dispuesto a profundizar en algún código.

1

Me doy cuenta de que probablemente sea mucho lo que estás buscando, pero escribir tu propio ensamblador y enlazador sería muy educativo. Lo hice cuando estaba en la universidad y me encantó. Me tomó tal vez 120 horas de trabajo como recuerdo hacerlo funcionar para las cosas básicas que quería que hiciera. Creo que este proyecto más que cualquier otra cosa me hizo estar seguro de que una carrera en programación era para mí.

Cuestiones relacionadas