Título: Problema al atrapar excepcion en ensamblador cambiando [fs:0] manualmente (FASM) Publicado por: harry_the_blogger en 14 Septiembre 2014, 03:51 am Hola, estoy desarrollando un programa. El programa busca las APIs sin usar la import table, él programa usa GetProcAddress y LoadLibrary para encontrar todas las APIs que necesita. Pero hay un problema: NO LLAMA A MI EXCEPTION HANDLER CUANDO HAY UNA EXCEPCION!!
El codigo, debería mostrar un mensaje "Exception catched!!" cuando haya una excepcion. Pero el programa sale sin más, aunque curiosamente, no crashea. Aún así la idea es que llame a mi manejador de excepciones, cosa que no hace Aquí está mi codigo. Está escrito en FASM Código
Intenté hacer el siguiente método: Código
El metodo que describí funciona en este pequeño ejemplo (no es la aplicacion que estoy escribiendo): Código
Por que en el primer codigo no trabaja, mientras que en el segundo si lo hace??? Alguien puede decirme porqué??? Gracias de antemano, y perdon por hacerlos leer tanto. (XD). Ah, se me olvidaba, también intenté usar SetUnhandledExceptionFilter (API) para establecer mi funcion como manejador de excepciones, pero no funciono. ¿Será qué el uso que le doy a ciertos registros afecta lo que trato de hacer?? Título: Re: Problema al atrapar excepcion en ensamblador cambiando [fs:0] manualmente (FASM) Publicado por: Eternal Idol en 14 Septiembre 2014, 16:46 pm Tenes que aprender a depurar tu codigo, es un trabajo arduo y mucho mas para quien no lo escribio.
Estas confundido, si que es llamado tu exception handler, si pones un breakpoint en el mismo lo veras. EBP no tiene el valor que vos esperas ... y no hay ninguna garantia de que lo fuera a tener. Título: Re: Problema al atrapar excepcion en ensamblador cambiando [fs:0] manualmente (FASM) Publicado por: harry_the_blogger en 14 Septiembre 2014, 19:17 pm Gracias Eternal Idol.
Título: Re: Problema al atrapar excepcion en ensamblador cambiando [fs:0] manualmente (FASM) Publicado por: daryo en 14 Septiembre 2014, 19:34 pm Citar ??? Será que si guardo el valor de ebp en una variable, antes de que ocurra la excepcion, podré usarlo para llamar las APIs??? mm veo un fallo en eso porque [ebp + direccion de la variable] te da la direccion pero si tienes una variable en ves de ebp como sabes donde estara esa variable donde guarda esa direccion? Título: Re: Problema al atrapar excepcion en ensamblador cambiando [fs:0] manualmente (FASM) Publicado por: harry_the_blogger en 14 Septiembre 2014, 19:41 pm Hola daryo. Tienes razón. Será que me puedes decir alguna forma de preservar ebp sin usar variables??? O será que hay forma de acceder al último valor que tenían los registros antes de morir??
Estaría muy agradecido si me dijeras como puedo preservar ebp. También investigaré más sobre SEH con google. Gracias por tu ayuda, daryo [Nuevo] Tengo otra idea, ¿Será que es posible usar el truco del delta offset para referenciar las variables de nuevo? Lo intentaré. Les comentaré los resultados. Título: Re: Problema al atrapar excepcion en ensamblador cambiando [fs:0] manualmente (FASM) Publicado por: Danyfirex en 15 Septiembre 2014, 21:31 pm si quieres preservar alguna variable puedes usar el stack.
push ebp ;guardas. pop ebp ;lo agarras. Saludos Título: Re: Problema al atrapar excepcion en ensamblador cambiando [fs:0] manualmente (FASM) Publicado por: harry_the_blogger en 16 Septiembre 2014, 04:02 am si quieres preservar alguna variable puedes usar el stack. push ebp ;guardas. pop ebp ;lo agarras. Saludos Gracias Danyfirex. Disculpa, tengo una duda: ¿Puede corromperse la pila? Es decir, ¿que yo no sea capaz de recuperar los valores que tenía? Yo, hasta ahora, he creído que puede corromperse. Por eso intenté solucionarlo calculando el delta offset. Pero si me aclaras bien mi duda, usaré mejor tu codigo. |