Hola a todos, estoy convirtiendo este código en Python en una librería en Assembler y esto es lo que tengo hasta ahora:
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.
Código (asm) [Seleccionar]
format PE GUI 4.0 DLL
entry DllEntryPoint
include 'win32a.inc'
section '.code' code readable executable
struct SHELLEXECUTEINFO
cbSize dd ?
fMask dd ?
hwnd dd ?
lpVerb dd ?
lpFile dd ?
lpParameters dd ?
lpDirectory dd ?
nShow dd ?
hInstApp dd ?
lpIDList dd ?
lpClass dd ?
hKeyClass dd ?
dwHotKey dd ?
hIconOrMonitor dd ?
hProcess dd ?
ends
proc DllEntryPoint hinstDLL,fdwReason,lpvReserved
mov eax,TRUE
ret
endp
proc ShowProp filepath
mov [sei.cbSize], sizeof.SHELLEXECUTEINFO
mov [sei.fMask], SEE_MASK_NOCLOSEPROCESS or SEE_MASK_INVOKEIDLIST
mov [sei.lpVerb], prop
mov ecx, [filepath]
mov [sei.lpFile], ecx
mov [sei.nShow], 1
invoke ShellExecuteEx, sei
ret
endp
section '.data' data readable writeable
SEE_MASK_NOCLOSEPROCESS = 0x00000040
SEE_MASK_INVOKEIDLIST = 0x0000000C
prop db "properties",0
sei SHELLEXECUTEINFO
section '.idata' import data readable writeable
library shell32,'SHELL32.DLL'
import shell32,ShellExecuteEx,'ShellExecuteEx'
section '.edata' export data readable
export 'ShowProperties.dll', ShowProp, 'ShowProp'
section '.reloc' fixups data discardable
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:
Linea | Modificación | Error que aparece |
41 | mov[sei.lpVerb],prop | invalid use of symbol. |
41 | mov [sei.lpVerb], "properties" | value out of range. |
42 | mov [sei.lpFile], filepath | invalid value. |
37 y 42 | proc ShowProp filepath* y mov [sei.lpFile], filepath (con y sin * al final) | extra characters on line. (en endp) |
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.