Sto cercando di capire ASLR e come è implementato. Capisco che in realtà non "prevenga" l'overflow del buffer ecc., Lo renderà solo più difficile. Ma non sono in grado di capire come impedire un ritorno all'attacco di libc. Ad esempio, diciamo che ho un programma che ha un buffer overflow. Dò come input una slitta np-op seguita dal codice shell. Il codice shell sovrascrive l'indirizzo di ritorno nello stack frame. Quindi, quando la funzione ritorna, eseguirà il codice shell. Simile se scrivo l'indirizzo di una funzione di libc che la funzione verrà invocata. ora con ASLR, su ogni programma eseguito il programma partirà con qualche indirizzo casuale giusto? ma le funzioni di libc sono ancora allo stesso indirizzo e se sono corretto non cambierà fino a quando non riavvio una macchina. Quindi, se fondamentalmente provo a forzare un programma vulnerabile con tutti gli indirizzi possibili, posso ancora ottenere un ritorno a libc? inoltre, non previene (e come?) dagli attacchi ROP? se no quali sono le difese?