Вы находитесь на странице: 1из 7

Universidad de El Salvador

Facultad Multidisciplinaria de Occidente


Departamento de Ingeniera y Arquitectura

Sitemas Operativos

Solucin Gua de trabajo N 3-Parte de tareas


Introduccin a la Programacin en C y
GNU-Assembler [ GAS ] en el Entorno GNU/Linux

Docente:
Ing. Luis Alonso Barrera

Integrantes:
Trigueros Jerez, Erick Adiel
Velasquez Pleitez, Gustavo Adolfo

Fecha de entrega:
Miercoles 23 de agosto de 2017
TAREAS PARTE I. Programacin en Lenguaje C
Herramientas a utilizar
1.1 Compilador gcc:
Verifique si tiene instalado gcc (si No lo tiene instlelo):
En la terminal ejecutamos dpkg -l | grep binutils y vemos si est instalada. (Si), si es asi
aparecera la informacion de gcc, si no procedemos a instalarlo con apt-get install gcc
Que versin de gcc tiene instalada:
En la terminal ejecutamos gcc -v
Version: gcc version 4.9.2 (Ubuntu 4.9.2-10ubuntu13)
Describa las diferentes fases de compilacin en C:
Se parte del Cdigo Fuente C original (fuente.c)
Preprocesador: En esta etapa se interpretan las directivas al preprocesador. Entre
otras cosas, las variables inicializadas con #define son sustituidas en el cdigo por su
valor en todos los lugares donde aparece su nombre.
Compilador: La compilacin transforma el cdigo C en el lenguaje ensamblador
propio del procesador de nuestra mquina.
Ensamblador: El ensamblado transforma el programa escrito en lenguaje
ensamblador a cdigo objeto, un archivo binario en lenguaje de mquina ejecutable
por el procesador.
Enlazador: Las funciones de C/C++ incluidas en nuestro cdigo, tal como printf() en
el ejemplo, se encuentran ya compiladas y ensambladas en bibliotecas existentes en
el sistema. Es preciso incorporar de algn modo el cdigo binario de estas funciones
a nuestro ejecutable. En esto consiste la etapa de enlace, donde se renen uno o ms
mdulos en cdigo objeto con el cdigo existente en las bibliotecas.
Se obtiene el Cdigo ejecutable (a.out)
Defina la utilidad de los siguientes parmetros para el comando gcc:
-c: Realiza pre procesamiento y compilacin, obteniendo el archivo en cdigo objeto; no
realiza el enlazado.
-S: Detiene despus de la etapa de compilacin propiamente dicha; No ensambla. La salida
est en forma de un archivo de cdigo de ensamblador para cada archivo de entrada no
ensamblador especificado.

-E: Realiza solamente el pre procesamiento, enviando el resultado a la salida estndar.

-o: Indica el nombre del archivo de salida, cualesquiera sean las etapas cumplidas.

-g: Incluye en el ejecutable generado la informacin necesaria para poder rastrear los errores
usando un depurador, tal como GDB (GNU Debugger).

-Idir: Especifica la ruta hacia el directorio donde se encuentran los archivos marcados para
incluir en el programa fuente. No lleva espacio entre la I y la ruta, as: -I/usr/include.

-Ldir: Especifica la ruta hacia el directorio donde se encuentran los archivos de biblioteca
con el cdigo objeto de las funciones referenciadas en el programa fuente. No lleva espacio
entre la L y la ruta, as: -L/usr/lib.

-v: Muestra los comandos ejecutados en cada etapa de compilacin y la versin del
compilador. Es un informe muy detallado.
1.2. En qu directorio del sistema de archivos Linux se encuentran los archivos de
cabecera de lenguaje C?
/usr/include
Archivos cabecera para el lenguaje de programacin C. Estos deberan estar de hecho debajo de
/usr/lib por coherencia, pero tradicionalmente se ha apoyado de forma mayoritaria esta ubicacin.

1.3. En qu directorio del sistema de archivos Linux se encuentran los archivos de


cabecera propios del sistema?
/usr/include/linux

1.4. Qu es una biblioteca esttica?


Es una librera que "se copia" en nuestro programa cuando lo compilamos. Una vez que tenemos el
ejecutable de nuestro programa, la librera no sirve para nada (es un decir, sirve para otros futuros
proyectos). Podramos borrarla y nuestro programa seguira funcionando, ya que tiene copia de todo
lo que necesita. Slo se copia aquella parte de la librera que se necesite. Por ejemplo, si la librera
tiene dos funciones y nuestro programa slo llama a una, slo se copia esa funcin.

1.5. Qu es una biblioteca dinmica?


Una librera dinmica NO se copia en nuestro programa al compilarlo. Cuando tengamos nuestro
ejecutable y lo estemos ejecutando, cada vez que el cdigo necesite algo de la librera, ir a
buscarlo a sta. Si borramos la librera, nuestro programa dar un error de que no la encuentra.

1.6. Cul es la diferencia entre las bibliotecas estticas y bibliotecas dinmicas?


Las diferencias ms relevantes de las libreras dinmicas respecto a las estticas son
fundamentalmente dos:

Las libreras estticas quedan incluidas en el ejecutable, mientras las dinmicas son
ficheros externos, con lo que el tamao de la aplicacin (nuestro ejecutable) es mayor en el
primer caso que en el segundo. Esto puede ser de capital importancia en aplicaciones muy
grandes, ya que el ejecutable debe ser cargado en memoria de una sola vez.

Las libreras dinmicas son ficheros independientes que pueden ser invocados desde
cualquier ejecutable, de modo que su funcionalidad puede ser compartida por varios
ejecutables. Esto significa que solo se necesita una copia de cada fichero de librera en el
Sistema. Esta caracterstica constituye la razn principal de su utilizacin, y es tambin
origen de algunos inconvenientes, principalmente en sistemas como Windows en los que
existen centenares de ellas.
Otras diferencias:
Si se realizan modificaciones en los mdulos de una librera esttica, es necesario recompilar
todos los ejecutables que la utilizan, mientras que esto no es necesario en el caso de una
librera dinmica, siempre que su interfaz se mantenga.
Las libreras estticas solo se utilizan en la fase de construccin del ejecutable. Las
dinmicas se utilizan durante la ejecucin.
Las libreras estticas, que entran a formar parte indivisible del ejecutable, son cargadas con
el proceso de carga de este. Las libreras dinmicas no necesariamente tienen que cargarse
con la carga inicial (aunque pueden serlo). De hecho, una librera dinmica puede ser
cargada bajo demanda en el momento en que se necesita su funcionalidad, e incluso puede
ser descargada cuando no resulta necesaria.
1.7. Defina la utilidad del comando ldd
Es un comando que enlista las dependencias dinmicas de archivos ejecutables o de objetos
compartidos.
Si el archivo es un archivo ejecutable o un objeto compartido, ldd enlista las rutas de todas las
libreras u objetos compartidos que son cargados cuando es ejecutado el programa o cuando es
cargado el objeto compartido. Si los objetos compartidos no tuvieran permisos de ejecucin ldd
enviar un mensaje de advertencia antes de intentar procesar el archivo.

1.8. Defina la utilidad del comando strace


Es una utilidad de lnea de comandos para comprobacin de errores en el sistema operativo
GNU/Linux. Permite monitorear las llamadas al sistema usadas por un determinado programa y
todas las seales que ste recibe.Su funcionamiento es posible por una caracterstica del ncleo
linux llamada ptrace. Es similar a la aplicacintruss disponible en otros sistemas Unix. El programa
Cygwin provee de una utilidad similar.

Su uso ms comn consiste en arrancarlo junto al programa al que se le efecta el trazado, el cual
imprime una lista de llamadas al sistema que dicho programa ejecuta. Es til para averiguar la
causa del fallo de un programa determinado porque informa de situaciones en las que por ejemplo,
el programa est intentando acceder a un fichero que no existe o que no tiene permiso de lectura.

1.9. Explique en que consiste la utilidad make


GNU make es una herramienta la cual controla la generacion de ejecutables y otros archivos sin
fuente de un programa desde los codigos fuente del programa.

1.10. Cul es la estructura bsica para un archivo Makefile?


-Declaracin de variables
-Reglas explicitas
-Reglas implcitas
-Targets

1.11. Explique la importancia de libc


libc o C Standard Library es la librera estndar para la programacin en C. Esta librera provee de
macros, definiciones de tipo y funciones para tareas como manejo de strings, operaciones
matemticas, procesos i/o, etc.
1.12. Qu versin de libc tiene instalada?
Ejecutando ldd --version
GLIBC 2,24
TAREAS PARTE II Programacin en Lenguaje Ensamblador [ GNU-Assembler GAS ]

2.1 GNU Assembler


2.1.1Verifique si tiene instalada esta herramienta y en que versin.
Ejecutamos dpkg -l | grep binutils y vemos si esta instalada. (Si)
Versin: Ejecutamos ld -v y se nos muestra la versin.
GNU ld (GNU Binutils for Ubuntu) 2.25

2.1.2. Describa el uso de la herramienta as incluida en el paquete binutils.


El ensamblador de GNU as sirve para ensamblar la salida del compilador de GNU C (gcc) para
poder usar el enlazador ld.

2.2 GNU Linker


2.2.1Describa el uso de la herramienta ld
El enlazador de GNU ld combina un numero de archivos objeto, ordena sus datos y ata
referencias de smbolo. Usualmente cejecutar ld es el ultimo paso en la compilacin de un
programa.

2.3 GNU Debugger


2.3.1 Verifique si tiene instalada esta herramienta y en que versin.
Ejecutando en la terminal de linux => dpkg -l | grep gdb podemos verificar si est instalado. (Si)
Versin: Ejecutamos en la terminal gdb -v
GNU gdb (Ubuntu 7.9-1ubuntu1) 7.9
2.3.2 Describa el uso de la herramienta gdb.
GNU Debugger es un programa que ejecuta otros programas, permitiendo al usuario control sobre
estos programas en su ejecucin y examinar cuando problemas salen a la luz.
Tambin llamado gdb, es el depurador ms popular de los sistemas UNIX para depurar programas
en C y C++.

GNU Debugger ayuda a obtener informacin de lo siguiente:

Si un colapso sucede, entonces cual sentencia o expresin causo el problema.

Si un error ocurri durante la ejecucin de una funcin, que linea del programa contiene la
llamada a esa funcin y que parmetros

cuales fueron los resultados de una expresin particular en un programa.

Como funciona:

gdb permite ejecutar un programa hasta cierto punto, luego detener e imprimir los valores de ciertas
variables en ese punto, o moverse por el programa paso a paso.

3. Partes de un programa.

3.1 Defina detalladamente el uso de las siguientes directivas:

.section .data

Declara elementos de datos con un valor inicial. Estos elementos de datos se utilizan como
variables dentro del programa en lenguaje ensamblador.

.section .bss

Declara elementos de datos que se crean con un valor cero (o nulo). Estos elementos de datos son
los ms utilizados como zonas de buffer dentro del programa en lenguaje ensamblador.

.section .text

Requerida en todos los programas en lenguaje ensamblador. En este lugar es donde se colocan los
cdigos de instruccin que se declaran dentro del programa ejecutable.
Sitios web visitados
https://iie.fing.edu.uy/~vagonbar/gcc-make/gcc.htm
http://www.zator.com/Cpp/E1_4_4b.htm
http://www.tutorialesytrucos.com/como-unix-linux/115-revisar-dependencias.html
https://es.wikipedia.org/wiki/GNU_Assembler
https://www.gnu.org/software/gdb/
https://www.tutorialspoint.com/assembly_programming/assembly_basic_syntax.htm
https://es.wikipedia.org/wiki/Strace

Вам также может понравиться