Professional Documents
Culture Documents
Introduccin a la Programacin
Clase 3
Patricia Borensztejn
De un programa C a su carga en
memoria para su ejecucin
Compilacin
Si no especificamos nada, gcc compila,
ensambla y enlaza, es decir, genera el
ejecutable. A ese conjunto de funciones se
las llama build.
En http://gcc.gnu.org/onlinedocs/gcc4.6.0/gcc/ tenemos un manual on-line de las
opciones de compilacin del gcc
"euler1.c"
.def
___main; .scl
.section .rdata,"dr"
2;
.type
32;
.endef
.type
32;
.endef
LC0:
.ascii "El resultado es %d\12\0"
.text
.globl _main
.def
_main; .scl
2;
_main:
pushl
%ebp
movl
%esp, %ebp
andl
$-16, %esp
subl
$32, %esp
call
___main
movl
$0, 24(%esp)
movl
$3, 28(%esp)
jmp
L2
L3:
movl
movl
movl
cltd
idivl
movl
testl
je
movl
movl
movl
cltd
idivl
movl
testl
jne
28(%esp), %eax
$3, %edx
%edx, %ecx
%ecx
%edx, %eax
%eax, %eax
L3
28(%esp), %eax
$5, %edx
%edx, %ecx
%ecx
%edx, %eax
%eax, %eax
L4
movl
addl
28(%esp), %eax
%eax, 24(%esp)
incl
28(%esp)
cmpl
jle
movl
movl
movl
call
movl
leave
ret
.def
.type
$999, 28(%esp)
L5
24(%esp), %eax
%eax, 4(%esp)
$LC0, (%esp)
_printf
$0, %eax
L4:
L2:
_printf; .scl
32;
.endef
2;
Etapa de Compilacin
Dos funciones:
Chequeo de sintaxis: independiente de la mquina, solo
depende de la especificacin del lenguaje
Generacin de cdigo mquina: dependiente de la
mquina
Etapa de enlace
En esta etapa, se unen todos los archivos .o y se
genera un archivo ejecutable, con el formato
definido por el Sistema Operativo en uso.
En windows, los ejecutables tienen extensin .exe
En linux, ninguna extensin.
Errores tpicos de linkedicin o enlace:
Variables no declaradas, funciones no declaradas, o
declaradas varias veces.
Importante
El proceso de compilacin y enlace depende
de la mquina y del sistema operativo.
No hay compatibilidad binaria entre distintas
mquinas (ISAs) y distintos SOs.
Ese es el negocio! Estas atrapado en una
mquina y en un SO y no te podes mover de
ah si no tenes los fuentes de tu programa!!!!!!
Ejecutables
Los formatos de los archivos ejecutables
dependen del Sistema Operativo.
Contienen una cabecera con informacin que
incluye el tamao del cdigo y de los datos, y una
lista de lugares dentro del cdigo que debern ser
reubicadas en funcin de la posicin de memoria
donde el mdulo sea cargado para su ejecucin.
Es decir, el ejecutable contiene posiciones
relativas de datos que deben ser cambiados.
Carga
El SO tiene un programa cuya funcin es instalar
el ejecutable en memoria. Obviamente la
cabecera no se instala, sino que sirve para
modificar el ejecutable.
El lugar de la memoria donde se instala el
programa, lo decide el SO.
Los SO actualmente no instalan TODO el
programa en memoria, sino solo el principio
(donde est el main) luego, van trayendo el
cdigo y los datos a demanda esto se llama
Memoria Virtual y sirve para que quepan mas
cosas en memoria.
Compiladores de C: GNU
GNU : Sistema de software no propietario, de dominio pblico, que est a
libre disposicin en Internet, de forma que cualquiera puede bajarlo,
modificarlo y redistribuirlo. Fue iniciado en 1.984 por Richard Stallman en
el MIT. Dentro de la inmensa cantidad de software que ha generado la
iniciativa, cabe destacar GCC ("GNU C Compiler") que rpidamente se
convirti en un conjunto de compiladores de los lenguajes ms
importantes (C++, Objective-C; Objective-C++; Fortran; Java; Ada; Pascal y
COBOL), por lo que las siglas anteriores pasaron a significar "GNU
Compiler Collection". Los compiladores que la componen tienen a su vez
nombres individuales. Por ejemplo, el de Ada es GNAT, y el de C++ es
conocido como G++. Cabe destacar que todos ellos son compiladores
nativos, en el sentido de que no se trata de preprocesadores que trasladan
el cdigo a otro lenguaje (como ocurra con las versiones originales de
C++), y que existen versiones para los procesadores y mquinas ms
importantes: Intel; DEC; HP; Motorola; PDP; Power PC; SPARC; VAX; etc.