Uso normale:
------(buffer)------ --(ret)---
DDDDDDDDEEEEEEEEEEEE EEEE FFFF
89ABCDEF0123456789AB CDEF 0123
this is a string ------(buffer)------ --(ret)---
DDDDDDDDEEEEEEEEEEEE EEEE FFFF
89ABCDEF0123456789AB CDEF 0123
oh no you got hacked cadf aff0 ------(buffer)------ --(ret)---
DDDDDDDDEEEEEEEEEEEE EEEE FFFF
89ABCDEF0123456789AB CDEF 0123
dekcah tog uoy on ho bff5 a400 (no harm to ret pointer)
bff5 a400
Stack overflow:
------(buffer)------ --(ret)---
DDDDDDDDEEEEEEEEEEEE EEEE FFFF
89ABCDEF0123456789AB CDEF 0123
this is a string ------(buffer)------ --(ret)---
DDDDDDDDEEEEEEEEEEEE EEEE FFFF
89ABCDEF0123456789AB CDEF 0123
oh no you got hacked cadf aff0 ------(buffer)------ --(ret)---
DDDDDDDDEEEEEEEEEEEE EEEE FFFF
89ABCDEF0123456789AB CDEF 0123
dekcah tog uoy on ho bff5 a400 (no harm to ret pointer)
bff5 a400
Puoi evitarlo mettendo il valore iniziale della stringa nell'ultimo (o, se ci sono altre variabili, più vicino all'ultimo) slot di memoria (EB) e facendo ogni lettera successiva ogni slot precedente? Per esempio.
%pre%Capisco che ci sono preempts di overflow dello stack migliori e più largamente accettati (canarini, noexec, ASLR). Mi sto solo chiedendo. Questo risolverebbe il problema? Sarebbe tecnicamente fattibile?