Incluso con su aclaración, la respuesta es que depende, la secuencia de inicio exacta depende del hardware, aunque hay bastantes coincidencias. El cargador de arranque generalmente se carga en una dirección absoluta, y el archivo en el que está contenido se lee frecuentemente en la memoria exactamente como está. Esto significa que en lugar de un enlazador normal, normalmente se usa un "localizador de enlaces". Cuando un enlazador típico produce un archivo ejecutable listo para su reubicación y carga, un localizador produce un ejecutable que ya está configurado para ejecutarse en una dirección exacta, con todas las reubicaciones ya aplicadas. Para aquellos que tienen la edad suficiente para recordarlos, por lo general es bastante parecido a un archivo .COM de MS-DOS.
Junto con eso, tiene que (por supuesto) vincular estáticamente todo el tiempo de ejecución del que depende el programa; no puede depender de algo así como una biblioteca DLL o de objeto compartido, porque el código para cargar cualquiera de aquellos que aún no se han cargado.
Definir "independiente". ¿Quiere decir que no hay dependencias en las bibliotecas externas? ¿Para qué sistema operativo y entorno? –
Independiente como en? Sin sistema operativo? No hay bibliotecas dinámicas? –
@Josh Kelley: me refiero a un programa que es básicamente el primer programa cargado en una computadora (por ejemplo, el sistema operativo). Sé que la mayoría de la gente escribe un gestor de arranque en ASM, pero me preguntaba si es posible hacerlo en C++. –