Estaba intentando explotar un desbordamiento de búfer de la siguiente manera:
Trineo NOP - > shellcode - > dirección del trineo NOP (antes de guardar el RIP)
Pero, en Desbordamiento de pila, me dijeron que también debería agregar un sled NOP a mi código de shell:
Trineo NOP - > shellcode - > dirección del trineo NOP - > Trineo NOP.
¿Puede alguien explicarme por qué debo agregar un sled NOP a mi código de shell?
Esta es mi publicación original en Stack Overflow:
Gracias.
EDITAR: leí otra publicación en la que alguien tuvo el mismo problema.
Solucionó esto agregando un pequeño trineo NOP después del shellcode. Dado que el código de shell se agregó a la pila al final del búfer, y empuja algunas cosas a la pila en sí, estaba sobrescribiendo su propio código.
Pero no entiendo cómo una instrucción push puede hacer que Shellcode sobrescriba su propio código.