Aquí hay un código:
#include <stdio.h>
#include <string.h>
char globalbuf[256];
void function(char *argv) {
char localbuf[256];
strcpy(localbuf, argv);
strcpy(globalbuf, localbuf);
printf("localbuf addr: %p globalbuf addr: %p\n", localbuf, globalbuf);
}
int main(int argc, char **argv) {
function(argv[1]);
return 0;
}
Estaba examinando ASLR y cómo funciona. Más información sobre el sistema operativo y el compilador
gcc (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2
Linux 3.5.0-32-generic #53-Ubuntu SMP x86_64 x86_64 x86_64 GNU/Linux
Entonces, cuando ejecuto este código, veo una dirección localbuf en constante cambio. Lo cual está perfectamente bien, ya que sé que ASLR está habilitado y configurado en modo Completamente aleatorizado . Pero la dirección globalbuf siempre permanece igual. Sé que las variables globales y estáticas sin inicializar forman parte de la sección BSS; y, por lo tanto, asumo que las secciones BSS, Texto y Datos no están siendo aleatorizadas por ASLR.
¿Esto es correcto? Si no me vinculo hacia un documento . Página 2, el último párrafo se refiere a lo que estoy sugiriendo aquí.
Según tengo entendido, cada proceso tiene su propia pila, montón, texto, bss y secciones / áreas de datos, por lo que cada vez que se genera un proceso, se asigna una dirección aleatoria al puntero base y todo lo demás es solo un desplazamiento de eso. Si ese es el caso, ¿qué se está imprimiendo para globalbuf , es el desplazamiento? ¿Cómo puedo encontrar la dirección real de globalbuf ?