Entendiendo el nuevo prólogo de gcc

Me preguntaba por qué gcc introdujo un nuevo prólogo (y también un epílogo) a las funciones, especialmente main (), ya que solo lo analicé. Por ejemplo, antes, era:

push ebp
mov ebp, esp
sub esp, 0x... ; Allocate memory space into the stack

; ... Some code

; Epilogue
leave
ret

Ahora esto es un poco más complejo (para entender, al menos):

lea    ecx,[esp+0x4]
and    esp,0xfffffff0
push   DWORD PTR [ecx-0x4]
push   ebp
mov    ebp,esp
push   ecx
sub    esp,0x64

; Some code

; Epilogue
add    esp,0x64
pop    ecx
pop    ebp
lea    esp,[ecx-0x4]
ret

Entiendo lo que hace concretamente, pero no puedo entender elpropósito de eso ¿Es para hacer que la explotación (desbordamiento de pila) intente un poco más complicado? Otra convención de llamadas? ¿Solo para hacer la pila más segura? (Desde que me encontré con esto en un juego de guerra)

Finalmente, mi versión de gcc es: gcc versión 4.3.2 (Debian 4.3.2-1.1)

¡Gracias por adelantado!

Respuestas a la pregunta(0)

Su respuesta a la pregunta