Tienes que entender cómo arranca el procesador, entender el estado del chip en el arranque, sin duda el código de arranque está en un flash / rom en algún lugar. Tienes que saber dónde. Luego, con ese conocimiento, debe colocar la tabla de vectores o el código de inicio en la dirección correcta según las reglas de inicio del procesador, lo que significa que debe tener un control completo sobre el compilador, el ensamblador y el vinculador para poder hacer eso. No está compilando una aplicación que se ejecuta en Linux o Windows, donde el script de vinculador predeterminado sabe cómo colocar las cosas, esto tiene que realizarse según las reglas del hardware, no las reglas de algunos sistemas operativos.