Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: MRx86 en 17 Marzo 2017, 13:54 pm



Título: como referencia el codigo ensamblador a una variable (local) en memoria?
Publicado por: MRx86 en 17 Marzo 2017, 13:54 pm
Hola, alguien sabe como referencia elcodigo ensamblador a una variable local en memoria principal?, en otras palabras, como se compila este codigo de C

Código
  1.  
  2. int i;
  3. int i = 0; /* este especificamente */
  4.  
  5.  

a ensamblador IA-32 (i386)?

saludos


Título: Re: como referencia el codigo ensamblador a una variable (local) en memoria?
Publicado por: Yuki en 17 Marzo 2017, 18:06 pm
Creo que te referís a esto:

Código
  1. lea edi,[ebp-4] ; int i;
  2. mov DWORD[edi],0 ; i = 0;

utilizamos Lea para obtener la dirección de i y le asignamos el valor de cero.


Título: Re: como referencia el codigo ensamblador a una variable (local) en memoria?
Publicado por: MRx86 en 17 Marzo 2017, 20:00 pm
si, a eso mismo me refiero. Pero, una  duda, el numero X que va en

Código
  1.  
  2. lea edi, [ebp-X]
  3.  
  4.  

tiene que ir incrementando segun mas variables locales se vayan declarado anteriormente?

saludos!


Título: Re: como referencia el codigo ensamblador a una variable (local) en memoria?
Publicado por: Yuki en 18 Marzo 2017, 11:19 am
Las variables locales se encuentran restando a EBX, -4 es la primera variable de 4 bytes,-8 la segunda y así sucesivamente.

Algunos lenguajes de programación son mucho mas estrictos con esta regla, por lo que si tienes una variable de 4 bytes y luego un "short" podrias llegar a ver instrucciones como "lea edi,[ebx-6]", pero esos casos son raros.


Título: Re: como referencia el codigo ensamblador a una variable (local) en memoria?
Publicado por: MRx86 en 22 Mayo 2017, 23:50 pm
A eso mismo me refiero!! Muchas gracias por responder