Test Foro de elhacker.net SMF 2.1

Programación => Programación General => ASM => Mensaje iniciado por: ZoNike en 27 Octubre 2009, 03:59 AM

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:
Código (asm) [Seleccionar]
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:
Código (asm) [Seleccionar]
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:
Código (asm) [Seleccionar]
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.

Código (asm) [Seleccionar]
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:
Código (asm) [Seleccionar]
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