Estructura de datos en NASM y/o MASM

Iniciado por Rozor, 16 Septiembre 2007, 22:37 PM

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

Rozor

Hola, la duda es en nasm o masm como se tratan a las estructuras.

Por que en MASM haciendo invoke a sockaddr_in por ejemplo, lo metes como offset pero si lo hacemos metiendo en pila etc... como se manipularia?



MASM:

  mysock sockaddr_in <>

luego

  mov mysock.sin_family, 0x04  ; AF_INET

pero luego al meterlo en la pila para llamar a connect no sirve

push 0x00
push offset mysock
push offset sock
call connect  ; o direccion hardcoreada

Gracias.
out in the streets they call it murder....

nts94

Has probado a usar addr en vez de offset?

Иōҳ

#2
Cita de: nts94 en 11 Julio 2011, 13:26 PM
Has probado a usar addr en vez de offset?

exactamente cuando haces referencia al puntero de una struct tienes que usar la directiva addr, ya que offset no "funciona" en esos casos, te pego una parte del code, almenos el cliente.

Código (asm) [Seleccionar]
.data?
S1        SOCKET ?
S2        SOCKET ?
Sin1      sockaddr_in <>
Sin2      sockaddr_in <>
WSAData   WSADATA <>
Temp      DD ?


.code
start:

invoke  WSAStartup, 0101h, ADDR WSAData
invoke  socket, PF_INET, SOCK_STREAM, IPPROTO_TCP
mov     S1, eax
mov     ax, AF_INET
mov     Sin1.sin_family, ax
xor     eax, eax
mov     Sin1.sin_addr, eax
invoke  inet_addr, addr ServerIPAddress
mov     Sin1.sin_addr, eax
invoke  htons, ListeningPort                               ; listen to a specified port
mov     Sin1.sin_port, ax

;invoke  bind, S1, ADDR Sin1, SIZEOF sockaddr_in


;invoke  closesocket, S2
;mov     eax, SIZEOF sockaddr_in
;mov     Temp, eax
;invoke  accept, S1, ADDR Sin2, ADDR Temp
;mov     S2,eax


invoke  connect, S1, addr Sin1, SIZEOF Sin1

mov     TempVar, SIZEOF SendBuff
invoke send, S1, addr SendBuff, TempVar, 0


creo que te daría la idea ._.

Nox.
Eres adicto a la Ing. Inversa? -> www.noxsoft.net