.data .equ socketcall, 102 .equ sys_socket, 1 .equ sys_bind, 2 .equ sys_connect, 3 .equ sys_listen, 4 .equ sys_accept, 5 .equ sys_read, 3 .equ sys_write, 4 .equ AF_INET, 2 .equ SOCK_STREAM, 1 .equ IPPROTO_TCP, 6 .equ port, 6400 /* htons(6400) */ .equ ip, 0x0100007f /* localhost */ .bss .lcomm sockfd, 10 .lcomm stack, 4 .lcomm buffer, 4 .lcomm buffer_len, 256 .text .globl _start _start: nop movl %esp, stack # save stack pos subl $0x20,%esp /* int socket(int domain, int type, int protocol) ; */ movl $socketcall,%eax movl $sys_socket, %ebx movl $AF_INET,(%esp) movl $SOCK_STREAM,0x4(%esp) movl $IPPROTO_TCP,0x8(%esp) movl %esp,%ecx int $0x80 movl %eax, sockfd # save socket connect: /* (%esp) 4(%esp) 12(%esp) %eax %ebx %ecx %edx int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen) */ # movl $socketcall, %eax movw $AF_INET, 12(%esp) movw $port, 14(%esp) movl $ip, 16(%esp) movl %eax, (%esp) leal 12(%esp), %ebx movl %ebx,4(%esp) movl $16,8(%esp) movl $socketcall,%eax movl $sys_connect, %ebx int $0x80 read: # read(sock, buf, len) movl $sys_read, %eax #sys_read movl sockfd, %ebx movl $buffer, %ecx movl $buffer_len, %edx int $0x80 write: # write(stdout, buf, len) movl %eax, %edx #len movl $sys_write, %eax movl $1, %ebx movl $buffer, (%ecx) int $0x80 exit: movl $1, %eax movl $0, %ebx int $0x80