собственная процедура

Тема в разделе "WASM.BEGINNERS", создана пользователем xlinuks, 24 сен 2006.

  1. xlinuks

    xlinuks New Member

    Публикаций:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    181
    В общем проблема в том что.. не получается правильно определить процедуру! Я сам оффигиваю, те которые через импорт идут, т.е. айпишные - все в порядке, а вот свою собственную - ну никак! Хелп плиз!

    Код (Text):
    1. format PE GUI 4.0
    2.  
    3. entry EntryPoint
    4. include '%fasminc%/win32a.inc'
    5.  
    6. section '.data' data readable writeable
    7.         sMessage db 'This is the message', 0
    8.         sTitle db 'Message', 0
    9.  
    10. section '.code' code readable executable
    11.  
    12.  proc some_proc, theMessage
    13.       invoke MessageBox, theMessage, sTitle, MB_OK ;vydaet "Ivalid value",
    14.              ;esli [theMessage] to "Operand size not specified" v stroke "invoke some_proc, sMessage"
    15.       ret
    16.  endp
    17.  
    18. EntryPoint:
    19.  
    20.         invoke some_proc, sMessage
    21.         invoke ExitProcess, NULL
    22.  
    23.  
    24.  
    25. section '.idata' import data readable
    26.  
    27.         library kernel32, 'KERNEL32.DLL',\
    28.                         user32, 'USER32.DLL',\
    29.                         shell32, 'SHELL32.DLL'
    30.  
    31.         include '%fasminc%/apia/kernel32.inc'
    32.         include '%fasminc%/apia/user32.inc'
     
  2. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    В масме было бы так:
    some_proc PROTO :lol: WORD

    И ещё, MessageBox принимает 4 параметра
     
  3. xlinuks

    xlinuks New Member

    Публикаций:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    181
    Про 4 параметра это ты хорошо подметил, исправил, в фасме можно не указывать размер (он предполагает что имеет дело с dword), переделал, но все равно.. не компилируется..

    Код (Text):
    1. format PE GUI 4.0
    2.  
    3. entry EntryPoint
    4. include '%fasminc%/win32a.inc'
    5.  
    6. section '.data' data readable writeable
    7.         sMessage db 'This is the message', 0
    8.         sTitle db 'Message', 0
    9.  
    10. section '.code' code readable executable
    11.  
    12.  proc some_proc, theMessage
    13.       invoke MessageBox, NULL, theMessage, sTitle, MB_OK
    14.        ret
    15.  endp
    16.  
    17. EntryPoint:
    18.  
    19.         invoke some_proc, sMessage
    20.         invoke ExitProcess, NULL
    21.  
    22. section '.idata' import data readable
    23.  
    24.         library kernel32, 'KERNEL32.DLL',\
    25.                         user32, 'USER32.DLL',\
    26.                         shell32, 'SHELL32.DLL'
    27.  
    28.         include '%fasminc%/apia/kernel32.inc'
    29.         include '%fasminc%/apia/user32.inc'
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    [theMessage].
    и через invoke у тебя вряд ли скомпилится.
     
  5. xlinuks

    xlinuks New Member

    Публикаций:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    181
    А что тогда вместо invoke??
    просто если не инвоук то может быть много разных комбинаций, или читать до вечера мануалы и все равно не будет гарантии что найду ответа, смотрел в документации по фасму там процедуры именно так определяются. Может вызывать процедуры внутри других нужно уже по другому..
    может ли ктото выложить рабочюю версию этого маленького кода, если увижу сразу пойму что и как.
     
  6. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Код (Text):
    1. push sMessage
    2. call some_proc
     
  7. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    если взглянешь в макрос invoke, то увидишь call [proc]. Можешь использовать для своих функций макрос stdcall.
     
  8. xlinuks

    xlinuks New Member

    Публикаций:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    181
    Наконецто! заработало! Сэнкью вэри мач! :) Ни за что бы не подумал что для своих процедур нужно использовать stdcall!
    Код (Text):
    1. format PE GUI 4.0
    2.  
    3. entry EntryPoint
    4. include '%fasminc%/win32a.inc'
    5.  
    6. section '.data' data readable writeable
    7.         sMessage db 'This is the message', 0
    8.         sTitle db 'Message', 0
    9.  
    10. section '.code' code readable executable
    11.  
    12.  proc some_proc, theMessage
    13.        invoke MessageBox, NULL, [theMessage], sTitle, MB_OK
    14.        ret
    15.  endp
    16.  
    17. EntryPoint:
    18.         stdcall some_proc, sMessage
    19.         invoke ExitProcess, NULL
    20.  
    21. section '.idata' import data readable
    22.  
    23.         library kernel32, 'KERNEL32.DLL',\
    24.                         user32, 'USER32.DLL',\
    25.                         shell32, 'SHELL32.DLL'
    26.  
    27.         include '%fasminc%/apia/kernel32.inc'
    28.         include '%fasminc%/apia/user32.inc'
     
  9. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Пиво по ICQ отсылай =)
     
  10. xlinuks

    xlinuks New Member

    Публикаций:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    181
    Еслиб было реально, отослал бы :)
    Ничего, добро возвращается бумерангом, рано или поздно, и это хорошо.
     
  11. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Главное что бы оно в лоб не попало:)
     
  12. xlinuks

    xlinuks New Member

    Публикаций:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    181