Este codigo me parecio util para averiguar en que segmento de memoria coloca el S.O. las variables de un codigo C segun sean globales, locales, etc. El codigo tambien muestra el valor de cada variable y su direccion de memoria en esa ejecución. Y alguna cosa mas.
El resultado es que las variables definidas como static en el codigo se colocan siempre en la misma posicion de memoria. Lo mismo para las globales. Tengo en mi sistema /proc/sys/kernel/randomize_va_space = 2
Es decir, en una compilacion estandar con gcc 4.4.3
gcc getseg.c -o getsegejecutamos y
root@bt:~# ./getseg global_initialized_var is at address 0x00601028 static_initialized_var is at address 0x0060102c static_var is at address 0x00601040 global_var is at address 0x00601044 heap_var is at address 0x01b99010 stack_var is at address 0xe590418c the function's stack_var is at address 0xe590416c root@bt:~# ./getseg global_initialized_var is at address 0x00601028 static_initialized_var is at address 0x0060102c static_var is at address 0x00601040 global_var is at address 0x00601044 heap_var is at address 0x01b03010 stack_var is at address 0x1962a25c the function's stack_var is at address 0x1962a23c root@bt:~#
ASLR no ha aleatorizado las posiciones de memoria de las variables globales. Las static tambien residen siempre en la misma posicion de memoria.
La version de glibc es la 2.11.1 y el codigo esta disponible en foro.overflowedminds.net/viewtopic.php?f=29&t=74
Okay, let's GDB rocks:
Have fun,
The 'Segmentation fault (core dumped)' is what we wanted to see :)
mudge[at]l0pht[.]com 10/20/95 How to write Buffer Overflows
0 comentarios :
Publicar un comentario