Парсер Либа на ФАСМе

Тема в разделе "WASM.WIN32", создана пользователем calidus, 31 май 2008.

  1. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    Соберите плиз Либу на ФАСМе , желательно с обьяснением как это делается в ФАСМЕ. Спасибо =)
     
  2. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    calidus
    Создаете .asm файл (пример EXAMPLES\MSCOFF\MSCOFF.ASM в установке фасм) инклудите туда ваши инки и компилите. Опосля либите .obj любым внешним либером работающим с coff форматом.
     
  3. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    Код (Text):
    1. format MS COFF
    2. include 'extras.inc'
    3. include 'parser-lib.inc'
    Сделал так. Там макросы есть по созданию секции дата. Так вот первая же команда Идата ошибка, неизвестная команда. Макросы в екстрас находятся =(

    Еще такой вопрос , эта либа привязана к библиотекам и вызовом функций. Я в фасме не соображаю. Если даже переписать на МАСМ , то максроы выглядят очень опасно =) , смысл переписки на масм отвязаться от библиотек. А функции вызывать поиском хэшией и колом потом. Но это только план. Может кто глянет на макросы , можно ли их вообще портировать под МАСМ.
     
  4. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    calidus
    Чем меньше всяких макросов вы влепите тем больше вероятность что у вас все скомпилится, что вы будете понимать что там да как, что вы сможете это куда-то спортировать.
     
  5. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    Исходник уже есть =) и тут не мое желание хочу я или нет , оно просто есть уже. Не получается , фасм макросы не видит, хотя они подключены.
     
  6. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    calidus
    include 'include/extras.inc'
    в нем описаны ваши идата и удата. Если не будет идти все равно, контент идат оформите под
    section '.data' data readable writeable
    контент удат под
    section '.bss' data readable writeable
    после окончания контента возвращайте
    section '.text' code readable executable
     
  7. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    =) а просто дату куда? Там не только Идата и Удата еще просто дата.С подключением экстрас это еще в самомо начале сделал. Екстарс у меня не в папке инклуд лежит.Так не идет... А вообще хоть я в фасме и не понимаю , но мне кажется эти максроы сами должны создавать именно секции типа ...

    section '.data' data readable writeable
    section '.bss' data readable writeable
    section '.text' code readable executable
     
  8. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    calidus
    нивиделдату. дата==идата?
    наверно я не такой умный как вы и макросам не доверяю.

    ЗЫ а что вы там компилите?
    ЗЫ2 неплохо-бы слепить клон коко под фасм..
     
  9. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    Код (Text):
    1. ;===============================================================================
    2. ;       global data
    3. ;       --------------------------------
    4. ;       idata
    5. ;       --------------------------------
    6. macro idata arg {
    7.  __IData equ __IData,
    8.  macro __IDataBlock
    9.   arg }
    10. ;       --------------------------------
    11. ;       udata
    12. ;       --------------------------------
    13. macro udata arg {
    14.  __UData equ __UData,
    15.  macro __UDataBlock
    16.   arg }
    17. ;       --------------------------------
    18. ;       IncludeIData
    19. ;       --------------------------------
    20. macro IncludeIData {
    21.  macro __IData dummy,[n]
    22.  \{
    23.   \forward
    24.    __IDataBlock
    25.    purge __IDataBlock
    26.  \}
    27.  match I, __IData \{ I \}
    28.  purge __IData }
    29. ;       --------------------------------
    30. ;       IncludeUData
    31. ;       --------------------------------
    32. macro IncludeUData {
    33.  macro __UData dummy,[n]
    34.  \{
    35.   \common
    36.    \local ..begin, ..size
    37.    ..begin = $
    38.    virtual at $
    39.   \forward
    40.    __UDataBlock
    41.    purge __UDataBlock
    42.   \common
    43.    ..size = $ - ..begin
    44.    end virtual
    45.    rb ..size
    46.  \}
    47.  match U, __UData \{ U \}
    48.  purge __UData }
    49. ;       --------------------------------
    50. ;       IncludeAllData
    51. ;       --------------------------------
    52. macro IncludeAllData {
    53.  IncludeIData
    54.  IncludeUData }
    55. ;       --------------------------------
    56. ;       ...
    57. ;       --------------------------------
    58. idata { }
    59. udata { }
    60.  
    61. ;===============================================================================
    62. ;       imports
    63. ;       --------------------------------
    64. ;       import_#lib
    65. ;       --------------------------------
    66. macro import lib, [functions] {
    67.  common macro import_#lib \{ import lib, functions \} }
    68. ;       --------------------------------
    69. ;       includes
    70. ;       --------------------------------
    71. include '%fasminc%/apia/kernel32.inc'
    72. include '%fasminc%/apia/user32.inc'
    73. include '%fasminc%/apia/gdi32.inc'
    74. include '%fasminc%/apia/advapi32.inc'
    75. include '%fasminc%/apia/comctl32.inc'
    76. include '%fasminc%/apia/comdlg32.inc'
    77. include '%fasminc%/apia/shell32.inc'
    78. include '%fasminc%/apia/wsock32.inc'
    79. ;       --------------------------------
    80. purge import
    81. ;       --------------------------------
    82. ;       IncludeAllImports
    83. ;       --------------------------------
    84. macro IncludeAllImports {
    85.  data import
    86.   library kernel32,'KERNEL32.DLL',\
    87.           user32,'USER32.DLL',\
    88.           gdi32,'GDI32.DLL',\
    89.           advapi32,'ADVAPI32.DLL',\
    90.           comctl32,'COMCTL32.DLL',\
    91.           comdlg32,'COMDLG32.DLL',\
    92.           shell32,'SHELL32.DLL',\
    93.           wsock32,'WSOCK32.DLL'
    94.  
    95.   import_kernel32
    96.   import_user32
    97.   import_gdi32
    98.   import_advapi32
    99.   import_comctl32
    100.   import_comdlg32
    101.   import_shell32
    102.   import_wsock32
    103.  end data }
    104.  
    105. ;===============================================================================
    106. ;       string array definition
    107. struc string_array [string] {
    108.  forward
    109.   local __label
    110.   __label db string, 0
    111.  common
    112.   local __counter
    113.   label . dword
    114.   __counter = 0
    115.  forward
    116.   dd __label
    117.   __counter = __counter + 1
    118.  common
    119.   .item_count = __counter }
    120.  
    121. ;===============================================================================
    122. ;       emulates usage of double anonymous labels
    123. macro @@@ colon
    124. { @@b equ @@f
    125.   @@b:
    126.   local ..new
    127.   @@f equ ..new }
    =) тут не все обозначения что какая дата. Процедуры ясно что в текст пойдут. Я доверяю макросам и даже их люблю ! Но только не на фасм ! Потому что я их не знаю и вообще может фасм и гибкий язык , но масм мне больше к лицу.

    Как не надо так все сразу со своим фасм фасм. А как надо так все фасмовщики пропали ))))))))
     
  10. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    calidus
    Эта дата? Это секция описания импорта. Ничего в ней не трогайте.

    ЗЫ впредь будьте лаконичнее. Некоторые тут на гпрс-е сидят.
     
  11. zet

    zet New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2007
    Сообщения:
    121
    Код (Text):
    1. include '%fasminc%/apia/kernel32.inc'
    2. include '%fasminc%/apia/user32.inc'
    3. include '%fasminc%/apia/gdi32.inc'
    4. include '%fasminc%/apia/advapi32.inc'
    5. include '%fasminc%/apia/comctl32.inc'
    6. include '%fasminc%/apia/comdlg32.inc'
    7. include '%fasminc%/apia/shell32.inc'
    8. include '%fasminc%/apia/wsock32.inc'
    Заменить на:
    Код (Text):
    1. include '%fasminc%/api/kernel32.inc'
    2. include '%fasminc%/api/user32.inc'
    3. include '%fasminc%/api/gdi32.inc'
    4. include '%fasminc%/api/advapi32.inc'
    5. include '%fasminc%/api/comctl32.inc'
    6. include '%fasminc%/api/comdlg32.inc'
    7. include '%fasminc%/api/shell32.inc'
    8. include '%fasminc%/api/wsock32.inc'
     
  12. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    У меня есть АпиА и АпиВ а просто апи нет =(

    IncludeAllData
    это идата или удата ?
     
  13. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    calidus
    вы просто рамещаете сформированое идатой и удатой.
    Если вы их поскипали, то и этот макрос вызывать не надо
     
  14. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    =) зачем мне скипать ? это же целостный код который я понимаю отчасти из за фасм. Вообщем соберите плиз ктонить готовую, а я уже когданибудь пойму как там что собирать. Алгоритм _basmp_
    сказал.

    Может джеперс тупит =) , у меня что с выделены что с жпрс все хорошо.
     
  15. keYMax

    keYMax New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2003
    Сообщения:
    276
    Адрес:
    Новоуральск
    Не забудьте проверить для какой версии фасма написаны эти макросы. Возможно для старой и в новой версии они косячат.
     
  16. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    calidus
    Лучше наоборот - сперва пишите понятно для себя, а потом постепенно разбирайтесь/добавляйте макросы. Всяких идат/удат там штук 5. Что стоит вынести их и оформить понятно и макросонезависимо?
     
  17. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    =) ай такой совет на отвали. Приходит друг к другу говорит помоги я есть хочу денег нету семье тяжело. А он ему говорит ничего , ты посмотри как без денег сам придумаешь ченить. Время не терпит ...
     
  18. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    В аттаче собирающийся исходник. public-и сделаны для первых трёх функций, остальное аналогично (делать лень, намакросить тоже лень).
     
  19. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    сделал так
    Код (Text):
    1. ;------------------------------------------------------------------------------;
    2. ; Public symbols (exports).                                                    ;
    3. ;------------------------------------------------------------------------------;
    4. public  parser_buffer_load              as '_parser_buffer_load@8'
    5. public  parser_buffer_add               as '_parser_buffer_add@8'
    6. public  parser_buffer_rewind            as '_parser_buffer_rewind@0'
    7. ;
    8. public       parser_list_create         as '_parser_list_create@8'
    9. public       parser_list_add            as '_parser_list_add@8'
    10. public       parser_list_seek           as '_parser_list_seek@4'
    11. public       parser_list_position       as '_parser_list_position@4'
    12. ;
    13. public       parser_token_get           as '_parser_token_get@0'
    14. public       parser_token_skip          as '_parser_token_skip@0'
    15. public       parser_token_remove        as '_parser_token_remove@0'
    16. public       parser_token_previous      as '_parser_token_previous@0'
    17. public       parser_token_is_line       as  '_parser_token_is_line@0'
    18. public       parser_token_line_get      as '_parser_token_line_get@0'
    19. public       parser_token_line_skip     as '_parser_token_line_skip@0'
    20. public       parser_token_line_remove   as '_parser_token_line_remove@0'
    21. public       parser_argument_token_get  as '_parser_argument_token_get@0'
    22. public       parser_token_convert_cpp   as '_parser_token_convert_cpp@0'
    23. ;
    24. public       parser_uninitalize         as '_parser_uninitalize@0'
    25. ;And so on...
    Далее компилирую все окей но ошибка не видит Вин32а.инк он лежит в папке инклуд я дописываю путь , роли не меняет. Меняю регистр вин32а.инк на нижний , так как он в верхнем был а в файле нижний, тоже не помогает. Может от версии зависит ? У меня 1.67.26
     
  20. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    У меня тоже 1.67.26; регистр тут не при чём; win32a.inc точно в include есть? В fasmw.ini (путь поправить надо, конечно):
    Код (Text):
    1. [Environment]
    2. INCLUDE=C:\PRG\FASM\INCLUDE