Mix C y Assembler

Anuncio
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
Descargar