bueno como la pregunta es así muy general voy a intentar preguntar alo más concreto a ver si poco a poco lo voy entendiendo. En primer lugar: como podeis ver lo que hago es meter las cadenas "manualmente" en la pila para luego utilizarlas como parametro al llamar a las funciones correspondientes. Por qué es necesario entonces (si es que realmente lo es) hacer estas dos instrucciones antes de meter las cadenas?
push ebp
mov ebp, esp
Me muestro dudoso de que sea necesario pues he comprobado que no siempre es necesario y que el programa funciona igual lo haga o no.
bien esa es la primera duda, espero me podais ayudar puesto que no puedo encontrar informacion sobre esto en ningún otro sitio.
El Hacker es mi última esperanza.
Un saludo.
Eso es para guardar el puntero de pila en la pila. Si por ejemplo llamas a una función desde tu main, y tienes que reservar espacio para más cadenas o lo que sea, puedes perder el ebp del main, entonces lo guardas en la pila, y mueves esp (dir por encima de donde metiste ebp) a ebp, así puedes trabajar con ebp como lo hacías en el main. Luego, antes de retornar, recuperas ebp y retornas.
Ahora no puedo probar el código de arriba, mañana lo hago, pero te recomiendo mientras intentar buscar el error con un depurador como OllyDbg, ahí vas a poder ver qué es lo que hay en la pila y como avanza, y por qué se produce el error.
Saludos