Mix C y Assembler Materia: Técnicas digitales III. Año: 2011 Autor: Jonathan Rubstein 1 Índice Introducción Argumentos: Tipos Argumentos: Consideraciones Manejo del Stack Variables Locales Variables Locales Formatos Interacción y visibilidad Compilación Resumen Autor: Jonathan Rubstein 2 Introducción 1. 2. 1. Ventajas Mayor performance. Manejo en bajo nivel. Desventajas Menor portabilidad. Autor: Jonathan Rubstein 3 Argumentos: Tipos Valor Referencia EIP ARG 1 ARG 2 ARG 3 Salto corto EIP &ARG 1 &ARG 2 &ARG 3 Salto corto Autor: Jonathan Rubstein Valor de arg1 Valor de arg2 Valor de arg3 Valor de la dirección de memoria de arg 1 Valor de la dirección de memoria de arg 2 Valor de la dirección de memoria de arg 3 4 Argumentos: Consideraciones Si se pasa por referencia se estas pasando la dirección de la memoria, no el valor. La memoria tiene que estar alineada así que los argumentos se colocan en la pila en múltiplos de 32 bits, si se programa en 32 bits. El valor es retornado por eax. Si el valor retornable es mas grande que eax se retorna en forma de puntero. Autor: Jonathan Rubstein 5 Manejo del Stack Se guarda una push ebp referencia al stack. mov ebp, esp Se guardan los registros push registros que van a ser utilizados. Código de la rutina. … código Se restablecen los registros utilizados. Retorno. pop registros pop ebp ret Autor: Jonathan Rubstein 6 Variables Locales push ebp mov ebp, esp sub esp, 4 enter 4,0 … código … código mov esp, ebp pop ebp ret leave ret Autor: Jonathan Rubstein 7 Formatos El formato utilizado es elf. Es el ejecutable de Linux. section .data Donde se colocan todas las variables y definiciones del programa en assembler. section .text Lugar en donde se escribe el código. Autor: Jonathan Rubstein 8 Interacción y visibilidad 1. 1. Desde C Se debe usar el modificador extern en todas las funciones que se llaman en código Assembler. Desde Assembler Se debe usar el modificador global para expresar que las funciones tienen visibilidad desde el exterior. Autor: Jonathan Rubstein 9 Compilación Assembler nasm -f elf asmSrc.asm -o asm.o C gcc main.c asm.o –o mix.o Autor: Jonathan Rubstein 10 Resumen Declarar las rutinas de Assembler que se van a usar desde C como globales. Declarar extern a las rutinas de Assember en un archivo .h separado. En cada rutina guardar una copia del esp. Usar ret para volver de la rutina. La pila es vaciada automáticamente. Si se pasa argumentos por referencia, hay acordarse que hay que desreferenciarlos. Autor: Jonathan Rubstein 11