Título: Problema al pasar cadenas a los campos de un struct en FASM Publicado por: Swicher en 31 Enero 2013, 09:36 am Hola a todos, estoy convirtiendo este código en Python (http://stackoverflow.com/questions/7985122/show-explorers-properties-dialog-for-a-file-in-windows) en una librería en Assembler y esto es lo que tengo hasta ahora:
Código
pero el mismo no compila. Al hacer unas pruebas (esto es, comentar lineas hasta que no me aparecieran mas errores) descubri que el problema esta en las lineas 41 y 42 al intentar asignar cadenas a los campos lpVerb y lpFile del struct SHELLEXECUTEINFO y sin importar como lo haga, el compilador siempre muestra algun error. ¿Que estoy haciendo mal? Por cierto, estos son los errores que me aparecen:
Edit varios días después: Ya arregle ese problema que aparecía al ejecutar la función (eso de "access violation writing ..."). Abajo explico como lo logre. Título: Re: Problema al pasar cadenas a los campos de un struct en FASM Publicado por: Eternal Idol en 31 Enero 2013, 10:47 am La estructura esta mal definida, los punteros a cadena no son db, no es un byte, sino que son dd que es el tamaño de un puntero en x86 (4 bytes).
Creo que con esto solventas el error que queda pero probalo: Código
Título: Re: Problema al pasar cadenas a los campos de un struct en FASM Publicado por: Swicher en 31 Enero 2013, 13:19 pm Gracias Eternal Idol, logre compilar el código con las correcciones que mencionaste (ya sospechaba yo que el problema era alguna simpleza como esa ya que para hacer la estructura me base en lo que decía el manual de FASM y creía que las cadenas en las estructuras se asignaban de forma diferente a los números).
Por cierto, cuando importo la librería con Python y llamo a la función ShowProp (todo mediante ctypes) me aparece el error "WindowsError: exception: access violation writing 0x010E200F" y la única forma de arreglarlo que encontré fue agregándole el flag "writeable" a la sección ".code" y en este caso la función se ejecuta correctamente aunque también aparece "WindowsError: exception: access violation writing 0x00000001" (ciertamente es algo raro, pero bueno, quizás después le agregue mas código para ver que error produce con GetLastError o pruebe a importar la DDL en otro programa). Título: Re: Problema al pasar cadenas a los campos de un struct en FASM Publicado por: Eternal Idol en 31 Enero 2013, 13:29 pm Primero depuralo con WinDbg usando un programa propio y cuando funcione probalo con Python ;)
Título: Re: Problema al pasar cadenas a los campos de un struct en FASM Publicado por: fary en 31 Enero 2013, 15:28 pm Recuerda que no puedes mover información de una variable a otra con mov, ejemplo erroneo:
Código
Ejemplo correcto: Código
ó: Código
saludos! Título: Re: Problema al pasar cadenas a los campos de un struct en FASM Publicado por: Swicher en 8 Febrero 2013, 03:49 am Después de varias pruebas y errores descubrí que para que la función se ejecutara sin problemas solamente tenia que crear una instancia (no se si en ASM se le dice de otro modo) de SHELLEXECUTEINFO en la sección .data en lugar de hacerlo mientras se ejecuta ShowProp.
Primero depuralo con WinDbg usando un programa propio y cuando funcione probalo con Python ;) Curiosamente estuve depurando la librería con OllyDbg mediante este truco (http://www.ollydbg.de/Loaddll.htm) pero hasta que no hice lo de cambiar de lugar la instancia de SHELLEXECUTEINFO, el programa solo reconocía la función "DllEntryPoint" (o sea, es como que si Showprop no existiera).Para terminar, actualizo el código del primer post por si a alguien mas le llega a resultar útil (cualquier mejora u optimización es bienvenida). |