Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: leucocito en 19 Mayo 2011, 09:08 am



Título: Como se representa un array en la pila
Publicado por: leucocito en 19 Mayo 2011, 09:08 am
Hola que tal?


Antes de nada decir  que en la pila se que se almacenan las variables locales de una función y la dirección de retorno,pero cuando en lenguage C creamos un array de 20 bytes de espacio (que reservamos) para una variable me gustaría saber eso como se representa en la pila.

El código en C seria este

#include <stdio.h>

int main (int argc, char **argv)
{
char buffer[64]; //Declaramos un array con 64 bytes de espacio
if (argc < 2){
printf ("Introduzca un argumento al programa\n"); //Printeamos
return 0;
}
strcpy (buffer, argv[1]);

return 0;
}


El fin de de esta pregunta es entender un poco mas como funciona un desbordamiento en la pila (que se que consiste en introducir mas bytes en la pila de lo que una variable soporta de modo que sobrescribimos zonas en la que no tendríamos por que tener acceso entre ellas la dirección  de retorno.


Título: Re: Como se representa un array en la pila
Publicado por: ShotgunLogic en 19 Mayo 2011, 09:51 am
Si no me equivoco, en la pila solamente guardas un dato, que es la dirección de memoria en la que comienza el array. De esta manera las operaciones de llamadas a procedimientos lo que haces es operar con el dato en memoria. Es por eso que siempre se pasa por referencia el array, y cualquier cambio que hagas dentro de la función lo tendrá "fuera".

Bueno eso es cuando lo pasas, pero al crearlo dentro como dices tu pues lo hará a pelo, cogera el puntero de pila y reservará espacio en memoria correspondiente al tamaño del array. Y más en C/C++ que tienes que declararlo ya con su tamaño.

Saludos!


Título: Re: Como se representa un array en la pila
Publicado por: leucocito en 20 Mayo 2011, 12:38 pm
Entonces cuando reserbamos un espacio en un array en C lo que estamos haciendo es reserbar un espacio en la pila para nuestra variable?


Título: Re: Como se representa un array en la pila
Publicado por: Eternal Idol en 20 Mayo 2011, 14:42 pm
Depende del ambito, en el caso del ejemplo si, cada uno de los bytes del array esta en la pila. En este caso estan en la sección de datos:

Código
  1. #include <stdio.h>
  2.  
  3. char buffer[64]; //Declaramos un array con 64 bytes de espacio
  4.  
  5. int main (int argc, char **argv)
  6. {
  7. if (argc < 2){
  8. printf ("Introduzca un argumento al programa\n"); //Printeamos
  9. return 0;
  10. }
  11. strcpy (buffer, argv[1]);
  12.  
  13. return 0;
  14. }


Título: Re: Como se representa un array en la pila
Publicado por: ShotgunLogic en 20 Mayo 2011, 15:20 pm
Depende del ambito, en el caso del ejemplo si, cada uno de los bytes del array esta en la pila. En este caso estan en la sección de datos:

Código
  1. #include <stdio.h>
  2.  
  3. char buffer[64]; //Declaramos un array con 64 bytes de espacio
  4.  
  5. int main (int argc, char **argv)
  6. {
  7. if (argc < 2){
  8. printf ("Introduzca un argumento al programa\n"); //Printeamos
  9. return 0;
  10. }
  11. strcpy (buffer, argv[1]);
  12.  
  13. return 0;
  14. }

Lo que había comentado yo, en ese caso lo que haces es meter en la pila la dirección del array, y la pila, ayudandose de los registros, va a coger los elementos del array que estan en memoria, ya que un array siempre se pasa por referencia.


Título: Re: Como se representa un array en la pila
Publicado por: leucocito en 22 Mayo 2011, 13:21 pm
Muchas gracias por las respuestas me ha quedado claro. un saludo y seguid asi!!!