masm 2 fasm

Тема в разделе "WASM.BEGINNERS", создана пользователем lust, 10 июн 2011.

  1. lust

    lust New Member

    Публикаций:
    0
    Регистрация:
    14 окт 2007
    Сообщения:
    72
    Добрый день,

    сейчас вручную переписываю программку с masm в fasm (в последнем я нуб), и столкнулся с такой проблемой:
    Как работать в fasm c указателями на структуру?

    в masm код выглядит так:

    Код (Text):
    1. invoke  gethostbyname, [pServerName]
    2. mov     eax, [(hostent ptr [eax]).h_list]
    как это изящно изобразить в fasm, одной строчкой, например?
     
  2. rmka

    rmka Member

    Публикаций:
    0
    Регистрация:
    22 окт 2010
    Сообщения:
    108
    Код (Text):
    1. virtual at eax
    2.   .host   hostent
    3. end virtual
    4. mov  eax,[.host.h_addr_list]
     
  3. lust

    lust New Member

    Публикаций:
    0
    Регистрация:
    14 окт 2007
    Сообщения:
    72
    спасибо! не знал про такую фишечку.
     
  4. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Еще можно так:
    Код (Text):
    1. virtual at 0
    2. hostent hostent
    3. end virtual
    4.  
    5. mov eax,[eax+hostent.h_addr_list]
     
  5. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    А с учётом того, что в стандартных заголовках она объявлена, как struct, а не как struc можно и просто:
    Код (Text):
    1. mov eax,[eax+hostent.h_addr_list]
     
  6. vadak

    vadak New Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2010
    Сообщения:
    41
    Сбит с толку, помогите с кодом:
    Код (Text):
    1. .data
    2. site db 'google.com',0
    3. .code
    4. ...
    5. invoke gethostbyname,site
    6. invoke inet_ntoa,[eax+hostent.h_addr_list]
    Если я правильно понимаю, то h_addr_list указывает на массив адресов в сетевом порядке. inet_ntoa() возвращает не верный адрес, ну я так прошвырнулся по указателю в дампе и увидел что по смещению 44 находиться первый правильный адрес(google.com)
    Код (Text):
    1. invoke inet_ntoa,[eax+hostent.h_addr_list+44]
    ?
     
  7. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    vadak
    inet_ntoa возвращает ровно то, что ему было передано в качестве параметра.
    Они все правильные.