Uso normal:
------(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
Pila desbordada:
------(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
¿Podría evitar esto colocando el valor inicial de la cadena en la última (o, si hay otras variables, la más cercana a la última) ranura de memoria (EB) y haciendo cada letra subsiguiente cada ranura anterior? P.ej.
%pre%Entiendo que hay preferencias de desbordamiento de pila mejores y más aceptadas (canaries, noexec, ASLR). Sólo me pregunto. ¿Esto solucionaría el problema? ¿Sería técnicamente viable?