elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Como se representa un array en la pila
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como se representa un array en la pila  (Leído 6,316 veces)
leucocito

Desconectado Desconectado

Mensajes: 199



Ver Perfil
Como se representa un array en la pila
« 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.


En línea

ShotgunLogic

Desconectado Desconectado

Mensajes: 233


Claws so razor sharp


Ver Perfil
Re: Como se representa un array en la pila
« Respuesta #1 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!


« Última modificación: 19 Mayo 2011, 09:52 am por ShotgunLogic » En línea

The clans are marching against the law, bagpipers play the tunes of war, death or glory I will find, rebellion on my mind.
leucocito

Desconectado Desconectado

Mensajes: 199



Ver Perfil
Re: Como se representa un array en la pila
« Respuesta #2 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?
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Como se representa un array en la pila
« Respuesta #3 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. }
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
ShotgunLogic

Desconectado Desconectado

Mensajes: 233


Claws so razor sharp


Ver Perfil
Re: Como se representa un array en la pila
« Respuesta #4 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.
En línea

The clans are marching against the law, bagpipers play the tunes of war, death or glory I will find, rebellion on my mind.
leucocito

Desconectado Desconectado

Mensajes: 199



Ver Perfil
Re: Como se representa un array en la pila
« Respuesta #5 en: 22 Mayo 2011, 13:21 pm »

Muchas gracias por las respuestas me ha quedado claro. un saludo y seguid asi!!!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines