· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.NETWORKS —› gethostbyname

Посл.отвђт Сообщенiе


Дата: Июл 12, 2004 22:07:23

Всем привет!
Заранее извиняюсь, за ламерский вопрос. В статье "Сокеты M$ Windows" by Bumblebee такие строки:
        push    offset server                   ; адpес стpоки ('oeee.net')
        call    gethostbyname                   ; получаем стpуктуpу hostent
        cmp     eax,0                           ; если ошибка:
        je      exitQsocksC                     ; закpываем сокет, очистка и выход
                                                ; eax содеpжит указатель на HOSTENT

        mov     eax,dword ptr [eax+HOSTENT_IP]  ; получаем указатель на IP в HOSTENT
        mov     eax,dword ptr [eax]             ; получаем указатель на IP
        mov     dword ptr [sockaddr.sin_addr],eax ; вот и все!

так вот, на Win2k после gethostbyname по адресу [eax+HOSTENT_IP] действительно находится указатель на IP, а в XP там же находится 0 (в результате предложение отправлять/не отправлять отчет), а сам указатель находится на 4 байта ниже. Приходится проверять:
        mov     edx,dword ptr [eax+10h]
        test	edx,edx
        jnz	this_is_2k
        mov     edx,dword ptr [eax+14h]
        test	edx,edx
        jz	hell_knows_what
this_is_2k:
        mov     eax,dword ptr [edx]

Это общеизвестный факт, или я где-то проглючил?


Дата: Июл 12, 2004 22:50:50

vinnie_pooh
Вот кусок кода из серверного приложения, которое нормально работает на 9x/NT/XP:
if((Hostent = gethostbyname(szComputerName)) != NULL)
  IPAddress = *(long*)*Hostent->h_addr_list;

VC++ генерирует следующий код:
mov eax,[eax + 0Ch]
mov eax,[eax]
mov eax,[eax]
mov IPAddress,eax
Делайте выводы.


Дата: Июл 12, 2004 23:12:08

Ясно. Указатель на указатель на указатель ... в доме, который построил Джек :=)
Спасибо!


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.063