Как преобразовать структуру из MASM-a в FASM?

Тема в разделе "WASM.BEGINNERS", создана пользователем _sheva740, 25 янв 2008.

  1. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Добрый день.

    Пытаюсь перейти из MASM в FASM.
    Может в новом FASM - е что-то сменилось.

    Два вопроса.

    1.
    Подскажите, пожалуйста как перевести эти
    структуры из MASM в FASM
    Код (Text):
    1. DNS_MX_DATA struct
    2.     pNameExchange   dword   ?
    3.     Preference  word    ?
    4.     ad      word    ?
    5. DNS_MX_DATA ends
    6.  
    7. ;---------------------------------------------
    8. DNS_RECORD struct
    9.     pNext           dword   ?
    10.     pName           dword   ?
    11.     wType           word    ?
    12.     wDataLength     word    ?
    13.     Flags           dword   ?
    14.     MX1         DNS_MX_DATA <>
    15.     MX2         DNS_MX_DATA <>
    16.     MX3         DNS_MX_DATA <>
    17.     MX4         DNS_MX_DATA <>
    18.     MX5         DNS_MX_DATA <>
    19. DNS_RECORD ends
    2.
    Как в FASM-е выполнить assume
    Код (Text):
    1. assume  eax : ptr DNS_RECORD
    2. push    [eax].MX2.pNameExchange
    Спасибо.
     
  2. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    попробуй так:

    Код (Text):
    1. struct DNS_MX_DATA
    2.     pNameExchange   dd  ?
    3.     Preference  dw  ?
    4.     ad      dw  ?
    5. ends
    6.  
    7. ;---------------------------------------------
    8. struct DNS_RECORD
    9.     pNext           dd  ?
    10.     pName           dd  ?
    11.     wType           dw  ?
    12.     wDataLength     dw  ?
    13.     Flags           dd  ?
    14.     MX1         DNS_MX_DATA <>
    15.     MX2         DNS_MX_DATA <>
    16.     MX3         DNS_MX_DATA <>
    17.     MX4         DNS_MX_DATA <>
    18.     MX5         DNS_MX_DATA <>
    19. ends
     
  3. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    Код (Text):
    1. struct DNS_MX_DATA
    2.     pNameExchange   dd  ?
    3.     Preference  dw  ?
    4.     ad      dw  ?
    5. ends
    и т.д.
     
  4. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    shoo
    t00x

    Спасибо.
    А вот как с assume быть?
     
  5. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    есть какой-то выкрутас с virtual - но я им не пользовался. уже на форуме где-то обсуждали
     
  6. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    include 'masm.inc'
    В результате различия минимальны: не пишешь <> и не знаю, нужно ли писать ptr в assume.
    А так, на фасме assume будет выглядеть так:
    Код (Text):
    1. virtual at eax
    2.   .dns DNS_RECORD
    3. end virtual
    4.  
    5. push    [.dns.MX2.pNameExchange]
     
  7. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    И еще вопрос

    Вот в MASM мы берем аргумент командной строки
    Код (Text):
    1.     invoke  GetCL,1,ADDR sHostName  ; возьмем первый аргумент командной строки
    2.     .if eax != 1        ; если нет ни одного аргумента выход
    3.                 ; начинаем работать
    4.                 ; вывод сообщения о привилах использования      
    5.         invoke  StdOut,ADDR error1
    6.         invoke  StdOut,ADDR lf
    7.         ret
    8.     .endif
    А как это в FASM - попроще делается?
     
  8. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    смотря как объявленны sHostName, error1, lf... в принцепе в самомпростом случае достаточно убрать ADDR и подключить макросы поддержки if
     
  9. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Freeman
    Как вот в Fasm - е этот ( invoke GetCL ... ) реализовать.
    Или как в Fasm - е взять указатель на заданный аргумент ком. строки?
     
  10. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    переписать на фасм masm32\M32LIB\getcl.asm
     
  11. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Freeman
    да, боюсь, у меня не хватет мощи на это :)
     
  12. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Точно так же, насколько я помню.
     
  13. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    выпей для храбрости
     
  14. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Freeman
    нехорошо смеяться в разделе BEGINNERS :)

    IceStudent
    Дак не хочет это собрать :dntknw:

    Код (Text):
    1. format PE GUI 4.0                    ; Создаем PE EXE
    2. entry start                      ; Точка входа - start
    3. include 'c:\fasmw\include\win32a.inc'
    4. include 'c:\fasmw\include\macro\masm.inc'        ; для assume
    5.  
    6. section '.data' data readable writeable executable   ; Секция данных и кода
    7.  
    8.  sHostName  db  256 dup(0)
    9.  
    10.  
    11. section '.code' code readable writeable executable   ; Секция данных и кода
    12. ;----------------------------------------------------------------------------------------
    13. start:                      ; Точка входа в программу
    14.     invoke  GetCL,1,sHostName   ; возьмем первый аргумент командной строки
    15.     cmp eax, 1      ; если нет ни одного аргумента выход
    16.     je  _m1     ; начинаем работать
    17.     ret         ; вывод сообщения о привилах использования      
    18. _m1:
    19.     ret
    20. section '.idata' import data readable writeable ; Секция импорта
    21.  
    22.  library kernel32,'KERNEL32.DLL'
    23.  include 'C:\fasmw\INCLUDE\APIA\kernel32.inc'
    такое пишет

    Код (Text):
    1. C:\_temp>c:\fasmw\fasm.exe C:\_temp\getCL_.asm
    2. flat assembler  version 1.67.8  (1212220 kilobytes memory)
    3. C:\_temp\getCL_.asm [14]:
    4.         invoke  GetCL,1,sHostName
    5. c:\fasmw\include\macro/proc32.inc [20] invoke [6]:
    6.     call [proc] }
    7. error: undefined symbol.
    8. C:\_temp>pause
     
  15. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    неужели только GetCommandLine() и больше ничего не изменилось?
     
  16. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    _sheva740
    Так ведь ты пытаешься вызвать подпрограмму из другого модуля. Либо включай сорец того модуля в фасмовый, либо делай последний как format ms coff для сборки obj'a и чей-нить линкер для сборки obj'a и masm32.lib.

    И вообще — зачем тебе фасм, не проще ли на масме писать?
     
  17. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    IceStudent
    да, если чесно, несколько процедур нашел писанными на fasm-е, хотел собрать старое и новое в кучу и поиграться. Большенство в суммарном, нарытом в инете, коде было на fasm - e.
    Других причин нет.