Autor
|
Tema: se compila el socket sin errores pero no se conecta, ayuda (Leído 7,694 veces)
|
Belial & Grimoire
Desconectado
Mensajes: 559
Tea_Madhatter
|
hola pues despues de buscar y reintentar, logre crear el codigo y que se compile sin errores, se cargan las siguientes librerias en la pantalla de depuracion de visual studio, el cual lo tengo configurado como x64 'Project1.exe' (Win32): 'C:\Windows\System32\ntdll.dll' cargado. Símbolos cargados. 'Project1.exe' (Win32): 'C:\Windows\System32\kernel32.dll' cargado. Símbolos cargados. 'Project1.exe' (Win32): 'C:\Windows\System32\KernelBase.dll' cargado. Símbolos cargados. 'Project1.exe' (Win32): 'C:\Windows\System32\ws2_32.dll' cargado. Símbolos cargados. 'Project1.exe' (Win32): 'C:\Windows\System32\msvcrt.dll' cargado. Símbolos cargados. 'Project1.exe' (Win32): 'C:\Windows\System32\rpcrt4.dll' cargado. Símbolos cargados. 'Project1.exe' (Win32): 'C:\Windows\System32\nsi.dll' cargado. Símbolos cargados. pero no se conecta, alguien podria checar el codigo y decirme que podria estar mal, por favor extrn LoadLibraryA:PROC extrn ExitProcess:PROC extrn GetProcAddress:PROC .data wsdll db "ws2_32.dll",0 wsaddr dq ? WStp db "WSAStartup",0 wtaddr dq ? wsadata db 400 dup (0) sock db "socket",0 sockaddr dq ? conn db "connect",0 conaddr dq ? sen db "send",0 senaddr dq ? buf db "hola mundo",0 .code Start proc push rbp mov rbp, rsp sub rsp, 20h mov rcx, offset [wsdll] call LoadLibraryA mov[wsaddr], rax mov rdx, offset[WStp] mov rcx, [wsaddr] call GetProcAddress mov[wtaddr], rax lea rdx, wsadata push rdx push 2h call [wtaddr] mov rdx, offset[sock] mov rcx, [wsaddr] call GetProcAddress mov[sockaddr], rax push 0 push 1 push 2 call [sockaddr] mov[sockaddr], rax mov rdx, offset[conn] mov rcx, [wsaddr] call GetProcAddress mov[conaddr], rax push 16 mov rax, 0100007FB9220002h push rax push[sockaddr] call[conaddr] mov rdx, offset[sen] mov rcx, [wsaddr] call GetProcAddress mov[senaddr], rax mov r9, 0 mov r8, 50 mov rdx, offset[buf] mov rcx,[sockaddr] call[senaddr] mov rsp, rbp pop rbp xor ecx, ecx call ExitProcess Start endp End
|
|
« Última modificación: 10 Agosto 2013, 20:10 pm por Belial & Grimoire »
|
En línea
|
. 
|
|
|
Eternal Idol
Kernel coder
Moderador
 
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
Tenes que depurar TU codigo.
¿Convencion de llamada de x86?
lea rdx, wsadata push rdx push 2h call [wtaddr]
push 0 push 1 push 2 call [sockaddr]
|
|
« Última modificación: 10 Agosto 2013, 21:37 pm por Eternal Idol »
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Belial & Grimoire
Desconectado
Mensajes: 559
Tea_Madhatter
|
que depurador me recomiendas?, es que uso ollydbg pero todavia no se actualiza para analizar aplicaciones de 64 bits, ya corregi el codigo y creo va funcionando cada vez mejor ahora ya se cargan mas librerias 'Project1.exe' (Win32): 'C:\Users\grimoire\Documents\Visual Studio 2012\Projects\Solution1\x64\Release\Project1.exe' cargado. Símbolos cargados. 'Project1.exe' (Win32): 'C:\Windows\System32\ntdll.dll' cargado. Símbolos cargados. 'Project1.exe' (Win32): 'C:\Windows\System32\kernel32.dll' cargado. Símbolos cargados. 'Project1.exe' (Win32): 'C:\Windows\System32\KernelBase.dll' cargado. Símbolos cargados. 'Project1.exe' (Win32): 'C:\Windows\System32\ws2_32.dll' cargado. Símbolos cargados. 'Project1.exe' (Win32): 'C:\Windows\System32\msvcrt.dll' cargado. Símbolos cargados. 'Project1.exe' (Win32): 'C:\Windows\System32\rpcrt4.dll' cargado. Símbolos cargados. 'Project1.exe' (Win32): 'C:\Windows\System32\nsi.dll' cargado. Símbolos cargados. 'Project1.exe' (Win32): 'C:\Windows\System32\mswsock.dll' cargado. Símbolos cargados. 'Project1.exe' (Win32): 'C:\Windows\System32\user32.dll' cargado. Símbolos cargados. 'Project1.exe' (Win32): 'C:\Windows\System32\gdi32.dll' cargado. Símbolos cargados. 'Project1.exe' (Win32): 'C:\Windows\System32\lpk.dll' cargado. Símbolos cargados. 'Project1.exe' (Win32): 'C:\Windows\System32\usp10.dll' cargado. Símbolos cargados. 'Project1.exe' (Win32): 'C:\Windows\System32\imm32.dll' cargado. Símbolos cargados. 'Project1.exe' (Win32): 'C:\Windows\System32\msctf.dll' cargado. Símbolos cargados. 'Project1.exe' (Win32): 'C:\Windows\System32\WSHTCPIP.DLL' cargado. Símbolos cargados. El programa '[656] Project1.exe' terminó con código 0 (0x0). pero sigue sin funcionar, visual studio trae un debuggin por defecto, pero por mas breaks que pongo no me marca el error, ni violacion de acceso, ni nada, continua la ejecucion normalmente extrn LoadLibraryA:PROC extrn ExitProcess:PROC extrn GetProcAddress:PROC .data wsdll db "ws2_32.dll",0 wsaddr dq ? WStp db "WSAStartup",0 wtaddr dq ? wsadata db 400 dup (0) sock db "socket",0 sockaddr dq ? conn db "connect",0 conaddr dq ? sen db "send",0 senaddr dq ? buf db "hola mundo",0 .code Start proc push rbp mov rbp, rsp sub rsp, 20h mov rcx, offset [wsdll] call LoadLibraryA mov[wsaddr], rax mov rdx, offset[WStp] mov rcx, [wsaddr] call GetProcAddress mov[wtaddr], rax lea rdx, wsadata mov rcx, 2h call [wtaddr] mov rdx, offset[sock] mov rcx, [wsaddr] call GetProcAddress mov[sockaddr], rax mov r8, 0h mov rdx, 1h mov rcx, 2h call [sockaddr] mov[sockaddr], rax mov rdx, offset[conn] mov rcx, [wsaddr] call GetProcAddress mov[conaddr], rax mov rsi, 16h mov rdi, 0100007FB9220002h mov rdx,[sockaddr] call[conaddr] mov rdx, offset[sen] mov rcx, [wsaddr] call GetProcAddress mov[senaddr], rax mov r9, 0h mov r8, 50h mov rdx, offset[buf] mov rcx,[sockaddr] call[senaddr] mov rsp, rbp pop rbp xor ecx, ecx call ExitProcess Start endp End
|
|
|
En línea
|
. 
|
|
|
Eternal Idol
Kernel coder
Moderador
 
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
WinDbg. Tenes que ver que retornan las funciones, para algo estan (mira rax despues de cada call y si no funciono !gle). connect no funciona ni funcionara nunca, rcx tiene que tener el socket y no lo tiene, segui mirando y presta mas atencion, son muy pocas lineas ...
int connect( _In_ SOCKET s, _In_ const struct sockaddr *name, _In_ int namelen );
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
xv0
Desconectado
Mensajes: 1.031
|
Recuerda que en Windows y 64 bits se sige el siguiente orden, rcx, rdx, r8 y r9. Ademas no estas pasando la estructura sockaddr_in como puntero.
Un saludo.
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
 
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
Y para colmo todo esto ya esta aca: http://foro.elhacker.net/asm/problema_con_masm_para_64bits-t396294.0.htmlBelial & Grimoire no abras mas hilos sobre el mismo tema, deben haber mas de 5 ya ...
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Belial & Grimoire
Desconectado
Mensajes: 559
Tea_Madhatter
|
hola disculpa, si quieren eliminen este o el tema anterior, solo hay 2 mas, los otros eran sobre nasm, el pirmero era porque no lograba entender porque no funciona getprocaddress, el segundo es el de masm, pero como crei que ya lo habia logrado ya que no me aparecian errores, decidi abrir uno nuevo pensando que era algun fallo de otro tipo, lo siento ya verifique el codigo y tienen razon olvide cambiar lo de rcx.. r9..., olvide que habia modificado eso y lo deje de esa manera, bueno al principio lo tenia asi mov r8, 16h mov rdx, 0100007FB9220002h mov rcx,[sockaddr] call[conaddr] en nasm con 32 bits, me habia funcionado de esta manera push 0x0100007F push 0xB9220002 mov esi, esp push byte 16 push esi push dword [soadd] call [conaddr]
tambien de esta otra forma sub esp, 416 mov word [ebp-416], 0x0002 mov word [ebp-414], 0xB922 mov dword [ebp-412], 0x0100007F push byte 16 lea eax, [ebp-416] push eax push dword [soadd] call [conaddr]
pero por la syntaxis de masm, no me lo permite, con push me aparece error,con rcx en socket me aparece este mensaje de error Primera excepción en 0x000007FEFCCE5D18 (mswsock.dll) en Project1.exe: 0xC0000005: Infracción de acceso al leer la ubicación 0xFFFFFFFFFFFFFFFF. (0x0). por eso, habia cambiado el codigo, porque de la otra forma me compilo bien una disculpa nuevamente por abrir otro hilo, y espero poder terminar, si el error esta en connect, almenos ya se que me falta poco salu2
|
|
|
En línea
|
. 
|
|
|
xv0
Desconectado
Mensajes: 1.031
|
Pero tienes que pasar la estructura como puntero. mov rbx, 0100007FB9220002h push rbx mov rdx, rsp
Un saludo.
|
|
|
En línea
|
|
|
|
Belial & Grimoire
Desconectado
Mensajes: 559
Tea_Madhatter
|
ok gracias pues investigue mas e hice lo que mencionaron, modificando otras cosas, y el codigo carga las librerias y no aparece ningun error, pero sigue sin funcionar  cualquier sugerencia se los agradezco extrn LoadLibraryA:PROC extrn ExitProcess:PROC extrn GetProcAddress:PROC .data wsdll db "ws2_32.dll",0 wsaddr dq ? WStp db "WSAStartup",0 wtaddr dq ? wsadata db 400 dup (0) sock db "socket",0 sockaddr dq ? conn db "connect",0 conaddr dq ? sen db "send",0 senaddr dq ? buf db "hola mundo",0 .code Start proc and rsp,-16 sub rsp,4*8 mov rcx, offset wsdll call LoadLibraryA mov wsaddr, rax mov rdx, offset WStp mov rcx, wsaddr call GetProcAddress mov wtaddr, rax lea rdx, wsadata mov rcx, 2h call wtaddr mov rdx, offset sock mov rcx, wsaddr call GetProcAddress mov sockaddr, rax mov r8, 0h mov rdx, 1h mov rcx, 2h call sockaddr mov sockaddr, rax mov rdx, offset conn mov rcx, wsaddr call GetProcAddress mov conaddr, rax mov r8, 16h mov rbx, 0100007FB9220002h push rbx mov rdx, rsp mov rcx, sockaddr call conaddr mov rdx, offset sen mov rcx, wsaddr call GetProcAddress mov senaddr, rax mov r9, 0h mov r8, 50h mov rdx,offset buf mov rcx,sockaddr call senaddr xor ecx, ecx call ExitProcess Start endp End
|
|
« Última modificación: 11 Agosto 2013, 04:18 am por Belial & Grimoire »
|
En línea
|
. 
|
|
|
Eternal Idol
Kernel coder
Moderador
 
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
Si, son todos de lo mismo, el objetivo del codigo es el mismo ... ("logre un socket en nasm jeje" , "no entiendo un error debido a la sección data " y mas).
¿No seria muchisimo mejor usar la estructura sockaddr_in?
struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; };
Para sin_port podes usar la funcion htons y para sin_addr inet_addr.
0:000> dw @rdx @rdx + 2 00000000`0012ff28 0002 b922
sin_family = 2 sin_port = b922 = 22B9 little endian = 8889 decimal
0:000> dd @rdx + 4 @rdx + c 00000000`0012ff2c 0100007f 00000000 00000000 sin_addr = 7f000001 = 127.0.0.01 sin_zero = 8 ceros como debe ser
¿Que tamaño tiene la estructura sockaddr_in? 16 si, 16 bytes en decimal, 10h en hexadecimal.
No funciona el codigo que te dejo cpu2.
ws2_32!connect llama a mswsock!WSPConnect y esta a mswsock!SockDoConnect que retorna lo que despues se pondra en Last Error (10047).
Termina pasando esto: mswsock!SockDoConnect+0x124: movzx eax,word ptr [r13] ds:00000000`0012ff28=0000 mswsock!SockDoConnect+0x129: cmp dword ptr [rbx+14h],eax ds:00000000`02081484=00000002 mswsock!SockDoConnect+0x12c: jne mswsock!SockDoConnect+0x158 (000007fe`fc50a466) [br=1] mswsock!SockDoConnect+0x158: mov edi,273Fh
¿Que quiere decir? Compara AF_INET (2) con tu parametro y le da diferente (AF_UNSPEC = 0). Por eso si hicieras:
0:000> !gle LastErrorValue: (WinSock) 0x273f (10047) - Se ha utilizado una dirección incompatible con el protocolo solicitado.
¿La razon? Facil, connect te sobreescribe todos los valores de tu estructura ... cuando llama a:
int WSPConnect( _In_ SOCKET s, _In_ const struct sockaddr *name, _In_ int namelen, _In_ LPWSABUF lpCallerData, _Out_ LPWSABUF lpCalleeData, _In_ LPQOS lpSQOS, _In_ LPQOS lpGQOS, _Out_ LPINT lpErrno );
La pila es libre de ser modificada, si queres seguir trabajando con la pila reservate espacio al principio y pone la estructura ahi.
Sino bien sencillo en data: in_addr dq 0100007FB9220002h
y en code: mov r8, 10h mov rdx, offset in_addr mov rcx, sockaddr call conaddr
PD. and rsp,-16 sub rsp,4*8 ¿De verdad? ¿En serio? Necesitas 5000 intentos para hacer funcionar este codigo tan chico y pones cosas asi ininteligibles ...
|
|
« Última modificación: 11 Agosto 2013, 11:20 am por Eternal Idol »
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
se me conecta en una red wpa2 pero despues me pide usuario i contraseña ayuda
Hacking Wireless
|
ibrahim07
|
1
|
2,971
|
3 Febrero 2013, 20:25 pm
por zydas
|
|
|
¿Programa en c++ compila correctamente, pero se cuelga al correr?
Programación C/C++
|
erikat
|
3
|
4,199
|
4 Diciembre 2013, 12:22 pm
por Eternal Idol
|
|
|
Duda C++. Compila pero no corre.
Programación C/C++
|
Gaspi
|
9
|
4,560
|
20 Febrero 2015, 20:58 pm
por Gaspi
|
|
|
Compila pero no se ejecuta! Ayuda por favor.
Programación C/C++
|
durindemoria
|
7
|
3,975
|
9 Diciembre 2015, 23:42 pm
por class_OpenGL
|
|
|
matriz 5*5 no me da error pero no compila
« 1 2 »
Programación C/C++
|
creiko
|
11
|
5,454
|
29 Mayo 2016, 00:04 am
por creiko
|
|