Estoy tratando de entender ASLR y cómo se implementa. Entiendo que en realidad no "evita" que ocurra un desbordamiento de búfer, etc. solo lo hará más difícil. Pero no soy capaz de averiguar cómo previene un retorno a un ataque libc. Por ejemplo, digamos que tengo un programa que tiene un desbordamiento de búfer. Doy como entrada un sled np-op seguido de un código de shell. El código de shell sobrescribe la dirección de retorno en el marco de pila. Así que cuando la función vuelva, ejecutará el código de shell. De forma similar, si escribo la dirección de una función libc, esa función se invocará. ahora con ASLR, en cada ejecución del programa, el programa comenzará en alguna dirección aleatoria, ¿no? pero las funciones libc aún están en la misma dirección y, si estoy en lo cierto, eso no cambiará hasta que reinicie una máquina. Entonces, si básicamente intento forzar la fuerza bruta en un programa vulnerable con todas las direcciones posibles, ¿puedo obtener un retorno a libc? también, ¿aslr previene (y cómo?) los ataques de ROP? Si no, ¿cuáles son las defensas?