Пробую написать сервер на сокетах столкнулся с такой проблемой Код (Text): ; отрывок из моего кода проверки выкинул invoke WSAStartup,202h,wsaData invoke socket,AF_INET,SOCK_STREAM,0 mov [hSocket],eax mov [saddr.sin_family],AF_INET invoke htons,szPort mov [saddr.sin_port],ax ; в секции data wsaData WSADATA saddr sockaddr_in szPort dd 3333 hSocket dd ? Порт не конвертируется в Network-Byte-Order загружаю в Olly и там вместо htons стоит ntohs Что делаю не так ?
Странно в MSDN этого не описанно: http://msdn.microsoft.com/en-us/library/ms738557(VS.85).aspx http://msdn.microsoft.com/en-us/library/ms740075(VS.85).aspx
Ты на фасме кодишь? попробуй написать [szPort] Новички, бросайте нафуй фасм, не ломайте себе мозг и судьбы - кодьте как нормальные белые люди - на масме
MSoft если для порта согласен. GoldFinch прав. но в 32-х битной среде, чтобы избежать появления префиксов, лучше xchg, для портов, но если не ошибаюсь, ip тоже надо разворачивать - там то тогда bswap eax.
MSoft Спасибо точно блин забыл про квадратные скобки Ну нет нафуй ваш masm в топку ! Надоели его офсеты и т.д. я начинал кодить потом попробывал на fasm и теперь пока не собираюсь переходить на masm
всех фасмщиков в детстве напугал большой оффсет с тех пор они с ним не связываются П.С.: если б картинку не приложил, тут бы еще доооолго гадали...
ну хз, я сразу обратил внимание, то что это фасм (квадратные скобки есть при обращении к переменным), посмотрел параметр и всё стало ясно
MSoft Что-то я поспешил не пашет все равно после Код (Text): invoke htons,[szPort] Если после этого делаю Код (Text): xchg ah,al Но если посмотреть список активных портов в системе Решил попробывать сделать так mov eax,[szPort] xchg ah,al Olly показывает а Active Ports нормально выдает порт 3333 заместо 1293 Если просто сделать mov eax,[szPort] Olly правильно показывает а Active Ports 1293 Короче я совсем запутался кому верить хз )))
Вообщем вопрос остается открытым почему не пашет WinAPI Код (Text): htons Да конечно можно средствами asm сделать но мне интересно почему htons не пашет Всё равно фасм не брошу, потому что он хороший!
Все правильно у тебя работает функция. Твой порт в хекс-представлении: 3333 = 0D05h! После обмена байт он равен 050Dh. Что и видно на рисунках в ольке!