Título: Problema para pasar un codigo de MASM a FASM
Publicado por: ZoNike en 27 Octubre 2009, 03:59 am
Hola, tengo un problema para traducir un codigo en MASM a FASM. El codigo es parte de una DLL que inyecto en otro proceso. (Sirve para llamar a la funcion PostMessage de la libreria user32.dll en ejecutables protegidos con GameGuard) Codigo en MASM:Pulsacion proc LOCAL wParam1:DWORD LOCAL lParam1:WORD mov wParam1,VK_SPACE ;Tecla a Pulsar invoke MapVirtualKey, wParam1,0 mov lParam1, ax ; Mapeo virtual de la tecla y movemos los dos ultimos bytes a lParam1 invoke PostMessageX, hWnd, WM_KEYDOWN, wParam1, lParam1 ; Pulsacion virtual, Tecla en estado presionado. invoke PostMessageX, hWnd, WM_KEYUP, wParam1, lParam1 ; Pulsacion virtual , tecla en estado de reposo. ret Pulsacion endp PostMessageX proc W:DWORD, X:DWORD, Y:DWORD, Z:DWORD option prologue:none option epilogue:none push ebp ; Trampolin mov ebp, esp jmp Salto; El resultado va hacia salto donde tenemos ya guardada nuestro handle del "PostMessage" PostMessageX endp
Mi traducción del código a FASM:proc Pulsar locals wParam1 dd ? lParam1 dw ? endl mov [wParam1],VK_SPACE invoke MapVirtualKey,[wParam1],0 mov [lParam1],ax stdcall PostMessageX,[hwnd],WM_KEYDOWN,[wParam1],[lParam1] ; EL PROBLEMA ESTA AQUÍ stdcall PostMessageX,[hwnd],WM_KEYUP,[wParam1],[lParam1] ; EL PROBLEMA ESTA AQUÍ ret endp proc PostMessageX W,X,Y,Z push ebp mov ebp,esp jmp [Func] endp
Gracias.
Título: Re: Problema para pasar un codigo de MASM a FASM
Publicado por: Eternal Idol en 27 Octubre 2009, 07:58 am
No decis cual es el problema y solo dejas fragmentos del codigo ... Supongo que la cosa vendra de no poner nada equivalente a esto: option prologue:none option epilogue:none
Si FASM genera las instrucciones del prologo entonces los parametros que le pases a PostMessage seran erroneos. Si esto es asi y no podes omitir el prologo y el epilogo de alguna manera simplemente podes usar una etiqueta y pushs + calls.
Título: Re: Problema para pasar un codigo de MASM a FASM
Publicado por: ZoNike en 28 Octubre 2009, 03:24 am
hola, gracias por tu respuesta. y, ¿como puedo omitir el prologo y el epilogo? o ¿como puedo hacerlo de la otra forma? gracias. edito el mensaje: He encontrado estas macros en "FASM\Include\proc32.inc", pero no sé como usarlas. prologue@proc equ prologuedef macro prologuedef procname,flag,parmbytes,localbytes,reglist { local loc loc = (localbytes+3) and (not 3) parmbase@proc equ ebp+8 localbase@proc equ ebp-loc if parmbytes | localbytes push ebp mov ebp,esp if localbytes sub esp,loc end if end if irps reg, reglist \{ push reg \} } epilogue@proc equ epiloguedef macro epiloguedef procname,flag,parmbytes,localbytes,reglist { irps reg, reglist \{ reverse pop reg \} if parmbytes | localbytes leave end if if flag and 10000b retn else retn parmbytes end if }
Título: Re: Problema para pasar un codigo de MASM a FASM
Publicado por: Eternal Idol en 28 Octubre 2009, 07:55 am
Asi te decia: PostMessageX: push ebp ; Trampolin mov ebp, esp jmp Salto; El resultado va hacia salto donde tenemos ya guardada nuestro handle del "PostMessage"
Lo unico es que vas a tener que usar push's + call's en lugar de stdcall.
Título: Re: Problema para pasar un codigo de MASM a FASM
Publicado por: YST en 2 Noviembre 2009, 02:17 am
En fasm podria ocupar perfectamente la macro stdcall y no necesita usar los push y call :P
|