Sarebbe molto più difficile perché avresti bisogno di usare un offset ogni volta. Esistono varie soluzioni, a seconda della tecnica utilizzata:
Se ASLR viene utilizzato, non sai con certezza dove si trova il tuo shellcode, ma puoi comunque ignorarlo spruzzando. Inoltre, solo l'indirizzo di base è casuale, non l'offset di funzione e puoi tornare a plt .
nX / DEP ha anche i suoi difetti, ad esempio la memoria delle richieste Java di PAGE_EXECUTE_READWRITE e quindi lo rende eseguibile.
Ma generalmente, affinché gli exploit più noti funzionino, l'indirizzo deve essere assoluto. In un buffer overflow tradizionale nello stack, il codice shell fa parte dei dati che attivano l'overflow, quindi è nel buffer. L'indirizzo di ritorno è assoluto, quindi non è sufficiente che l'attaccante conosca il codice della funzione attaccata; l'attaccante deve anche sapere qual è la profondità dello stack in quel momento, e questo dipende dal comportamento dell'applicazione precedente. Senza la profondità dello stack, non avresti idea di quanto sia grande l'offset.