Op vrijdag 21 december 2001 16:08 schreef OlafvdSpek het volgende:
Maar als je code segment read-only is en er geen alias is en het stack segment niet executeerbaar is werkt dat toch niet?
Jawel.
code:
1
2
3
| ------------+-----------------+----------------
variabelen | buffer | stack
------------+-----------------+--------------- |
Als een function aangeroepen wordt, wordt het adres van het uitgevoerde commando op de stack gepusht, en naar de locatie van de function gesprongen. Als de function returnt, wordt die waarde van de stack gepopt, en weer daarheen gesprongen.
Maar als in die function nu 'buffer' wordt gebruikt, en deze buffer is te klein, dan wordt de stack overschreven met de informatie in de buffer. Als de function dan returnt, wordt gesprongen naar het adres wat in de stack staat. Door de buffer met een specifieke waarde te overschrijven kan dus bepaald worden waargeen gesprongen moet worden.
Dit gaat overigens niet alleen op voor stacks, maar voor alle informatie die misbruikt kan worden en na een te korte buffer staat.