|
|
| Посл.отвђт | Сообщен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 |