yeeeeeah!! lo logre
les dejo el codigo por si a alguien mas le sirve y por si lo pierdo se que aqui estara, solo me falta el servidor pero espero se me facilite un poco mas
y gracias al consejo de cpu2 de usar direcciones en vez de usar estructuras logre hacerlo
[BITS 32]
section .data
wsdll: db 'ws2_32.dll',0
wsaddr: dd '0xFFFFFFFF'
Getpc: dd '0xFFFFFFFF'
WStp: db 'WSAStartup',0
WSaddr: dd '0xFFFFFFFF'
WSD: dd 'WSADATA',0
saveWSA: dd '0xFFFFFFFF'
soc: db 'socket',0
soadd: dd '0xFFFFFFFF'
conn: db 'connect', 0
conaddr: dd '0xFFFFFFFF'
sen: db 'send', 0
sendadd: dd '0xFFFFFFFF'
res1: db "WSAStartup %d", 10, 0
res2: db "Socket %d", 10, 0
res3: db "connect %d", 10, 0
res4: db "send %d", 10 ,0
sre: db "hola mundo",0
section .bss
sn resb 10
section .text
global _WinMain@16
extern _ExitProcess@4
extern _LoadLibraryA@4
extern _GetProcAddress@8
extern _printf
extern _WSAStartup@8
_WinMain@16:
xor eax, eax
push wsdll
call _LoadLibraryA@4
mov [wsaddr], eax
push WStp
push dword [wsaddr]
call _GetProcAddress@8
mov [Getpc], eax
push WSD
push 0x202
call [Getpc]
mov [saveWSA], eax
cmp dword [saveWSA], -1
jne mns1
je erro
mns1:
push dword [saveWSA]
push res1
call _printf
push soc
push dword [wsaddr]
call _GetProcAddress@8
mov [Getpc], eax
push 6
push 1
push 2
call [Getpc]
mov [soadd], eax
push dword [soadd]
push res2
call _printf
push conn
push dword [wsaddr]
call _GetProcAddress@8
mov [conaddr], eax
push dword [conaddr]
push res3
call _printf
push 0x0100007F
push 0xB9220002
mov esi, esp
push byte 16
push esi
push dword [soadd]
call [conaddr]
erro:
push 0
call _ExitProcess@4
Habia leido sobre poner sockaddr_in en nasm pero no supe como usar estructuras asi que puse directamente la ip, el puerto y el formato de direccion (AF_INET) lo guarde en ESI, despues reserve 16 bytes de espacio para la longitud de sockaddr_in y listo, meti en la pila la longitud, ESI, el descriptor e hice un call a connect
aun me confundo en la posicion de las cosas, habia puesto el descriptor socket al inicio pero iba antes de connect
bueno, espero a alguien mas le ayude esto que si me costo trabajo, seguire estudiando todavia mas sobre asm
solo como ultima peticion, alguien me podria explicar bien el funcionamiento de ESI y EDI
funciona para concatenar o copiar?, por ejemplo
lo que haya en esi se concatena con edi
esi = 1
edi = 2
mov eax, edi
eax = 12
es algo asi?
se que significa source index y destination index y en este caso me ayudo como registro para salvar lo que habia en esp, pero muy bien aun no lo entiendo, podrian explicarme y si se puede con un ejemplo porfavor
gracias y salu2
Pues nada, me alegro de que lo hayas conseguido.
Cita de: Belial & Grimoire en 20 Julio 2013, 22:05 PMy gracias al consejo de cpu2 de usar direcciones en vez de usar estructuras logre hacerlo
Me parece que no entiendes muy bien lo que te explique, se nota que vienes de un lenguaje de alto nivel. Bueno ya lo entenderas.
Sobre esi y edi no se concatenan de esa forma de donde sacaste eso? simplemente copiaria 0x00000002 a eax.
Donde si tabrajan juntas esi y edi son con instrucciones especiales de manejo de cadenas.
Y sobre source index y destination index no te entendi muy bien, te refieres al stack?
Un saludo
jeje lo siento, no me fije que puse direcciones en ves de valores, o en otras palabras, ip, puerto y AF_INET
es que cuando buscaba informacion lei que alguien decia que ESI y EDI eran continuos, asi que imagine que lo que se ponia en uno, se concatenaba al otro, pero ya despues lei en otro lugar que era algo parecido a esto
buffer1[i++] = buffer2[j++]
por eso me confundo, porque ya no seria concatenar, seria copiar y veo que muchos usan
push esi
push edi
e incluso veo que lo usan mucho con ecx
push esi
push edi
push ecx
por eso quisiera saber cual es el proposito, de esi y edi
Cita de: Belial & Grimoire en 20 Julio 2013, 23:46 PMpor eso me confundo, porque ya no seria concatenar, seria copiar y veo que muchos usan
push esi
push edi
e incluso veo que lo usan mucho con ecx
push esi
push edi
push ecx
por eso quisiera saber cual es el proposito, de esi y edi
Estas cargando los valores de dichos registros al stack, eso se acerca mas a concatenar.
Ejemplo, si esi vale 0x02 y edi 0x03.
push esi
push edi
Concatenas esto 0x0000000200000003, espero que lo entiendas.
Cita de: Belial & Grimoire en 20 Julio 2013, 23:46 PMpor eso quisiera saber cual es el proposito, de esi y edi
Te invito a la chincheta de documentacion, y que te mires el manual de AMD o Intel, yo tengo a mano el de AMD, en la pagina 31 y 32 del tomo numero 1, estan escritos los usos que tiene cada registro, esi y edi tienen el mismo proposito solo que tienen una diferencia.
Un saludo.