Las direcciones que está viendo a través de su herramienta de depuración son direcciones de memoria lógica. Cada vez que se genera un programa, la CPU asigna ciertos bytes de memoria al programa. En el hardware, esto puede asignarse en un solo trozo o puede estar esparcido en partes por todo el lugar. Sin embargo, para que sea más sencillo para el programa referirse a las ubicaciones de la memoria, la CPU asigna esta dirección de hardware o memoria física a la dirección lógica.
Un programa que interactúa dentro de este espacio de direcciones no ve otros programas. Solo la CPU sabe qué dirección física buscar cuando el programa hace referencia a alguna dirección de memoria lógica dentro del código.
Entonces, dos programas diferentes pueden referirse a la misma ubicación de memoria lógica, digamos 0x7c900000. Pero la CPU sabe a dónde apuntar esta instrucción en la RAM física. Esto simplifica la vida del programador cuando la CPU se encarga de la administración de la memoria.
Acerca de ASLR (Randomization Layout Space Layout):
ASLR se introdujo porque era bastante fácil alcanzar el punto exacto en la memoria durante la ejecución del programa para encontrar variables vulnerables de desbordamiento de búfer. Esto hizo que las hazañas de escritura fueran fáciles. ASLR asignó al azar la ubicación de las variables, lo que dificulta que los piratas informáticos aprovechen las vulnerabilidades de desbordamiento de búfer.
Por lo tanto, sin ASLR, las variables y las instrucciones de su programa se cargarán exactamente en las mismas ubicaciones (lógicas) cada vez que lo ejecute.