Написал код, который поидее должен быть правильным, но что-то не сраюатывает. Походу в функции recv, хоть всё делал со справочником, смотрел примеры и т.д. Код (Text): .386 .model flat, stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\ws2_32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\ws2_32.lib .data hinst dd ? wsd WSADATA <?> sockhan dd ? sa sockaddr_in <?> serv_addr db 'wasm.ru',0 send_text db 'GET /all.php?mode=art HTTP/1.1',0ADh, 'Host: oko.by',0ADh, 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5',0ADh, 'Accept: text/html',0ADh, 'Connection: close',0ADh,0 recv_text db 256 dup(?) ; ------------------------------------------------------------------------- ; Messages ; ------------------------------------------------------------------------- mess_p dd ? ; Óêàçàòåëü íà òåêñò error1 db 'initializing error',0 error2 db 'create socket error',0 error3 db 'can not get server address',0 error4 db 'can not connect to the server',0 error5 db 'sending failed',0 .code start: invoke GetStdHandle,STD_OUTPUT_HANDLE mov hinst,eax xor eax,eax mov ax,0202h invoke WSAStartup,eax,offset wsd cmp eax,0 jnz _error1 invoke socket,AF_INET,SOCK_STREAM,0 cmp eax,-1 jz _error2 mov sockhan,eax mov sa.sin_family,AF_INET invoke htons,80 ; Ôóíêöèÿ ïîëó÷åíèÿ ïîðòà â ñåòåâîì ôîðìàòå mov sa.sin_port,ax ; Çàïèñûâàåì ïîóë÷åííîå çíà÷åíèå invoke gethostbyname,offset serv_addr cmp eax,0 jz _error3 mov eax,[eax+12] mov eax,[eax] mov sa.sin_addr,eax invoke connect,sockhan,offset sa,sizeof sa cmp eax,0 jnz _error4 ; Îòïðàâëÿåì áàéòû íà ñåðâåð invoke send,sockhan,offset send_text,sizeof send_text,0 cmp eax,SOCKET_ERROR jz _error5 invoke recv,sockhan,offset recv_text,256,0 ; Ïðè óñïåøíîì èñõîäå, âîçâðàùàåò êîëè÷åñòâî ïîëó÷åííûé áàéò ; --> eax invoke WriteConsole,hinst,offset recv_text,20,0,0 jmp _exit _error5: mov mess_p,offset error5 jmp _cr_text _error4: mov mess_p,offset error4 jmp _cr_text _error3: mov mess_p,offset error3 jmp _cr_text _error2: mov mess_p,offset error2 jmp _cr_text _error1: mov mess_p,offset error1 _cr_text: invoke lstrlen,mess_p invoke WriteConsole,hinst,mess_p,eax,0,0 _exit: invoke closesocket,sockhan invoke CloseHandle,hinst invoke ExitProcess,0 end start код постарался сделать максималдьно читабельным...
код должен отправить простой гет запролс на васм и получить ответ. Полученный ответ вывести в консоль.
сделал так Код (Text): invoke recv,sockhan,offset recv_text,256,0 ; Ïðè óñïåøíîì èñõîäå, âîçâðàùàåò êîëè÷åñòâî ïîëó÷åííûé áàéò ; --> eax invoke WSAGetLastError запустил в отладчике. Ф-ия recv возвращает 0, (должна кол-во аолученных файт) и WSAGetLastError тоже нуль. смотрел в отладчике
изменил на Код (Text): send_text db 'GET /all.php?mode=art HTTP/1.1',0Ah, 'Host: oko.by',0Ah, 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5',0Ah, 'Accept: text/html',0Ah, 'Connection: close',0Ah,0 всё равно не работает... взгляните на код целиком, кто разбирается в сетевом программировании
точнее атк: Код (Text): send_text db 'GET /all.php?mode=art HTTP/1.1',0Ah, 'Host: wasm.ru',0Ah, 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5',0Ah, 'Accept: text/html',0Ah, 'Connection: close',0Ah,0 но дело не в отправляемом запросе, а в коде
сам же соглашаешься, что в переводе строки участвует два байта, а фигачишь один send_text db 'GET /all.php?mode=art HTTP/1.1',0Ah,0Dh, 'Host: wasm.ru',0Ah,0Dh, 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5',0Ah, 'Accept: text/html',0Ah,0Dh, 'Connection: close',0Ah,0 включи сниффер и посмотри че там у тебя функция send передает
к сведению ТС запись 0XXh определяет ОДИН байт так как по определению меньше 100h, которое в байт не помещается и требует слова (2х байтов) для указания что число меньшее 100h записывается как слово добавляют WORD PTR