asm help

Discussion in 'Реверсинг' started by genom--, 3 Mar 2007.

  1. genom--

    genom-- Elder - Старейшина

    Joined:
    9 Jul 2006
    Messages:
    668
    Likes Received:
    416
    Reputations:
    288
    вообщем под ос калашникова учебник освоил и внял так сказать
    сечас выдалась свободная минутка слил с wasm.ru изеслона туториал под win32 как кодить

    второй урок почемуто не компилится

    сам код
    .386
    .model flat, stdcall
    option casemap:none

    include \masm32\include\windows.inc
    include \masm32\include\user32.inc
    include \masm32\include\kernel32.inc
    includelib \masm32\lib\user32.lib
    includelib \masm32\lib\kernel32.lib

    WinMain proto :DWORD,:DWORD,:DWORD,:DWORD

    .DATA
    ClassName db "SimpleWinClass",0
    AppName db "Our First Window",0

    .DATA?
    hInstance HINSTANCE ?
    CommandLine LPSTR ?

    .CODE ; Здесь начинается наш код
    start:
    invoke GetModuleHandle, NULL ; Взять хэндл пpогpаммы
    ; Под Win32, hmodule==hinstance mov
    ; hInstance,eax
    mov hInstance,eax
    invoke GetCommandLine ; Взять командную стpоку. Вы не обязаны
    ; вызывать эту функцию если ваша
    ; пpогpамма не обpабатывает командную стpоку.
    mov CommandLine,eax
    invoke WinMain, hInstance,NULL,CommandLine,SW_SHOWDEFAULT
    invoke ExitProcess, eax ; Выйти из пpогpаммы.
    ; Возвpащаемое значение, помещаемое в eax,
    ; беpется из WinMain.
    WinMain proc

    Inst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD

    LOCAL wc:WNDCLASSEX ; создание локальных пеpеменных в стеке
    LOCAL msg:MSG
    LOCAL hwnd:HWND

    mov wc.cbSize,SIZEOF WNDCLASSEX ; заполнение стpуктуpы wc
    mov wc.style, CS_HREDRAW or CS_VREDRAW
    mov wc.lpfnWndProc, OFFSET WndProc
    mov wc.cbClsExtra,NULL
    mov wc.cbWndExtra,NULL
    push hInstance
    pop wc.hInstance
    mov wc.hbrBackground,COLOR_WINDOW+1
    mov wc.lpszMenuName,NULL
    mov wc.lpszClassName,OFFSET ClassName
    invoke LoadIcon,NULL,IDI_APPLICATION
    mov wc.hIcon,eax
    mov wc.hIconSm,eax
    invoke LoadCursor,NULL,IDC_ARROW
    mov wc.hCursor,eax
    invoke RegisterClassEx, addr wc ; pегистpация нашего класса окна
    invoke CreateWindowEx,NULL,\
    ADDR ClassName,\
    ADDR AppName,\
    WS_OVERLAPPEDWINDOW,\
    CW_USEDEFAULT,\
    CW_USEDEFAULT,\
    CW_USEDEFAULT,\
    CW_USEDEFAULT,\
    NULL,\
    NULL,\
    hInst,\
    NULL

    mov hwnd,eax
    invoke ShowWindow, hwnd,CmdShow ; отобpазить наше окно на десктопе
    invoke UpdateWindow, hwnd ; обновить клиентскую область
    .WHILE TRUE ; Enter message loop
    invoke GetMessage, ADDR msg,NULL,0,0
    .BREAK .IF (!eax)
    invoke TranslateMessage, ADDR msg
    invoke DispatchMessage, ADDR msg
    .ENDW
    mov eax,msg.wParam ; сохpанение возвpащаемого значения в
    ; eax
    ret

    WinMain endp

    WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

    .IF uMsg==WM_DESTROY ; если пользователь закpывает окно
    invoke PostQuitMessage,NULL ; выходим из пpогpаммы
    .ELSE
    invoke DefWindowProc,hWnd,uMsg,wParam,lParam ; Дефаултная функция
    ; обpаботки окна
    ret
    .ENDIF
    xor eax,eax
    ret

    WndProc endp
    end start



    вот что выдает компилятор

    Assembling: C:\test.asm
    C:\test.asm(35) : error A2111: conflicting parameter definition
    C:\test.asm(37) : error A2008: syntax error : HINSTANCE
    C:\test.asm(39) : error A2012: PROC, MACRO, or macro repeat directive must precede LOCAL
    C:\test.asm(40) : error A2012: PROC, MACRO, or macro repeat directive must precede LOCAL
    C:\test.asm(41) : error A2012: PROC, MACRO, or macro repeat directive must precede LOCAL
    C:\test.asm(58) : error A2006: undefined symbol : wc
    C:\test.asm(58) : error A2114: INVOKE argument type mismatch : argument : 1
    C:\test.asm(59) : error A2006: undefined symbol : hInst
    C:\test.asm(59) : error A2114: INVOKE argument type mismatch : argument : 11
    C:\test.asm(73) : error A2006: undefined symbol : CmdShow
    C:\test.asm(73) : error A2114: INVOKE argument type mismatch : argument : 2
    C:\test.asm(73) : error A2006: undefined symbol : hwnd
    C:\test.asm(73) : error A2114: INVOKE argument type mismatch : argument : 1
    C:\test.asm(74) : error A2006: undefined symbol : hwnd
    C:\test.asm(74) : error A2114: INVOKE argument type mismatch : argument : 1
    C:\test.asm(76) : error A2006: undefined symbol : msg
    C:\test.asm(76) : error A2114: INVOKE argument type mismatch : argument : 1
    C:\test.asm(78) : error A2006: undefined symbol : msg
    C:\test.asm(78) : error A2114: INVOKE argument type mismatch : argument : 1
    C:\test.asm(79) : error A2006: undefined symbol : msg
    C:\test.asm(79) : error A2114: INVOKE argument type mismatch : argument : 1
    C:\test.asm(43) : error A2006: undefined symbol : wc
    C:\test.asm(44) : error A2006: undefined symbol : wc
    C:\test.asm(45) : error A2006: undefined symbol : wc
    C:\test.asm(46) : error A2006: undefined symbol : wc
    C:\test.asm(47) : error A2006: undefined symbol : wc
    C:\test.asm(49) : error A2006: undefined symbol : wc
    C:\test.asm(50) : error A2006: undefined symbol : wc
    C:\test.asm(51) : error A2006: undefined symbol : wc
    C:\test.asm(52) : error A2006: undefined symbol : wc
    C:\test.asm(54) : error A2006: undefined symbol : wc
    C:\test.asm(55) : error A2006: undefined symbol : wc
    C:\test.asm(57) : error A2006: undefined symbol : wc
    C:\test.asm(72) : error A2006: undefined symbol : hwnd
    C:\test.asm(82) : error A2006: undefined symbol : msg
    ’®¬ ў гбва®©б⢥ C *Ґ Ё¬ҐҐв ¬ҐвЄЁ.
    ‘ҐаЁ©*л© *®¬Ґа ⮬*: 3438-BA06

    ‘®¤Ґа¦Ё¬®Ґ Ї*ЇЄЁ C:\

    03.03.2007 21:43 2я667 test.asm
    1 д*©«®ў 2я667 Ў*©в
    0 Ї*Ї®Є 437я686я272 Ў*©в бў®Ў®¤*®

    какя то лажа при вызове winmain

    что не так у него пока сам понять еще не в состоянии
     
  2. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    Там допущена всего одна ошибка, произащедшая скорее всего во время того как ты копипастил код ;)
    Ты её найдёшь без проблем, если сравнишь этот сорец с практически любым другим из примеров ;)
     
  3. taha

    taha Elder - Старейшина

    Joined:
    20 Aug 2006
    Messages:
    399
    Likes Received:
    330
    Reputations:
    251
    В след раз, ставь тег "CODE" (у меня стоко ошибок было)
    а опечатка то всего одна

    Code:
    .386
    .model flat, stdcall
    option casemap:none
    
    include C:\masm32\include\windows.inc
    include C:\masm32\include\user32.inc
    include C:\masm32\include\kernel32.inc
    includelib C:\masm32\lib\user32.lib
    includelib C:\masm32\lib\kernel32.lib
    
    WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
    
    .DATA
    ClassName db "SimpleWinClass",0
    AppName db "Our First Window",0
    
    .DATA?
    hInstance HINSTANCE ?
    CommandLine LPSTR ?
    
    .CODE ; Здесь начинается наш код
    start:
    invoke GetModuleHandle, NULL ; Взять хэндл пpогpаммы
    ; Под Win32, hmodule==hinstance mov
    ; hInstance,eax
    mov hInstance,eax
    invoke GetCommandLine ; Взять командную стpоку. Вы не обязаны
    ; вызывать эту функцию если ваша
    ; пpогpамма не обpабатывает командную стpоку.
    mov CommandLine,eax
    invoke WinMain, hInstance,NULL,CommandLine,SW_SHOWDEFAULT
    invoke ExitProcess, eax ; Выйти из пpогpаммы.
    ; Возвpащаемое значение, помещаемое в eax,
    ; беpется из WinMain.
    WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
    
    LOCAL wc:WNDCLASSEX ; создание локальных пеpеменных в стеке
    LOCAL msg:MSG
    LOCAL hwnd:HWND
    
    mov wc.cbSize,SIZEOF WNDCLASSEX ; заполнение стpуктуpы wc
    mov wc.style, CS_HREDRAW or CS_VREDRAW
    mov wc.lpfnWndProc, OFFSET WndProc
    mov wc.cbClsExtra,NULL
    mov wc.cbWndExtra,NULL
    push hInstance
    pop wc.hInstance
    mov wc.hbrBackground,COLOR_WINDOW+1
    mov wc.lpszMenuName,NULL
    mov wc.lpszClassName,OFFSET ClassName
    invoke LoadIcon,NULL,IDI_APPLICATION
    mov wc.hIcon,eax
    mov wc.hIconSm,eax
    invoke LoadCursor,NULL,IDC_ARROW
    mov wc.hCursor,eax
    invoke RegisterClassEx, addr wc ; pегистpация нашего класса окна
    invoke CreateWindowEx,NULL,\
    ADDR ClassName,\
    ADDR AppName,\
    WS_OVERLAPPEDWINDOW,\
    CW_USEDEFAULT,\
    CW_USEDEFAULT,\
    CW_USEDEFAULT,\
    CW_USEDEFAULT,\
    NULL,\
    NULL,\
    hInst,\
    NULL
    
    mov hwnd,eax
    invoke ShowWindow, hwnd,CmdShow ; отобpазить наше окно на десктопе
    invoke UpdateWindow, hwnd ; обновить клиентскую область
    .WHILE TRUE ; Enter message loop
    invoke GetMessage, ADDR msg,NULL,0,0
    .BREAK .IF (!eax)
    invoke TranslateMessage, ADDR msg
    invoke DispatchMessage, ADDR msg
    .ENDW
    mov eax,msg.wParam ; сохpанение возвpащаемого значения в
    ; eax
    ret
    
    WinMain endp
    
    WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    
    .IF uMsg==WM_DESTROY ; если пользователь закpывает окно
    invoke PostQuitMessage,NULL ; выходим из пpогpаммы
    .ELSE
    invoke DefWindowProc,hWnd,uMsg,wParam,lParam ; Дефаултная функция
    ; обpаботки окна
    ret
    .ENDIF
    xor eax,eax
    ret
    
    WndProc endp
    end start
     
    #3 taha, 4 Mar 2007
    Last edited: 4 Mar 2007
  4. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    незнаю... я не читаю посты я просто так пишу

    а вот упрёк masm
    нахуя они придумали "типы" HINSTANCE, LPSTR, DWORD ?
    помоему смысл понимания ассемблерного кода - достучаться до задней точки мозга дабы обьяснить что все это dd, dword - 4байта (в 32-б с-мах)

    ну пусть ещё сделают LPCTSTR2 которая будет dword
    и SUPERPUPERTYPE который будет значит также dword
    и MY_KAK_BI_DWORD который тоже dword


    upd ваш хэк форум смайлики не в тему ставит ...
     
    #4 KEZ, 4 Mar 2007
    Last edited: 4 Mar 2007
    1 person likes this.
  5. taha

    taha Elder - Старейшина

    Joined:
    20 Aug 2006
    Messages:
    399
    Likes Received:
    330
    Reputations:
    251
    сам не знаю))) может максимально к си хотели приблизить, там еще больше, мне не понятных типов, и звёздочек, рюшечек всяких

    скорее всего для простоты понимания, чтоб сразу было видно, hInstance - хэндл
     
    #5 taha, 4 Mar 2007
    Last edited: 4 Mar 2007
  6. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    Поэтому я и нелюблю masm'ом и С++, помимо этих типов ещё это обьявление функций зараннее, тоже чушь ИМХО, но если человеку нравится мучить себя этой дрянью, почему бы и не помочь :) Пусть сам сделает свой выбор.
     
    2 people like this.
  7. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    пускай в си плюс плюс все останется - там это как раз очень к месту и удобно потому что это все-таки язык и там не нужно видеть самую суть. ассемблер же втупую набор заранее известных инструкций.
     
  8. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    Тот же самый пример, зачем в c++ HINSTANCE, LPSTR, DWORD они ведь всё-равно значат одно и тоже, но не дают подставить одно в другое без изменения типа, в чём тогда смысл?
    Вот Perl вот это язык, никаких типов и никакой сути.
     
  9. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    Дело как раз в том что там они не значат одно и тоже.
    С-код - это схема. Схема приложения. Части этой схема работают с разными данными, соответственно разных типов. Тип LPSTR - указатель на строку, а DWORD - положительное 4-байтное значение. Хоть указатель тоже четырехбайтный, нужно знать где передать указатель, где хенлд, а где просто число. Если кодер начинает использовать для разработки "напрямую" ассемблер - он соглашается использовать один тип (реальный, настоящий, тут у нас dword) для описания того что раньше делал кучей других, описаных в Win SDK. Так нафига же ему обратно впихивать то что он только что согласился забыть, чтобы успешно кодить на асм?
     
  10. genom--

    genom-- Elder - Старейшина

    Joined:
    9 Jul 2006
    Messages:
    668
    Likes Received:
    416
    Reputations:
    288
    всем спасибо ------- с++ я не знаю и знать нихочу а вот асм иногда накатывает пытаюсь учить =)