-
Notifications
You must be signed in to change notification settings - Fork 2
/
net.asm
executable file
·194 lines (163 loc) · 3.9 KB
/
net.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; net.asm
;;
;; © 2013 David J. Goehrig <[email protected]>
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; tcp selects a SOCK_STREAM
%macro tcp 0
literal 1
arg2
%endmacro
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; udp selects a SOCK_DGRAM
%macro udp 0
literal 2
arg2
%endmacro
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; creates a socket and leave fd on top of stack
%macro create_socket 0
literal 2 ; PF_INET
arg1
literal socket ; socket syscall
os ; fd on tos
%endmacro
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; flags the socket address as reuseable, use before socket_bind
%macro reuse_addr 0
jmp .skip ; give us an int to work with inline
.flag: dd 1
.skip: literal 4 ; sizeof .flag
arg5
data .flag ;
arg4
literal 4 ; SO_REUSEADDR
arg3
literal 0xffff ; SOL_SOCKET
arg2
arg1 ; fd off of tos
literal setsockopt ; setsockopt syscall
os
%endmacro ; tos 0 if successful
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; binds a socket to a given address, assumes IPv4
%macro bind_socket 0
literal 16 ; sizeof sockaddr
arg3
arg2 ; sockaddr tos
arg1 ; fd nos
literal bind
os
%endmacro ; tos 0 if successful
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; activates a inbound socket connection on the bound port, 255 connections max
%macro listen_socket 0
literal 255 ; backlog
arg2
arg1 ; fd on tos
literal listen
os
%endmacro
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; connects the socket to the remote address
%macro connect_socket 0
literal 16 ; sizeof sockaddr
arg3
arg2 ; sockaddr tos
arg1 ; fd nos
literal connect
os
%endmacro
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; sends data to a socket, use for udp
%macro send_to_socket 0
literal 16
arg6
arg5 ; sockaddr tos
literal 0
arg4 ; no flags
arg3 ; length
arg2 ; buffer
arg1 ; fd
literal sendto
os
%endmacro
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; receive data from a socket, use for udp
%macro recv_from_socket 0
jmp .skip
literal 0 ; null addrlen
arg6
literal 0 ; null addr
arg5
literal 0 ; no flags
arg4
arg3 ; length tos
arg2 ; buffer nos
arg1 ; fd
literal recvfrom
os
%endmacro
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; sends data to a bound socket, currently doesn't support OOB
%macro send_socket 0
literal 0
arg4
arg3 ; length tos
arg2 ; buffer nos
arg1 ; fd
literal send
os
%endmacro
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; receives data from a bound socket, currently doesn't support OOB
%macro recv_socket 0
literal 0
arg4
arg3 ; length tos
arg2 ; buffer nos
arg1 ; fd
literal recv
os
%endmacro
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; write data to a socket (or fd)
%macro write_socket 0
arg3 ; length tos
arg2 ; buffer nos
arg1 ; fd
literal write
os
%endmacro
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; read data from a socket (or fd)
%macro read_socket 0
arg3 ; length tos
arg2 ; buffer nos
arg1 ; fd
literal read
os
%endmacro
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; shutdown methods shutdown ro, wo, or r/w
%macro _shutdown 0
arg1 ; fd
literal shutdown
os
%endmacro
%macro shutdown_read_socket 0
literal 0
arg2
_shutdown
%endmacro
%macro shutdown_write_socket 0
literal 1
arg2
_shutdown
%endmacro
%macro shutdown_socket 0
literal 2
arg2
_shutdown
%endmacro