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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Un programa que muestra donde el S.O. pone cada cosa.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Un programa que muestra donde el S.O. pone cada cosa.  (Leído 1,491 veces)
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Un programa que muestra donde el S.O. pone cada cosa.
« en: 3 Diciembre 2015, 21:44 pm »

No es mucha cosa, solo un divertimento; pero sirve para ver en qué parte de la memoria pone el S.O. las funciones, las variables locales, las globales y las dinámicas.
Así se puede ver como el sistema separa la memoria de código, la memoria de pila (stack) y la memoria del montón (heap).

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. char gc;
  5. int gi;
  6.  
  7. int main(int argc, char *argv[])
  8. {
  9. char c;
  10. int i;
  11. int *p = malloc(sizeof(int));
  12. printf("printf\t= %p\n", &printf);
  13. printf("malloc\t= %p\n", &malloc);
  14. printf("main\t= %p\n", &main);
  15. printf("\n");
  16. printf("gi\t= %p\n", &gi);
  17. printf("gc\t= %p\n", &gc);
  18. printf("\n");
  19. printf("argv\t= %p\n", &argv);
  20. printf("argc\t= %p\n", &argc);
  21. printf("\n");
  22. printf("c\t= %p\n", &c);
  23. printf("i\t= %p\n", &i);
  24. printf("p\t= %p\n", &p);
  25. printf("\n");
  26. for(i = 0; i < argc; ++i)
  27. printf("argv[%i]\t= %p -- %s$\n", i, argv[i], argv[i]);
  28. printf("\n");
  29. printf("p (->)\t= %p\n", p);
  30. free(p);
  31. return 0;
  32. }

P. ej.:

$ ./c 1 12 123 1234 12345
printf   = 0x4004f0
malloc   = 0x400520
main   = 0x40061d

gi   = 0x60105c
gc   = 0x601060

argv   = 0x7ffd71212400
argc   = 0x7ffd7121240c

c   = 0x7ffd71212413
i   = 0x7ffd71212414
p   = 0x7ffd71212418

argv[0]   = 0x7ffd71214551 -- ./c$
argv[1]   = 0x7ffd71214555 -- 1$
argv[2]   = 0x7ffd71214557 -- 12$
argv[3]   = 0x7ffd7121455a -- 123$
argv[4]   = 0x7ffd7121455e -- 1234$
argv[5]   = 0x7ffd71214563 -- 12345$

p (->)   = 0x1e36010


« Última modificación: 3 Diciembre 2015, 21:49 pm por MAFUS » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Una cosa que no sabía dónde poner (sobre el amor) « 1 2 3 4 »
Foro Libre
KuraraGNU 39 14,256 Último mensaje 14 Diciembre 2010, 19:32 pm
por qw3rty404
Una cosa dificil synaptics y un programa
GNU/Linux
portaro 2 2,379 Último mensaje 1 Enero 2011, 00:25 am
por portaro
¿Dónde se está practicando sexo? Una 'app' muestra los 'puntos calientes'
Noticias
wolfbcn 0 1,223 Último mensaje 24 Julio 2013, 01:28 am
por wolfbcn
JTable no muestra los nombres de cada una de las columnas
Java
MC.cover 3 7,352 Último mensaje 5 Octubre 2015, 21:23 pm
por LaThortilla (Effort)
Facebook te dirá el motivo por el que te muestra cada anuncio
Noticias
wolfbcn 0 952 Último mensaje 7 Febrero 2019, 14:22 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines