Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.
-
Upload
paulino-amescua -
Category
Documents
-
view
19 -
download
1
Transcript of Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.
![Page 1: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/1.jpg)
Nota: Se recomienda ver esta presentación teniendo a mano una copia de la convención de llamadas _CDECL, o en su defecto del apunte de cátedra.
![Page 2: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/2.jpg)
Ejemplo sencillo – sumar dos enteros.Ejemplo sencillo – sumar dos enteros.
funciones.asmfunciones.asm
GLOBAL sumarGLOBAL sumar
sumar:sumar:
pushpush ebpebp
movmov ebp, espebp, esp
movmov eax,[ebp+8]eax,[ebp+8]
addadd eax,[ebp+12]eax,[ebp+12]
movmov esp, ebpesp, ebp
poppop ebpebp
retret
main.cmain.cextern intextern int sumar(int x, int y); sumar(int x, int y);void main (void)void main (void){{
int x=2, y=5, z;int x=2, y=5, z;z = z = sumar(x, y);sumar(x, y);printf("x = %d , y = %d, z = %d \n",x,y,z);printf("x = %d , y = %d, z = %d \n",x,y,z);
}}
Cómo compilar: nasm –f elf funciones.asm –o funciones.o gcc –c main.c –o main.o ld –oformat elf main.o funciones.o –o suma.
ab
c
![Page 3: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/3.jpg)
Ejemplo sencillo – sumar dos enteros.Ejemplo sencillo – sumar dos enteros.
funciones.asmfunciones.asmGLOBAL sumarGLOBAL sumarsumar:sumar:
pushpush ebpebpmovmov ebp, espebp, espmovmov eax,[ebp+8]eax,[ebp+8]addadd eax,[ebp+12]eax,[ebp+12]movmov esp, ebpesp, ebppoppop ebpebp
retret
Hacia direcciones inferiores de la memoria... 0x0000h
0X18h
0X1Ch
0X20h
0x24h
0x28h
0X2Ch
Variables locales al main
Hacia direcciones superiores de la memoria... 0xffffh
main.cmain.cextern intextern int sumar(int x, int y); sumar(int x, int y);void main (void)void main (void){{
int x=2, y=5, z;int x=2, y=5, z;z = z = sumar(x, y);sumar(x, y);printf("x = %d , y = %d, z = %d \n",x,y,z);printf("x = %d , y = %d, z = %d \n",x,y,z);
}}
ESP
EBP
Dirección de cre
cimien
to del Stack
c
b
a
![Page 4: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/4.jpg)
Ejemplo sencillo – sumar dos enteros.Ejemplo sencillo – sumar dos enteros.
funciones.asmfunciones.asmGLOBAL sumarGLOBAL sumarsumar:sumar:
pushpush ebpebpmovmov ebp, espebp, espmovmov eax,[ebp+8]eax,[ebp+8]addadd eax,[ebp+12]eax,[ebp+12]movmov esp, ebpesp, ebppoppop ebpebp
retret
Hacia direcciones inferiores de la memoria... 0x0000h
0X18h
0X1Ch
0X20h
0x24h
0x28h
0X2Ch
Variables locales al main
Hacia direcciones superiores de la memoria... 0xffffh
main.cmain.cextern intextern int sumar(int x, int y); sumar(int x, int y);void main (void)void main (void){{
int x=2, y=5, z;int x=2, y=5, z;z = z = sumar(x, y);sumar(x, y);printf("x = %d , y = %d, z = %d \n",x,y,z);printf("x = %d , y = %d, z = %d \n",x,y,z);
}}
ESP
EBP
Dirección de cre
cimien
to del Stack
1EIP (APROX)EIP (APROX)
![Page 5: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/5.jpg)
Ejemplo sencillo – sumar dos enteros.Ejemplo sencillo – sumar dos enteros.
funciones.asmfunciones.asmGLOBAL sumarGLOBAL sumarsumar:sumar:
pushpush ebpebpmovmov ebp, espebp, espmovmov eax,[ebp+8]eax,[ebp+8]addadd eax,[ebp+12]eax,[ebp+12]movmov esp, ebpesp, ebppoppop ebpebp
retret
Hacia direcciones inferiores de la memoria... 0x0000h
0X18h
0X1Ch
0X20h
0x24h
0x28h
0X2Ch
Variables locales al main
Hacia direcciones superiores de la memoria... 0xffffh
main.cmain.cextern intextern int sumar(int x, int y); sumar(int x, int y);void main (void)void main (void){{
int x=2, y=5, z;int x=2, y=5, z;z = z = sumar(x, y);sumar(x, y);printf("x = %d , y = %d, z = %d \n",x,y,z);printf("x = %d , y = %d, z = %d \n",x,y,z);
}}
ESP
EBP
Dirección de cre
cimien
to del Stack
EIP (APROX)EIP (APROX)
1
Y=5
![Page 6: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/6.jpg)
Ejemplo sencillo – sumar dos enteros.Ejemplo sencillo – sumar dos enteros.
funciones.asmfunciones.asmGLOBAL sumarGLOBAL sumarsumar:sumar:
pushpush ebpebpmovmov ebp, espebp, espmovmov eax,[ebp+8]eax,[ebp+8]addadd eax,[ebp+12]eax,[ebp+12]movmov esp, ebpesp, ebppoppop ebpebp
retret
Hacia direcciones inferiores de la memoria... 0x0000h
0X18h
0X1Ch
0X20h
0x24h
0x28h
0X2Ch
Variables locales al main
Hacia direcciones superiores de la memoria... 0xffffh
main.cmain.cextern intextern int sumar(int x, int y); sumar(int x, int y);void main (void)void main (void){{
int x=2, y=5, z;int x=2, y=5, z;z = z = sumar(x, y);sumar(x, y);printf("x = %d , y = %d, z = %d \n",x,y,z);printf("x = %d , y = %d, z = %d \n",x,y,z);
}}
ESP
EBP
Dirección de cre
cimien
to del Stack
EIP (APROX)EIP (APROX)
Y=5
X=2
![Page 7: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/7.jpg)
Ejemplo sencillo – sumar dos enteros.Ejemplo sencillo – sumar dos enteros.
funciones.asmfunciones.asmGLOBAL sumarGLOBAL sumarsumar:sumar:
pushpush ebpebpmovmov ebp, espebp, espmovmov eax,[ebp+8]eax,[ebp+8]addadd eax,[ebp+12]eax,[ebp+12]movmov esp, ebpesp, ebppoppop ebpebp
retret
Hacia direcciones inferiores de la memoria... 0x0000h
0X18h
0X1Ch
0X20h
0x24h
0x28h
0X2Ch
Variables locales al main
Hacia direcciones superiores de la memoria... 0xffffh
main.cmain.cextern intextern int sumar(int x, int y); sumar(int x, int y);void main (void)void main (void){{
int x=2, y=5, z;int x=2, y=5, z;z = z = sumar(x, y);sumar(x, y);printf("x = %d , y = %d, z = %d \n",x,y,z);printf("x = %d , y = %d, z = %d \n",x,y,z);
}}
ESP
EBP
Dirección de cre
cimien
to del Stack
EIP (APROX)EIP (APROX) 2
Y=5
X=2
EIP del main
![Page 8: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/8.jpg)
Ejemplo sencillo – sumar dos enteros.Ejemplo sencillo – sumar dos enteros.
funciones.asmfunciones.asmGLOBAL sumarGLOBAL sumarsumar:sumar:
pushpush ebpebpmovmov ebp, espebp, espmovmov eax,[ebp+8]eax,[ebp+8]addadd eax,[ebp+12]eax,[ebp+12]movmov esp, ebpesp, ebppoppop ebpebp
retret
Hacia direcciones inferiores de la memoria... 0x0000h
0X18h
0X1Ch
0X20h
0x24h
0x28h
0X2Ch
Variables locales al main
Hacia direcciones superiores de la memoria... 0xffffh
main.cmain.cextern intextern int sumar(int x, int y); sumar(int x, int y);void main (void)void main (void){{
int x=2, y=5, z;int x=2, y=5, z;z = z = sumar(x, y);sumar(x, y);printf("x = %d , y = %d, z = %d \n",x,y,z);printf("x = %d , y = %d, z = %d \n",x,y,z);
}} ESP
EBP
Dirección de cre
cimien
to del Stack
EIPEIP Y=5
X=2
EIP del main
EBP del main
3
![Page 9: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/9.jpg)
Ejemplo sencillo – sumar dos enteros.Ejemplo sencillo – sumar dos enteros.
funciones.asmfunciones.asmGLOBAL sumarGLOBAL sumarsumar:sumar:
pushpush ebpebpmovmov ebp, espebp, espmovmov eax,[ebp+8]eax,[ebp+8]addadd eax,[ebp+12]eax,[ebp+12]movmov esp, ebpesp, ebppoppop ebpebp
retret
Hacia direcciones inferiores de la memoria... 0x0000h
0X18h
0X1Ch
0X20h
0x24h
0x28h
0X2Ch
Variables locales al main
Hacia direcciones superiores de la memoria... 0xffffh
main.cmain.cextern intextern int sumar(int x, int y); sumar(int x, int y);void main (void)void main (void){{
int x=2, y=5, z;int x=2, y=5, z;z = z = sumar(x, y);sumar(x, y);printf("x = %d , y = %d, z = %d \n",x,y,z);printf("x = %d , y = %d, z = %d \n",x,y,z);
}} ESPEBP
Dirección de cre
cimien
to del Stack
EIPEIP
Y=5
X=2
EIP del main
EBP del main
4
![Page 10: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/10.jpg)
Y=5
Ejemplo sencillo – sumar dos enteros.Ejemplo sencillo – sumar dos enteros.
funciones.asmfunciones.asmGLOBAL sumarGLOBAL sumarsumar:sumar:
pushpush ebpebpmovmov ebp, espebp, espmovmov eax,[ebp+8]eax,[ebp+8]addadd eax,[ebp+12]eax,[ebp+12]movmov esp, ebpesp, ebppoppop ebpebp
retret
Hacia direcciones inferiores de la memoria... 0x0000h
0X18h
0X1Ch
0X20h
0x24h
0x28h
0X2Ch
Variables locales al main
Hacia direcciones superiores de la memoria... 0xffffh
main.cmain.cextern intextern int sumar(int x, int y); sumar(int x, int y);void main (void)void main (void){{
int x=2, y=5, z;int x=2, y=5, z;z = z = sumar(x, y);sumar(x, y);printf("x = %d , y = %d, z = %d \n",x,y,z);printf("x = %d , y = %d, z = %d \n",x,y,z);
}} ESPEBP
Dirección de cre
cimien
to del Stack
EIPEIP
X=2
EIP del main
EBP del main
EBP + 8
5
EAX= 2
![Page 11: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/11.jpg)
EAX= 2 + 5
Ejemplo sencillo – sumar dos enteros.Ejemplo sencillo – sumar dos enteros.
funciones.asmfunciones.asmGLOBAL sumarGLOBAL sumarsumar:sumar:
pushpush ebpebpmovmov ebp, espebp, espmovmov eax,[ebp+8]eax,[ebp+8]addadd eax,[ebp+12]eax,[ebp+12]movmov esp, ebpesp, ebppoppop ebpebp
retret
Hacia direcciones inferiores de la memoria... 0x0000h
0X18h
0X1Ch
0X20h
0x24h
0x28h
0X2Ch
Variables locales al main
Hacia direcciones superiores de la memoria... 0xffffh
main.cmain.cextern intextern int sumar(int x, int y); sumar(int x, int y);void main (void)void main (void){{
int x=2, y=5, z;int x=2, y=5, z;z = z = sumar(x, y);sumar(x, y);printf("x = %d , y = %d, z = %d \n",x,y,z);printf("x = %d , y = %d, z = %d \n",x,y,z);
}} ESPEBP
Dirección de cre
cimien
to del Stack
EIPEIP
X=2
EIP del main
EBP del main
EBP + 12
Y=5
6
![Page 12: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/12.jpg)
Y=5
Ejemplo sencillo – sumar dos enteros.Ejemplo sencillo – sumar dos enteros.
funciones.asmfunciones.asmGLOBAL sumarGLOBAL sumarsumar:sumar:
pushpush ebpebpmovmov ebp, espebp, espmovmov eax,[ebp+8]eax,[ebp+8]addadd eax,[ebp+12]eax,[ebp+12]movmov esp, ebpesp, ebppoppop ebpebp
retret
Hacia direcciones inferiores de la memoria... 0x0000h
0X18h
0X1Ch
0X20h
0x24h
0x28h
0X2Ch
Variables locales al main
Hacia direcciones superiores de la memoria... 0xffffh
main.cmain.cextern intextern int sumar(int x, int y); sumar(int x, int y);void main (void)void main (void){{
int x=2, y=5, z;int x=2, y=5, z;z = z = sumar(x, y);sumar(x, y);printf("x = %d , y = %d, z = %d \n",x,y,z);printf("x = %d , y = %d, z = %d \n",x,y,z);
}} ESPEBP
Dirección de cre
cimien
to del Stack
EIPEIP
X=2
EIP del main
EBP del main
7
EAX= 7
![Page 13: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/13.jpg)
Y=5
Ejemplo sencillo – sumar dos enteros.Ejemplo sencillo – sumar dos enteros.
funciones.asmfunciones.asmGLOBAL sumarGLOBAL sumarsumar:sumar:
pushpush ebpebpmovmov ebp, espebp, espmovmov eax,[ebp+8]eax,[ebp+8]addadd eax,[ebp+12]eax,[ebp+12]movmov esp, ebpesp, ebppoppop ebpebp
retret
Hacia direcciones inferiores de la memoria... 0x0000h
0X18h
0X1Ch
0X20h
0x24h
0x28h
0X2Ch
Variables locales al main
Hacia direcciones superiores de la memoria... 0xffffh
main.cmain.cextern intextern int sumar(int x, int y); sumar(int x, int y);void main (void)void main (void){{
int x=2, y=5, z;int x=2, y=5, z;z = z = sumar(x, y);sumar(x, y);printf("x = %d , y = %d, z = %d \n",x,y,z);printf("x = %d , y = %d, z = %d \n",x,y,z);
}}
ESP
EBP
Dirección de cre
cimien
to del Stack
EIPEIP
X=2
EIP del main
8
EAX= 7 ---BASURA---
![Page 14: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/14.jpg)
Y=5
Ejemplo sencillo – sumar dos enteros.Ejemplo sencillo – sumar dos enteros.
funciones.asmfunciones.asmGLOBAL sumarGLOBAL sumarsumar:sumar:
pushpush ebpebpmovmov ebp, espebp, espmovmov eax,[ebp+8]eax,[ebp+8]addadd eax,[ebp+12]eax,[ebp+12]movmov esp, ebpesp, ebppoppop ebpebp
retret
Hacia direcciones inferiores de la memoria... 0x0000h
0X18h
0X1Ch
0X20h
0x24h
0x28h
0X2Ch
Variables locales al main
Hacia direcciones superiores de la memoria... 0xffffh
main.cmain.cextern intextern int sumar(int x, int y); sumar(int x, int y);void main (void)void main (void){{
int x=2, y=5, z;int x=2, y=5, z;z = z = sumar(x, y);sumar(x, y);printf("x = %d , y = %d, z = %d \n",x, y,z);printf("x = %d , y = %d, z = %d \n",x, y,z);
}}
ESP
Dirección de cre
cimien
to del Stack
EIPEIP
X=2
EIP del main
EBP
EAX= 7 ---BASURA---
![Page 15: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/15.jpg)
Y=5
Ejemplo sencillo – sumar dos enteros.Ejemplo sencillo – sumar dos enteros.
funciones.asmfunciones.asmGLOBAL sumarGLOBAL sumarsumar:sumar:
pushpush ebpebpmovmov ebp, espebp, espmovmov eax,[ebp+8]eax,[ebp+8]addadd eax,[ebp+12]eax,[ebp+12]movmov esp, ebpesp, ebppoppop ebpebp
retret
Hacia direcciones inferiores de la memoria... 0x0000h
0X18h
0X1Ch
0X20h
0x24h
0x28h
0X2Ch
Variables locales al main
Hacia direcciones superiores de la memoria... 0xffffh
main.cmain.cextern intextern int sumar(int x, int y); sumar(int x, int y);void main (void)void main (void){{
int x=2, y=5, z;int x=2, y=5, z;z = z = sumar(x, y);sumar(x, y);printf("x = %d , y = %d, z = %d \n",x, y,z);printf("x = %d , y = %d, z = %d \n",x, y,z);
}}
ESP
EBP
Dirección de cre
cimien
to del Stack
EIPEIP
X=2
9
EAX= 7 ---BASURA---
---BASURA---
![Page 16: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/16.jpg)
Y=5
Ejemplo sencillo – sumar dos enteros.Ejemplo sencillo – sumar dos enteros.
funciones.asmfunciones.asmGLOBAL sumarGLOBAL sumarsumar:sumar:
pushpush ebpebpmovmov ebp, espebp, espmovmov eax,[ebp+8]eax,[ebp+8]addadd eax,[ebp+12]eax,[ebp+12]movmov esp, ebpesp, ebppoppop ebpebp
retret
Hacia direcciones inferiores de la memoria... 0x0000h
0X18h
0X1Ch
0X20h
0x24h
0x28h
0X2Ch
Variables locales al main
Hacia direcciones superiores de la memoria... 0xffffh
main.cmain.cextern intextern int sumar(int x, int y); sumar(int x, int y);void main (void)void main (void){{
int x=2, y=5, z;int x=2, y=5, z;z = z = sumar(x, y);sumar(x, y);printf("x = %d , y = %d, z = %d \n",x, y,z);printf("x = %d , y = %d, z = %d \n",x, y,z);
}}
ESP
EBP
Dirección de cre
cimien
to del Stack
EIPEIP
X=2
10
EAX= 7
![Page 17: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/17.jpg)
Ahora continúa la ejecución de la función llamadora.
![Page 18: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/18.jpg)
Ejemplo sencillo – sumar dos enteros. Ahora utilizando Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stackvariables locales al stack
funciones.asmfunciones.asm
global sumarglobal sumar
sumar:sumar:pushpush ebpebpmovmov ebp,espebp,espsubsub esp,4esp,4pushpush ebxebxmovmov ebx,[ebp+8]ebx,[ebp+8]addadd ebx,[ebp+12]ebx,[ebp+12]movmov [ebp-4],ebx[ebp-4],ebxmovmov eax,[ebp-4]eax,[ebp-4]poppop ebxebxmovmov esp,ebpesp,ebppoppop ebpebpretret
main.cmain.cextern intextern int sumar(int x, int y); sumar(int x, int y);void main (void)void main (void){{
int x=2, y=5, z;int x=2, y=5, z;z = z = sumar(x, y);sumar(x, y);printf("x = %d , y = %d, z = %d \n",x,y,z);printf("x = %d , y = %d, z = %d \n",x,y,z);
}}
1
![Page 19: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/19.jpg)
Ejemplo sencillo – sumar dos enteros. Ahora utilizando Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stackvariables locales al stack
funciones.asmfunciones.asm
global sumarglobal sumar
sumar:sumar:pushpush ebpebpmovmov ebp,espebp,espsubsub esp,4esp,4pushpush ebxebxmovmov ebx,[ebp+8]ebx,[ebp+8]addadd ebx,[ebp+12]ebx,[ebp+12]movmov [ebp-4],ebx[ebp-4],ebxmovmov eax,[ebp-4]eax,[ebp-4]poppop ebxebxmovmov esp,ebpesp,ebppoppop ebpebpretret
Hacia direcciones inferiores de la memoria... 0x0000h
0x14h
0X18h
0X1Ch
0X20h
0x24h
0x28h
0X2ChVariables locales al main
Hacia direcciones superiores de la memoria... 0xffffh
Dirección de cre
cimien
to del Stack
X=2
EIP del main
EBP del main
Y=5
EIPEIPESPEBP2
![Page 20: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/20.jpg)
Ejemplo sencillo – sumar dos enteros. Ahora utilizando Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stackvariables locales al stack
funciones.asmfunciones.asm
global sumarglobal sumar
sumar:sumar:pushpush ebpebpmovmov ebp,espebp,espsubsub esp,4esp,4pushpush ebxebxmovmov ebx,[ebp+8]ebx,[ebp+8]addadd ebx,[ebp+12]ebx,[ebp+12]movmov [ebp-4],ebx[ebp-4],ebxmovmov eax,[ebp-4]eax,[ebp-4]poppop ebxebxmovmov esp,ebpesp,ebppoppop ebpebpretret
Hacia direcciones inferiores de la memoria... 0x0000h
0x14h
0X18h
0X1Ch
0X20h
0x24h
0x28h
0X2ChVariables locales al main
Hacia direcciones superiores de la memoria... 0xffffh
Dirección de cre
cimien
to del Stack
X=2
EIP del main
EBP del main
Y=5
EIPEIPESPEBP
![Page 21: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/21.jpg)
Ejemplo sencillo – sumar dos enteros. Ahora utilizando Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stackvariables locales al stack
funciones.asmfunciones.asm
global sumarglobal sumar
sumar:sumar:pushpush ebpebpmovmov ebp,espebp,espsubsub esp,4esp,4pushpush ebxebxmovmov ebx,[ebp+8]ebx,[ebp+8]addadd ebx,[ebp+12]ebx,[ebp+12]movmov [ebp-4],ebx[ebp-4],ebxmovmov eax,[ebp-4]eax,[ebp-4]poppop ebxebxmovmov esp,ebpesp,ebppoppop ebpebpretret
Hacia direcciones inferiores de la memoria... 0x0000h
0x14h
0X18h
0X1Ch
0X20h
0x24h
0x28h
0X2ChVariables locales al main
Hacia direcciones superiores de la memoria... 0xffffh
Dirección de cre
cimien
to del Stack
X=2
EIP del main
EBP del main
Y=5
EIPEIP
ESP
EBP
2
![Page 22: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/22.jpg)
Ejemplo sencillo – sumar dos enteros. Ahora utilizando Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stackvariables locales al stack
funciones.asmfunciones.asm
global sumarglobal sumar
sumar:sumar:pushpush ebpebpmovmov ebp,espebp,espsubsub esp,4esp,4pushpush ebxebxmovmov ebx,[ebp+8]ebx,[ebp+8]addadd ebx,[ebp+12]ebx,[ebp+12]movmov [ebp-4],ebx[ebp-4],ebxmovmov eax,[ebp-4]eax,[ebp-4]poppop ebxebxmovmov esp,ebpesp,ebppoppop ebpebpretret
Hacia direcciones inferiores de la memoria... 0x0000h
0x14h
0X18h
0X1Ch
0X20h
0x24h
0x28h
0X2ChVariables locales al main
Hacia direcciones superiores de la memoria... 0xffffh
Dirección de cre
cimien
to del Stack
X=2
EIP del main
EBP del main
Y=5
EIPEIP
ESP
EBP
EBX val. original3
![Page 23: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/23.jpg)
Ejemplo sencillo – sumar dos enteros. Ahora utilizando Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stackvariables locales al stack
funciones.asmfunciones.asm
global sumarglobal sumar
sumar:sumar:pushpush ebpebpmovmov ebp,espebp,espsubsub esp,4esp,4pushpush ebxebxmovmov ebx,[ebp+8]ebx,[ebp+8]addadd ebx,[ebp+12]ebx,[ebp+12]movmov [ebp-4],ebx[ebp-4],ebxmovmov eax,[ebp-4]eax,[ebp-4]poppop ebxebxmovmov esp,ebpesp,ebppoppop ebpebpretret
Hacia direcciones inferiores de la memoria... 0x0000h
0x14h
0X18h
0X1Ch
0X20h
0x24h
0x28h
0X2ChVariables locales al main
Hacia direcciones superiores de la memoria... 0xffffh
Dirección de cre
cimien
to del Stack
X=2
EIP del main
EBP del main
Y=5
EIPEIP
ESP
EBP
4
EBX val. original
EBX= 2
![Page 24: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/24.jpg)
Ejemplo sencillo – sumar dos enteros. Ahora utilizando Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stackvariables locales al stack
funciones.asmfunciones.asm
global sumarglobal sumar
sumar:sumar:pushpush ebpebpmovmov ebp,espebp,espsubsub esp,4esp,4pushpush ebxebxmovmov ebx,[ebp+8]ebx,[ebp+8]addadd ebx,[ebp+12]ebx,[ebp+12]movmov [ebp-4],ebx[ebp-4],ebxmovmov eax,[ebp-4]eax,[ebp-4]poppop ebxebxmovmov esp,ebpesp,ebppoppop ebpebpretret
Hacia direcciones inferiores de la memoria... 0x0000h
0x14h
0X18h
0X1Ch
0X20h
0x24h
0x28h
0X2ChVariables locales al main
Hacia direcciones superiores de la memoria... 0xffffh
Dirección de cre
cimien
to del Stack
X=2
EIP del main
EBP del main
Y=5
EIPEIP
ESP
EBP
EBX val. original
EBX= 2
EBP + 8
![Page 25: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/25.jpg)
Ejemplo sencillo – sumar dos enteros. Ahora utilizando Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stackvariables locales al stack
funciones.asmfunciones.asm
global sumarglobal sumar
sumar:sumar:pushpush ebpebpmovmov ebp,espebp,espsubsub esp,4esp,4pushpush ebxebxmovmov ebx,[ebp+8]ebx,[ebp+8]addadd ebx,[ebp+12]ebx,[ebp+12]movmov [ebp-4],ebx[ebp-4],ebxmovmov eax,[ebp-4]eax,[ebp-4]poppop ebxebxmovmov esp,ebpesp,ebppoppop ebpebpretret
Hacia direcciones inferiores de la memoria... 0x0000h
0x14h
0X18h
0X1Ch
0X20h
0x24h
0x28h
0X2ChVariables locales al main
Hacia direcciones superiores de la memoria... 0xffffh
Dirección de cre
cimien
to del Stack
X=2
EIP del main
EBP del main
Y=5EIPEIP
ESP
EBP
EBX val. original
7
EBX= 2 + 5
EBP + 12
![Page 26: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/26.jpg)
Ejemplo sencillo – sumar dos enteros. Ahora utilizando Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stackvariables locales al stack
funciones.asmfunciones.asm
global sumarglobal sumar
sumar:sumar:pushpush ebpebpmovmov ebp,espebp,espsubsub esp,4esp,4pushpush ebxebxmovmov ebx,[ebp+8]ebx,[ebp+8]addadd ebx,[ebp+12]ebx,[ebp+12]movmov [ebp-4],ebx[ebp-4],ebxmovmov eax,[ebp-4]eax,[ebp-4]poppop ebxebxmovmov esp,ebpesp,ebppoppop ebpebpretret
Hacia direcciones inferiores de la memoria... 0x0000h
0x14h
0X18h
0X1Ch
0X20h
0x24h
0x28h
0X2ChVariables locales al main
Hacia direcciones superiores de la memoria... 0xffffh
Dirección de cre
cimien
to del Stack
X=2
EIP del main
EBP del main
Y=5EIPEIP
ESP
EBP
EBX val. original
7
EBX= 2 + 5
EBP - 4
5
![Page 27: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/27.jpg)
Ejemplo sencillo – sumar dos enteros. Ahora utilizando Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stackvariables locales al stack
funciones.asmfunciones.asm
global sumarglobal sumar
sumar:sumar:pushpush ebpebpmovmov ebp,espebp,espsubsub esp,4esp,4pushpush ebxebxmovmov ebx,[ebp+8]ebx,[ebp+8]addadd ebx,[ebp+12]ebx,[ebp+12]movmov [ebp-4],ebx[ebp-4],ebxmovmov eax,[ebp-4]eax,[ebp-4]poppop ebxebxmovmov esp,ebpesp,ebppoppop ebpebpretret
Hacia direcciones inferiores de la memoria... 0x0000h
0x14h
0X18h
0X1Ch
0X20h
0x24h
0x28h
0X2ChVariables locales al main
Hacia direcciones superiores de la memoria... 0xffffh
Dirección de cre
cimien
to del Stack
X=2
EIP del main
EBP del main
Y=5EIPEIP
ESP
EBP
6
EBX val. original
7
EBX= 7EAX= 7
![Page 28: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/28.jpg)
Ejemplo sencillo – sumar dos enteros. Ahora utilizando Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stackvariables locales al stack
funciones.asmfunciones.asm
global sumarglobal sumar
sumar:sumar:pushpush ebpebpmovmov ebp,espebp,espsubsub esp,4esp,4pushpush ebxebxmovmov ebx,[ebp+8]ebx,[ebp+8]addadd ebx,[ebp+12]ebx,[ebp+12]movmov [ebp-4],ebx[ebp-4],ebxmovmov eax,[ebp-4]eax,[ebp-4]poppop ebxebxmovmov esp,ebpesp,ebppoppop ebpebpretret
Hacia direcciones inferiores de la memoria... 0x0000h
0x14h
0X18h
0X1Ch
0X20h
0x24h
0x28h
0X2ChVariables locales al main
Hacia direcciones superiores de la memoria... 0xffffh
Dirección de cre
cimien
to del Stack
X=2
EIP del main
EBP del main
Y=5EIPEIP
ESP
EBP
EBX val. original
7
EBX= 7EAX= 7
![Page 29: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/29.jpg)
Ejemplo sencillo – sumar dos enteros. Ahora utilizando Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stackvariables locales al stack
funciones.asmfunciones.asm
global sumarglobal sumar
sumar:sumar:pushpush ebpebpmovmov ebp,espebp,espsubsub esp,4esp,4pushpush ebxebxmovmov ebx,[ebp+8]ebx,[ebp+8]addadd ebx,[ebp+12]ebx,[ebp+12]movmov [ebp-4],ebx[ebp-4],ebxmovmov eax,[ebp-4]eax,[ebp-4]poppop ebxebxmovmov esp,ebpesp,ebppoppop ebpebpretret
Hacia direcciones inferiores de la memoria... 0x0000h
0x14h
0X18h
0X1Ch
0X20h
0x24h
0x28h
0X2ChVariables locales al main
Hacia direcciones superiores de la memoria... 0xffffh
Dirección de cre
cimien
to del Stack
X=2
EIP del main
EBP del main
Y=5EIPEIP
EBP
7
7
ESP
EBX= XXXXEAX= 7
![Page 30: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/30.jpg)
Ejemplo sencillo – sumar dos enteros. Ahora utilizando Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stackvariables locales al stack
funciones.asmfunciones.asm
global sumarglobal sumar
sumar:sumar:pushpush ebpebpmovmov ebp,espebp,espsubsub esp,4esp,4pushpush ebxebxmovmov ebx,[ebp+8]ebx,[ebp+8]addadd ebx,[ebp+12]ebx,[ebp+12]movmov [ebp-4],ebx[ebp-4],ebxmovmov eax,[ebp-4]eax,[ebp-4]poppop ebxebxmovmov esp,ebpesp,ebppoppop ebpebpretret
Hacia direcciones inferiores de la memoria... 0x0000h
0x14h
0X18h
0X1Ch
0X20h
0x24h
0x28h
0X2ChVariables locales al main
Hacia direcciones superiores de la memoria... 0xffffh
Dirección de cre
cimien
to del Stack
X=2
EIP del main
EBP del main
Y=5EIPEIP
EBP 7
ESP
EBX= XXXXEAX= 7
![Page 31: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/31.jpg)
Ejemplo sencillo – sumar dos enteros. Ahora utilizando Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stackvariables locales al stack
funciones.asmfunciones.asm
global sumarglobal sumar
sumar:sumar:pushpush ebpebpmovmov ebp,espebp,espsubsub esp,4esp,4pushpush ebxebxmovmov ebx,[ebp+8]ebx,[ebp+8]addadd ebx,[ebp+12]ebx,[ebp+12]movmov [ebp-4],ebx[ebp-4],ebxmovmov eax,[ebp-4]eax,[ebp-4]poppop ebxebxmovmov esp,ebpesp,ebppoppop ebpebpretret
Hacia direcciones inferiores de la memoria... 0x0000h
0x14h
0X18h
0X1Ch
0X20h
0x24h
0x28h
0X2ChVariables locales al main
Hacia direcciones superiores de la memoria... 0xffffh
Dirección de cre
cimien
to del Stack
X=2
EIP del main
EBP del main
Y=5
EIPEIP
8
7ESP EBP
![Page 32: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/32.jpg)
Ejemplo sencillo – sumar dos enteros. Ahora utilizando Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stackvariables locales al stack
funciones.asmfunciones.asm
global sumarglobal sumar
sumar:sumar:pushpush ebpebpmovmov ebp,espebp,espsubsub esp,4esp,4pushpush ebxebxmovmov ebx,[ebp+8]ebx,[ebp+8]addadd ebx,[ebp+12]ebx,[ebp+12]movmov [ebp-4],ebx[ebp-4],ebxmovmov eax,[ebp-4]eax,[ebp-4]poppop ebxebxmovmov esp,ebpesp,ebppoppop ebpebpretret
Hacia direcciones inferiores de la memoria... 0x0000h
0x14h
0X18h
0X1Ch
0X20h
0x24h
0x28h
0X2ChVariables locales al main
Hacia direcciones superiores de la memoria... 0xffffh
Dirección de cre
cimien
to del Stack
X=2
EIP del main
EBP del main
Y=5
EIPEIP
7EBPESP
![Page 33: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/33.jpg)
Ejemplo sencillo – sumar dos enteros. Ahora utilizando Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stackvariables locales al stack
funciones.asmfunciones.asm
global sumarglobal sumar
sumar:sumar:pushpush ebpebpmovmov ebp,espebp,espsubsub esp,4esp,4pushpush ebxebxmovmov ebx,[ebp+8]ebx,[ebp+8]addadd ebx,[ebp+12]ebx,[ebp+12]movmov [ebp-4],ebx[ebp-4],ebxmovmov eax,[ebp-4]eax,[ebp-4]poppop ebxebxmovmov esp,ebpesp,ebppoppop ebpebpretret
Hacia direcciones inferiores de la memoria... 0x0000h
0x14h
0X18h
0X1Ch
0X20h
0x24h
0x28h
0X2ChVariables locales al main
Hacia direcciones superiores de la memoria... 0xffffh
Dirección de cre
cimien
to del Stack
X=2
EIP del main
EBP del main
Y=5
EIPEIP
9
---BASURA---ESPEBP
10
![Page 34: Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.](https://reader033.fdocumento.com/reader033/viewer/2022061216/54af3baa497959bc0a8b63db/html5/thumbnails/34.jpg)
Su pregunta no molesta!!!!!