Минимальное Win32 приложение

Тема в разделе "WASM.WIN32", создана пользователем koderr, 13 окт 2006.

  1. el-

    el- New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    89
    не уж то никто не может потестить бинарник на 2к мастдае ?
     
  2. HoBleen

    HoBleen New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    77
    el-
    Вроде пашет на 2K Sp4
     
  3. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Quantum
    Я попытался вызвать на фасме по ординалу MessageBoxA с помощью твоей либы,так и не понял, как с ней работать! :dntknw:
     
  4. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    EvilsInterrupt
    Конкретно на Фасме есть как-бы более простой способ вызвать функцию по ординалу без использования ImpLib ;) Тем не менее, если уж ты решил использовать линкер, то всё просто:

    1. Создаём скрипт (newuser32.def):

    Код (Text):
    1. include 'implib.inc'
    2. implib user32.dll, ord.477, _MessageBoxA@16
    3. endlib
    2. Компилируем:

    Код (Text):
    1. fasm newuser32.def newuser32.lib
    3. Делаем простенькое тестовое приложение (test.asm):

    Код (Text):
    1. format MS COFF
    2.  
    3. ; Win32 API
    4. extrn '__imp__MessageBoxA@16' as MessageBox:DWORD
    5. extrn '__imp__ExitProcess@4' as ExitProcess:DWORD
    6.  
    7. section '.text' code readable executable
    8.  
    9. MsgCaption db "FASM",0
    10. MsgBoxText db "Hello, world!",0
    11.  
    12. PUBLIC _start
    13. _start:
    14.     push 0
    15.     push MsgCaption
    16.     push MsgBoxText
    17.     push 0
    18.     call [MessageBox]
    19.  
    20.     push 0
    21.     call [ExitProcess]
    4. Компилируем:

    Код (Text):
    1. fasm test.asm
    5. Линкуем:

    Код (Text):
    1. \masm32\bin\link /SUBSYSTEM:WINDOWS /ENTRY:start /LIBPATH:\masm32\lib test.obj kernel32.lib newuser32.lib
    Вот и всё. Там же прилагается подробный туториал, только на английском.

    PS: Забыл добавить, что ординал MessageBox скорее всего разный в разных версиях user32.
    PPS: Вместо _MessageBoxA@16, __imp__MessageBoxA@16 можно использовать практически любые другие валидные символьные имена, но в данном примере я использовал именно эти для "совместимости" с масмом.
     
  5. el-

    el- New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    89
    >>Вроде пашет на 2K Sp4
    ога очень интересно было узнать, ибо как раз по2к и были сомнения ...
    еще у кого нить замечания будут ?
     
  6. koderr

    koderr New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    205
    Вот в этом-то и весь косяк :). Никто не хочет проверить? :P
     
  7. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Quantum
    Ты это имел в виду:
    ?
     
  8. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    EvilsInterrupt
    Вот это:
    Код (Text):
    1. data import
    2.     library user32,'USER32.DLL'
    3.     import user32,\
    4.         MessageBox,477
    5. end data
     
  9. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Quantum
    OK, Thank you.
     
  10. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    koderr
    пожалуйста, приатач hello, world в 112 байт
     
  11. koderr

    koderr New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    205
    А вот в хексах (вдруг с аттачем глюканет):
    4D5A5050681400400050EB2050450000
    4C01000068656C6C6F2C20776F726C64
    00000F010B01023204000000B80B05D7
    77FFD0C302000000000000000C000000
    00004000040000000400000004000000
    00000000040000000000000064010000
    2C010000AFC200000200000000001000
     
  12. el-

    el- New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    89
    кинь плиз, свой бинарник без архива ... ибо хекс у меня не идет ):
     
  13. koderr

    koderr New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    205
    el-
    в аттаче екзешник.
     
  14. dag

    dag New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    446
    XPSP2 инструкция по адресу 0x77d7050b обратилась к памяти 0x77d7050b и не может быть read
     
  15. koderr

    koderr New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    205
    dag
    Он и не должен работать ;)
     
  16. koderr

    koderr New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    205
    собственно, вот что там:
    Код (Text):
    1.         .686p
    2.         .mmx
    3.         .model flat
    4.  
    5. ; ===========================================================================
    6.  
    7. ; Segment type: Pure code
    8. seg000      segment byte public 'CODE' use32
    9.         assume cs:seg000
    10.         assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing
    11.         db  4Dh ; M
    12.         db  5Ah ; Z
    13. ; ---------------------------------------------------------------------------
    14.         push    eax
    15.         push    eax
    16.         push    400014h
    17.         push    eax
    18.         jmp short loc_2C    ; user32.MessageBoxA
    19. ; ---------------------------------------------------------------------------
    20.         db  50h ; P
    21.         db  45h ; E
    22.         db    0
    23.         db    0
    24.         db  4Ch ; L
    25.         db    1
    26.         db    0
    27.         db    0
    28. aHelloWorld db 'hello, world',0
    29.         db    0
    30.         db  0Fh
    31.         db    1
    32.         db  0Bh
    33.         db    1
    34.         db    2
    35.         db  32h ; 2
    36.         db    4
    37.         db    0
    38.         db    0
    39.         db    0
    40. ; ---------------------------------------------------------------------------
    41.  
    42. loc_2C:                 ; CODE XREF: seg000:0000000Aj
    43.         mov eax, 77D7050Bh  ; user32.MessageBoxA
    44.         call    eax
    45.         retn
    46. ; ---------------------------------------------------------------------------
    47.         db    2
    48.         db    0
    49.         db    0
    50.         db    0
    51.         db    0
    52.         db    0
    53.         db    0
    54.         db    0
    55.         db  0Ch
    56.         db    0
    57.         db    0
    58.         db    0
    59.         db    0
    60.         db    0
    61.         db  40h ; @
    62.         db    0
    63.         db    4
    64.         db    0
    65.         db    0
    66.         db    0
    67.         db    4
    68.         db    0
    69.         db    0
    70.         db    0
    71.         db    4
    72.         db    0
    73.         db    0
    74.         db    0
    75.         db    0
    76.         db    0
    77.         db    0
    78.         db    0
    79.         db    4
    80.         db    0
    81.         db    0
    82.         db    0
    83.         db    0
    84.         db    0
    85.         db    0
    86.         db    0
    87.         db  64h ; d
    88.         db    1
    89.         db    0
    90.         db    0
    91.         db  2Ch ; ,
    92.         db    1
    93.         db    0
    94.         db    0
    95.         db 0AFh ; п
    96.         db 0C2h ; T
    97.         db    0
    98.         db    0
    99.         db    2
    100.         db    0
    101.         db    0
    102.         db    0
    103.         db    0
    104.         db    0
    105.         db  10h
    106.         db    0
    107. seg000      ends
    108.  
    109.  
    110.         end
     
  17. @le][

    @le][ New Member

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    10
    asd проверил твой Мессагбокс и увидел , что у тебя же ещё есть вариант для сжатия
    Sections Alignment - 1000
    File Alignment - 200
    Интересно почему ты этим принебрег ???
    Хотя в том Мессагбоксе "Привет,мир" на 133 байта - это реализовано
    Sections Alignment - 4
    File Alignment - 4