что не правильно?

Тема в разделе "WASM.BEGINNERS", создана пользователем pashe4ka13, 23 июн 2011.

  1. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    Здравствуйте! Есть код на MASM, пример из туториалов Iczelionа (УРОК 24). Решил перевести на FASM. Трудности вызывает вот это:
    Код (Text):
    1.        mov edx,lParam
    2.                assume edx:PTR MOUSEHOOKSTRUCT
    3.                invoke WindowFromPoint,[edx].pt.x,[edx].pt.y
    4.                invoke PostMessage,hWnd,WM_MOUSEHOOK,eax,0
    5.                assume edx:nothing
    мой перевод:
    Код (Text):
    1. macro   assign  reg, struct
    2. {
    3.     virtual at reg
    4.         .#reg struct
    5.     end virtual
    6. }
    7.        mov edx,[lParam]
    8.        assign edx,MOUSEHOOKSTRUCT
    9.        invoke WindowFromPoint,dword[.edx.pt.x],dword[.edx.pt.y]
    10.        invoke PostMessage,[hWnd],WM_MOUSEHOOK,eax,0
    Что тут не правильно?
     
  2. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    Выкладываю весь код библиотеки, так как проблемма именно в ней:
    Код (Text):
    1. format  pe gui 4.0 dll
    2. entry DllEntryPoint
    3. include 'win32ax.inc'
    4. macro   assign  reg, struct
    5. {
    6.     virtual at reg
    7.         .#reg struct
    8.     end virtual
    9. }
    10. WM_MOUSEHOOK equ WM_USER+6
    11. section '.bss' readable writable
    12. hInstance dd ?
    13. hHook     dd ?
    14. hWnd      dd ?
    15. section '.code' code readable executable
    16. proc DllEntryPoint hinstDLL,fdwReason,lpvReserved
    17.        .if [fdwReason]=DLL_PROCESS_ATTACH
    18.            push [hinstDLL]
    19.            pop [hInstance]
    20.        .endif
    21. mov     eax,TRUE
    22. ret
    23. endp
    24. proc SoobshenieHook nCode:DWORD,wParam:DWORD,lParam:DWORD
    25.        invoke CallNextHookEx,[hHook],[nCode],[wParam],[lParam]
    26.    .if [nCode]=HC_ACTION
    27.        mov edx,[lParam]
    28.        assign edx,MOUSEHOOKSTRUCT
    29.        invoke WindowFromPoint,[.edx.pt.x],[.edx.pt.y]
    30.        invoke PostMessage,[hWnd],WM_MOUSEHOOK,eax,0
    31.    .endif
    32.        xor eax,eax
    33.        ret
    34. endp
    35. proc   InstallHook  hwnd:DWORD
    36.        push [hwnd]
    37.        pop  [hWnd]
    38.        invoke SetWindowsHookEx,WH_MOUSE,addr SoobshenieHook,[hInstance],NULL
    39.        mov [hHook],eax
    40.        ret
    41. endp
    42. proc   UninstallHook
    43.        invoke UnhookWindowsHookEx,[hHook]
    44.        ret
    45. endp
    46.  
    47. section '.idata' import data readable writeable
    48. library kernel32,'KERNEL32.DLL',\
    49. user32,'USER32.DLL'
    50. include 'F:\fasm\INCLUDE\api\kernel32.inc'
    51. include 'F:\fasm\INCLUDE\api\user32.inc'
    52. section '.edata' export data readable
    53. export 'hook.dll',\
    54.           InstallHook, 'InstallHook',\
    55.           UninstallHook, 'UninstallHook'
    56. section '.reloc' fixups data discardable
    Все дело в том, что хук как бы получается локальным, в чем причина?
     
  3. dinoweb

    dinoweb Дмитрий

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    129
    Адрес:
    Россия. Красноярск
    А где определена структура MOUSEHOOKSTRUCT ?
    Код (Text):
    1. struct MOUSEHOOKSTRUCT
    2.   pt            POINT <>
    3.   hwnd          dd ?
    4.   wHitTestCode  dd ?
    5.   dwExtraInfo   dd ?
    6. ends
    у меня в инклудах фасма её нет. в вашем исходнике тоже, вот и ругается.
     
  4. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    dinoweb
    У меня тоже не было, я ее объявил в USER32.INC там же где и объявлена структура POINT. Компилится все нормально!
     
  5. Ezrah

    Ezrah Member

    Публикаций:
    0
    Регистрация:
    22 мар 2011
    Сообщения:
    411
    pashe4ka13
    У секции данных должен быть флаг shareable.
     
  6. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.582
    pashe4ka13, есть готовый уже перевод, http://paste.org.ru/?77qfwo или http://fasm.su/Iczelion/24-Windows-Hooks
    где ошибка в вашем - я хз, не знаю Фасм, к сожалению.
     
  7. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    Ezrah
    Спасибо Вам, а так же всем принимавшим участие.
    Я читал, что секция должна быть общая, что бы изменения в ней были видны из всех процессов, но примера ее объявления так и не нашел. Еще меня сбило с толку, что под Олей все работало, а так же то, что если в invoke WindowFromPoint,[.edx.pt.x],[.edx.pt.y] я менял местами x c y, то пример хоть и некорректно, но работал, поэтому я и подумал, что ошибка где то в этом коде. Еще раз всем спасибо!