DLL (C => ASM)

Тема в разделе "WASM.BEGINNERS", создана пользователем nerezus, 6 июн 2007.

  1. nerezus

    nerezus New Member

    Публикаций:
    0
    Регистрация:
    23 сен 2006
    Сообщения:
    89
    Код (Text):
    1. #include <windows.h>
    2.  
    3. HHOOK hHook;
    4. HINSTANCE hInstance;
    5.  
    6.  
    7. LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam) {
    8.     if(code == HC_ACTION ) {
    9.         MessageBox(0, "exit", "exit", 0);
    10.     }
    11.     return CallNextHookEx( hHook, code, wParam, lParam );
    12. }
    13.  
    14. BOOL CALLBACK DllMain(HINSTANCE hModule, DWORD dwReason, LPVOID lpReserved) {
    15.     hInstance = hModule;
    16.     return 1;
    17. }
    18.  
    19. void SetHook() {
    20.     hHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, hInstance, 0);
    21. }
    Код (Text):
    1. .386
    2.  
    3.    .model flat,stdcall
    4.    option casemap:none
    5.    
    6.    include \masm32\include\windows.inc
    7.    include \masm32\include\kernel32.inc
    8.    include \masm32\include\user32.inc
    9.    
    10.    includelib \masm32\lib\kernel32.lib
    11.    includelib \masm32\lib\user32.lib
    12.  
    13.   .data
    14.     hInstance dd 0
    15.     msgExit db "Exit",0
    16.  
    17.   .data?
    18.     hHook dd ?
    19.     hWnd dd ?
    20.  
    21.   .code
    22.     DllMain proc hInst:HINSTANCE, reason:DWORD, reserved1:DWORD
    23.            push hInst
    24.            pop hInstance
    25.  
    26.        mov  eax, 1
    27.        ret
    28.     DllMain Endp
    29.  
    30.  
    31.     KeyboardProc proc nCode:DWORD,wParam:DWORD,lParam:DWORD
    32.         .if nCode == HC_ACTION
    33.             invoke MessageBox, 0, msgExit, msgExit, 0
    34.         .endif
    35.         invoke CallNextHookEx, hHook, nCode, wParam, lParam
    36.         ret
    37.    KeyboardProc endp
    38.    
    39.    
    40.     SetHook proc
    41.         invoke SetWindowsHookEx, WH_KEYBOARD, addr KeyboardProc, hInstance, 0
    42.         mov hHook, eax
    43.         ret
    44.     SetHook endp
    45.  
    46.  
    47.    End DllMain
    Проверять этим:
    Код (Text):
    1. #include <windows.h>
    2.  
    3. int main() {
    4.     MSG msg;
    5.     HMODULE hmod = LoadLibrary("dll.dll");
    6.     FARPROC SetHook = GetProcAddress(hmod, "SetHook");
    7.     SetHook();
    8.     while(!GetMessage(&msg, NULL, 0, 0)) {
    9.         TranslateMessage(&msg);
    10.         DispatchMessage(&msg);
    11.     }
    12.     return 0;
    13. }
    Компилю сишниковую так:
    cl /c dll.c /Fodll.obj
    link /NOLOGO /DLL dll.obj kernel32.lib user32.lib /EXPORT:KeyboardProc /EXPORT:SetHook

    Асмовую так:
    c:\masm32\bin\ml.exe /nologo /c /coff "dll.asm"
    c:\masm32\bin\link.exe /NOLOGO /DLL dll.obj kernel32.lib user32.lib /EXPORT:KeyboardProc /EXPORT:SetHook
     
  2. nerezus

    nerezus New Member

    Публикаций:
    0
    Регистрация:
    23 сен 2006
    Сообщения:
    89
    Собственно проблема в том, что на сишнике работает, а на асме - нет.
     
  3. nerezus

    nerezus New Member

    Публикаций:
    0
    Регистрация:
    23 сен 2006
    Сообщения:
    89
    /DMASM подсказали - запахало. Мистега.
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    invoke MessageBox, 0, addr msgExit, addr msgExit, 0

    /DMASM - непонятно, какое отношение он имеет к этому сорцу.