Programación General > ASM (Ensamblador)
¿no Ensambla Este Codigo? :(
(1/1)
Rozor:
Hola, he estado codeando con masm32 y siendo correcta la sintaxis segun numentor y otros codes que he echo y me da error :S , me da error en las estructuras WSADATA y SOCKADDR_IN. Aver que se puede hacer gracias.
He lido varias veces post de asm en este foro, y desarrollado como por ejemplo cuando lo del bootstrap. Y hoy me decidi a postear :P
Error:
--- Código: Text --- Microsoft (R) Macro Assembler Version 6.14.8444Copyright (C) Microsoft Corp 1981-1997. All rights reserved. Assembling: C:\masm32\conexion.asmC:\masm32\conexion.asm(30) : error A2008: syntax error : wsaC:\masm32\conexion.asm(31) : error A2008: syntax error : sin_Assembly ErrorPresione una tecla para continuar . . .
El codigo fuente:
--- Código: Text --- .586P.MODEL FLAT, STDCALL include \masm32\include\wsock32.incinclude \masm32\include\kernel32.incinclude \masm32\include\user32.inc includelib \masm32\lib\wsock32.libincludelib \masm32\lib\kernel32.libincludelib \masm32\lib\user32.lib CrearConexion protoEnviarMensage protoError proto .DATA wsa WSADATA <> ; <--- ERROR Linea 30 sin SOCKADDR_IN <> ; <--- ERROR Linea 31 ip dq 0100007Fh port dd 9a02h buffsend db "#### barata", 0 cap db "Error", 0 txt db "Error no enviado", 0 cap2 db "Adios", 0 txt2 db "A funcado bien xDDD", 0 .DATA? sock dd ? .CONST protocolo dd 06h; IPPROTO_TCP familia dd 02h ; AF_INET stream dd 01h ; SOCK_STREAM sizesin dd 10h ; sizeof sockaddr_in make dd 101h ; MAKEWORD(1,1) wm_sock dd 464h; WM_SOCKET = WM_USER+100 f_connect dd 10h ; FD_CONNECT f_read dd 01h ; FD_READ f_close dd 20h ; FD_CLOSE f_all dd 31h ; Suma de los 3 .CODE Inicio: xor eax, eax call CrearConexion push 00h push offset cap push offset txt push 00h call MessageBoxA push sock call closesocket call WSACleanup push 00h call ExitProcess end Inicio CrearConexion proto push offset wsa push offset make call WSAStartup push offset protocolo push offset stream push offset familia call socket mov sock, eax push offset f_all push offset wm_sock push 00h push sock call WSAAsyncSelect mov sin.sin_family, offset familia mov sin.sin_port, offset puerto mov sin.sin_addr, offset ip push offset sizesin push offset sin push offset sock call connect je EnviarMensage jnz Error ret; w0w CrearConexion endp EnviarMensage proto push 00h push 15 push offset sendbuff push offset sock call send ret EnviarMensage endp Error proto push 00h push offset cap push offset txt push 00h call MessageBoxA push 00h call ExitProcess leave ret; w0w Error endp
Gracias.
Eternal Idol:
Esas estructuras no estan definidas en ninguno de los includes que usas. Estan en windows.inc y la segunda es con minusculas (sockaddr_in).
Averigua en la ayuda como incluir ese archivo.
Rozor:
Si perdonen por el post, tenia windows.inc y lo quite por que tenia fallo luego no me acorde y no me di cuenta jejejej, reinstale y compilo sin problemas.
Por cierto, el codigo arreglado, ya no me funciona pero a nivel ejecucion, he debugeado y todo va bien hasta "connect", hay falla no pillo el por que :S . ( no es culpa del servidor ).
--- Código: Text --- 586p.model flat, stdcalloption casemap:none include \masm32\include\wsock32.incinclude \masm32\include\kernel32.incinclude \masm32\include\user32.incinclude \masm32\include\windows.inc includelib \masm32\lib\wsock32.libincludelib \masm32\lib\kernel32.libincludelib \masm32\lib\user32.lib CrearConexion protoEnviarMensage protoError proto .data wsa WSADATA <> sin sockaddr_in <> ip db "127.0.0.1", 0 port dd 666 buffsend db "#### barata", 0 cap db "Error", 0 txt db "Error no enviado", 0 cap2 db "Adios", 0 txt2 db "A funcado bien xDDD", 0 .data? sock dd ? hand dd ? .const protocolo dd 06h; IPPROTO_TCP familia dd 02h ; AF_INET stream dd 01h ; SOCK_STREAM sizesin dd 10h ; sizeof sockaddr_in make dw 101h ; MAKEWORD(1,1) wm_sock dd WM_USER+100; WM_SOCKET = WM_USER+100 f_connect dd 10h ; FD_CONNECT f_read dd 01h ; FD_READ f_close dd 20h ; FD_CLOSE f_all dd 31h ; Suma de los 3 .code Inicio: xor eax, eax call CrearConexion push 00h push offset cap push offset txt push 00h call MessageBoxA push sock call closesocket call WSACleanup push 00h call ExitProcess CrearConexion proc push offset wsa push 101h call WSAStartup push 0 push SOCK_STREAM push AF_INET call socket mov sock, eax .if eax==INVALID_SOCKET call Error .endif push FD_READ+FD_WRITE+FD_CONNECT push offset wm_sock push offset hand push sock call WSAAsyncSelect mov sin.sin_family, 02h push 29ah call htons mov sin.sin_port, ax push offset ip call inet_addr mov sin.sin_addr, eax push sizeof sin mov eax, offset sin push eax push offset sock call connect .if eax==SOCKET_ERROR call Error .endif call EnviarMensage ret; w0w CrearConexion endp EnviarMensage proc push 00h push 15 push offset buffsend push offset sock call send ret EnviarMensage endp Error proc push 00h push offset cap push offset txt push 00h call MessageBoxA push 00h call ExitProcess leave ret; w0w Error endp end Inicio
Eternal Idol:
hand ... ¿Para que arrancas con sockets asincronos? Mejor hacelo funcionar con sincronos primero.
Navegación
Ir a la versión completa