Realmente necesita leer acerca de los compiladores y el diseño del compilador. Comience con http://www.freetechbooks.com/compiler-design-and-construction-f14.html
Aquí está el resumen.
El objetivo es obtener material copiado en la memoria que se ejecutará y ejecutará. Entonces el sistema operativo le da el control a esas cosas.
El "cargador" copia cosas en la memoria de varios archivos. Estos archivos son en realidad un tipo de lenguaje que describe dónde van las cosas en la memoria y qué sucede en esos lugares. Es una especie de lenguaje de "memoria de carga".
El trabajo de compilador y enlazador es crear archivos que harán que el cargador haga lo correcto.
La salida del compilador es archivos "objeto" - esencialmente instrucciones del cargador en muchos archivos pequeños fragmentados con muchas referencias externas. La salida del compilador es, idealmente, algún código de máquina con marcadores de posición para que las referencias externas se conecten. Todas las referencias internas se han resuelto como compensaciones en la memoria del montón o marcos de pila o nombres de funciones.
La salida del enlazador es archivos de cargador más grandes con menos referencias externas. Es en gran medida el mismo que el resultado del compilador en formato. Pero tiene más cosas doblado en
Leer esto en el comando ld:. http://linux.about.com/library/cmd/blcmdl1_ld.htm
Leer esto en el comando nm: http://linux.about.com/library/cmd/blcmdl1_nm.htm
He aquí algunos detalles.
"... ¿cómo llamaría a las funciones o se referiría a las variables?"
Los nombres de las funciones, en general, se conservan hasta las últimas etapas de producción de salida.
Los nombres de las variables se transforman en algo más. Las variables "globales" se asignan estáticamente y el compilador tiene un mapa del nombre de la variable al tipo para desplazarse a la memoria estática ("montón").
Las variables locales dentro de una función se asignan (generalmente) en el marco de la pila. El compilador tiene un mapa del nombre de la variable a escribir para desplazar al marco de la pila. Cuando se ingresa la función, se asigna un marco de pila del tamaño requerido y las variables simplemente se compensan en ese marco.
"... ¿cómo llamaría a funciones o se referiría a variables para operaciones?"
Debe proporcionar una pista al compilador. La palabra clave extern
le dice al compilador que un nombre no está definido en este módulo, pero está definido en otro módulo y la referencia debe resolverse en el momento del enlace (o carga).
"... si no hay nada para vincular ..."
Esto nunca es cierto. Tu programa es solo una parte del ejecutable general. La mayoría de las bibliotecas C incluyen el programa principal real que luego llama a su función llamada "main".
"¿El enlazador cambiará la salida del código de objeto del ensamblador?"
Esto varía mucho con el sistema operativo. En muchos sistemas operativos, el enlazador y la carga ocurren todos a la vez.Lo que sucede a menudo es que la salida del compilador de C se envía a un archivo sin que realmente se haya realizado demasiada resolución.
Cuando el archivo ejecutable se carga en la memoria, también se cargan las referencias de archivo y cualquier archivo de objeto compartido externo.
"El programa no se está ejecutando, solo está en la etapa de fabricación".
Esto no significa nada. No estoy seguro de por qué estás incluyendo esto.
"¿Cómo podría enlazar el mapa a la memoria? ¿Cómo se vería?"
El sistema operativo asignará un bloque de memoria en el que se debe copiar el programa ejecutable. El vinculador/cargador lee el archivo de objeto, cualquier archivo de archivo de objeto y copia las cosas en esos archivos en esa memoria. El enlazador realiza la copia y la resolución del nombre y escribe un nuevo archivo de objeto que es más compilador. El cargador lo convierte en memoria real y convierte la ejecución en la página de texto resultante.
"Está en el tiempo de ejecución ¿verdad?"
Esa es la única manera de depurar: tiempo de ejecución. No puede significar nada más, o no está depurando.
Es posible que tenga mejor suerte con esto si separarlo en diferentes cuestiones. Cubrir todo este terreno en una sola respuesta es probablemente más de lo que la mayoría de la gente, incluido yo, está dispuesta a hacer en su tiempo libre. – tvanfosson
Lo siento. No pensé en eso. Estaba tan confundido. Así que seguí escribiendo. Trataré de dividirme en varias publicaciones. – Alice