Ejercicio 3.1. ¿Cuántos bytes ocupa la función main? ¿cuánto

Anuncio
Ejercicio 3.1. ¿Cuántos bytes ocupa la función main? ¿cuánto ocupa el archivo
ejecutable?
Archivo ejecutable: 27,5 KB (28.160 bytes)
Función Main: 4Ah bytes = 74 bytes
Ejercicio 3.2. ¿Cómo varia el tamaño del archivo ejecutable si quitamos la
información de depuración?
Archivo ejecutable: 6,00 KB (6.144 bytes)
Ejercicio 3.3. ¿Qué función llama a main?
__tmainCRTStartup() (kernel32.dll (windows) / GNULib(Linux)).
Ejercicio 3.4. ¿Dónde está el código del runtime y de printf? (Ejercicio de pizarra)
crt0.c => crt = common runtime. 0 = porque es lo primero que se llama. C = porque es
código C.
Ejercicio 3.5. ¿Está disponible el código fuente del runtime y las bibliotecas de C?
(Ejercicio de pizarra)
Las bibliotecas de C sí, del runtime depende de lacdlataforma.
Ejercicio 3.6. ¿Qué diferencia hay, a nivel de programación, entre la memoria
FLASH-NOR y la FLASHNAND?(Ejercicio de pizarra).
Flash-NOR: Acceso aleatorio, Lenta y cara.
Flash-NAND: Acceso secuencial, rápida, barata y de mayor capacidad.
Ejercicio 3.7. De los esquemas que muestran las figuras anteriores, ¿cuál sigue
Rembo (se ejecuta en los ordenadores de los laboratorios de prácticas)?
Ejercicio 3.8. ¿En qué posición de memoria física debe estar colocado el código XIP
de un IA32?.
0xFFFF0
Ejercicio 3.9. ¿Por qué un compilador puede calcular el tamaño exacto de la sección
.bss y no el tamaño exacto de la sección de pila que va a necesitar?
En bss se almacenan las variables globales no inicializadas y estas se conocen a priori.
Sin embargo el tamaño de la pila no se puede saber puesto que depende por lo general
de los datos de entrada. (por ejemplo, no necesita la misma pila fact(10) que fact(100000)
Ejercicio 3.10. Usar la herramienta DUMPBIN.EXE para mostrar el tamaño de la
sección de pila de un ejecutable ¿Cómo se cambia el tamaño de pila por defecto en
Visual Studio C/C++? (Ejercicio de pizarra).
dumpbin.exe / headers
Stack reserve = tamaño máximo de la pila
Stack Commit = Tamaño mínimo disponible al inicio.
Propiedades de configuración/Vinculador/Sistema
Ejercicio 3.11. Cuáles son los archivos objeto y bibliotecas por defecto con las que
vincula un proyecto Visual Studio.
kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;
oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;
Ejercicio 3.12. Los nombres que aparecen en la tabla de símbolos no son
exactamente iguales que los que aparecen en el código fuente C. ¿Por qué?
Ver 3.13
Ejercicio 3.13. ¿Qué es la decoración de símbolos (name mangling)?
Para las fases de compilación es necesario identificar de forma única cada función,
parámetro o variable. Con este objetivo se creó el “name mangling”. La utilidad de esta
convención se ve claramente en funciones donde se permite la sobrecarga de
operadores.
Ejercicio 3.14. ¿Cómo se decoran las variables globales?
Con el prefijo '_'
Ejercicio 3.15. ¿Y las funciones C?
Con el prefijo '_'
Ejercicio 3.16. ¿Y las funciones C++?
int f (void) { return 1; }
int f (int) { return 0; }
void g (void) { int i = f(), j = f(0); }
---int __f_v (void) { return 1; }
int __f_i (int) { return 0; }
void __g_v (void) { int i = __f_v(), j = __f_i(0); }
Ejercicio 3.17. ¿Qué pasa si cambiamos el nombre de hola2.c por hola2.cpp?
Habrá errores en el linkado.
Ejercicio 3.18. ¿Cuáles son, en general, las operaciones necesarias para enlazar n
archivos .obj?
1. Determina si hay algún símbolo no resuelto en los n ficheros objeto.
2. Se crea un fichero exe con las siguientes características:
1. En la sección .code añade las secciones .code de todos los ficheros obj.
2. En la sección .data añade las secciones .data de todos los ficheros obj.
3. En la sección .data? añade las secciones .data? de todos los ficheros obj.
4. En la sección .const añade las secciones .const de todos los ficheros obj.
3. El linker resuelve las referencias pendientes (completa las instrucciones
incompletas). Para ello utiliza la tabla de reubicación.
Ejercicio 3.19. ¿Se usa la tabla de reubicación cuando ejecutamos el programa
Hola.exe en Windows XP? ¿Y en Windows 7? (Ejercicio de pizarra).
Ejercicio 3.20. ¿Cómo se usa DUMPBIN.EXE para ver los símbolos definidos en una
biblioteca? Probarlo con algún archivo .lib.
/linkermembers
Ejercicio 3.21. ¿Por qué es más fácil de actualizar las librerías en enlace dinámico?
Si se usan dll no hay que recompilar cada ejecutable que la use.
Ejercicio 3.22. ¿Qué bibliotecas dll necesita el programa Hola.exe para ejecutar?
Comprobarlo con dos herramientas: DUMPBIN y el depurador de Visual Studio.
Depurador: ntdll.dll, kernel32.dll, msvcr100d.dll
dumpbin.exe: Salen todos menos ntdll.dll
Ejercicio 3.23. ¿según el runtime de C, cuál debería ser la definición exacta de main
(qué parámetros debería tener y qué debería devolver)?
Ejercicio 3.24. ¿Cuántas variables locales tiene la función printf? De los esquemas
que muestran la figura 3.2 y la figura 3.3.
Ejercicio 3.25. De los esquemas que muestran las figuras anteriores, cuál sigue la
BIOS de un PC.
Ejercicio 3.26. El siguiente programa se usa para crear un ejecutable con formato de
imagen binaría.
char Mensaje[100]= "Pulsar ESC para continuar..."; // Variable global
...
void main (void)
{
...
EscribeEnPantalla(Mensaje);
...
Se ha compilado y enlazado suponiendo dirección de carga = 0xc000 0000. ¿Qué
pasaría si se carga en la dirección 0xd000 0000? ¿Qué tipo de instrucciones
tendrían problemas para su ejecución?
Ejercicio 3.27. ¿Cuál es el tamaño por defecto de la pila en un programa creado con
Visual Studio 2008? Hacer un programa que, permita averiguarlo (con ayuda del
depurador).
Ejercicio 3.28. ¿Cómo decora el compilador las variables locales?
Ejercicio 3.29. En la tabla de reubicación de hola1.obj hay símbolos que no
aparecen en la tabla de reubicación de Hola1.exe. ¿Por qué no son necesarios?
Ejercicio 3.30. ¿Qué bibliotecas dll necesita el programa Notepad.exe para ejecutar?
Comprobarlo usando el depurador de Visual Studio. Usar la ventana de módulos del
depurador y asociar el depurador a un proceso en ejecución (en el menú principal,
Depurar→Asociar al proceso…).
Descargar