Socket con nasm... al fin lo logre

Iniciado por proxy_lainux, Julio 20, 2013, 05:11:10 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Julio 20, 2013, 05:11:10 PM Ultima modificación: Febrero 08, 2014, 05:28:21 PM por Expermicid
pues lo logre, aun no se como usar estructuras en nasm pero logre hacerlo funcionar

Código: asm
[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


Aunque admito que hacerlo en fasm es mucho mas sencillo

Código: asm
format PE console 4.0

entry start

include 'include\win32a.inc'

section '.data' data readable writable

wsadata WSADATA
saddr sockaddr_in
sock_size = $-saddr
sock dd ?
sin_addr dd ?
sin_port dd ?

section '.code' code readable executable
start:

invoke WSAStartup, 0202h, wsadata
invoke socket, AF_INET, SOCK_STREAM, 0

mov[sock], eax
mov[saddr.sin_family], AF_INET
mov[saddr.sin_port], 0xB922
mov[saddr.sin_addr], 0x0100007F

invoke connect, [sock], saddr, sock_size

invoke ExitProcess,0

section '.idata' import data readable writeable

library kernel, 'KERNEL32.DLL',\
        winsock, 'WSOCK32.DLL'

import kernel,\
       ExitProcess, 'ExitProcess'

import winsock,\
       WSAStartup, 'WSAStartup',\
       WSACleanup, 'WSACleanup',\
       socket, 'socket',\
       connect, 'connect',\
       sendto, 'sendto',\
       closesocket, 'closesocket'           

Excelente trabajo Bro!!
Felicitaciones!


Muy bueno grimoire. Lo agrego al indice y cierro el post de la duda que habias tenido ;)

Saludos