Skip to content

Commit 15419ce

Browse files
committed
update asm version to not leak file descriptors and wait for childs
1 parent 5e7522d commit 15419ce

File tree

1 file changed

+82
-69
lines changed

1 file changed

+82
-69
lines changed

httpd.asm

Lines changed: 82 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
; elf header see http://muppetlabs.com/~breadbox/software/tiny/teensy.html
1+
; - code disassembled from C executable with `objconv -fnasm httpd temp.asm`
2+
; - tweaked by prepending _start to _001 and removing the exit call
3+
; - tiny elf header see http://muppetlabs.com/~breadbox/software/tiny/teensy.html
24

35
BITS 64
46

@@ -40,12 +42,14 @@ _start:
4042
xor r9, r9
4143
pop rdi
4244
mov rsi, rsp
45+
46+
?_001:
4347
push r14
4448
push r13
4549
push r12
50+
mov r12, rsi
4651
push rbp
4752
push rbx
48-
mov rbx, rsi
4953
sub rsp, 8224
5054
cmp edi, 3
5155
jnz ?_004
@@ -62,132 +66,142 @@ _start:
6266
lea eax, [rax+rdx-30H]
6367
jmp ?_002
6468

65-
?_003: xchg al, ah
69+
?_003: mov edx, eax
70+
xchg dl, dh
6671
test ax, ax
6772
jnz ?_007
68-
?_004: mov rbp, qword [rbx]
73+
?_004: mov rbx, qword [r12]
6974
mov edx, 7
7075
mov edi, 1
7176
lea rsi, [rel ?_033]
7277
call ?_027
73-
mov rdx, rbp
78+
mov rdx, rbx
7479
?_005: cmp byte [rdx], 0
7580
jz ?_006
7681
inc rdx
7782
jmp ?_005
7883

79-
?_006: sub rdx, rbp
80-
mov rsi, rbp
84+
?_006: sub edx, ebx
85+
mov rsi, rbx
8186
mov edi, 1
8287
call ?_027
8388
mov edx, 11
8489
mov edi, 1
8590
lea rsi, [rel ?_034]
8691
call ?_027
8792
mov edi, 1
88-
call ?_017
93+
call ?_018
94+
xor edx, edx
95+
?_007: mov word [rsp+12H], dx
8996
xor eax, eax
90-
?_007: xorps xmm0, xmm0
97+
xor ecx, ecx
9198
lea rsi, [rsp+0CH]
9299
lea rdi, [rsp+10H]
93100
mov edx, 4
94-
movups oword [rsp+10H], xmm0
101+
mov qword [rsp+14H], rax
95102
mov dword [rsp+0CH], 1
103+
mov dword [rsp+1CH], ecx
104+
96105
mov word [rsp+10H], 2
97-
mov word [rsp+12H], ax
98106
call ?_029
99107
mov r13d, eax
100-
?_008: xor edx, edx
108+
?_008: xor ecx, ecx
109+
xor esi, esi
110+
or edi, 0FFFFFFFFH
111+
mov edx, 1
112+
call ?_017
113+
test eax, eax
114+
jg ?_008
115+
xor edx, edx
101116
xor esi, esi
102117
mov edi, r13d
103118
call ?_023
104-
mov ebp, eax
119+
mov ebx, eax
105120
test eax, eax
106-
js ?_008
121+
js ?_015
107122
xor eax, eax
108-
call ?_018
109-
mov r12d, eax
123+
call ?_019
124+
mov ebp, eax
110125
test eax, eax
111-
jnz ?_008
112-
mov r14, qword [rbx+10H]
113-
lea r13, [rsp+20H]
126+
jne ?_015
127+
mov r13, qword [r12+10H]
128+
lea r12, [rsp+20H]
114129
?_009: mov edx, 8192
115-
mov rsi, r13
116-
mov edi, ebp
130+
mov rsi, r12
131+
mov edi, ebx
117132
call ?_028
118-
mov ebx, eax
133+
mov r14d, eax
119134
test eax, eax
120135
jle ?_010
121-
mov edx, ebx
122-
mov rsi, r13
136+
mov edx, r14d
137+
mov rsi, r12
123138
mov edi, 1
124139
call ?_027
125-
movsxd rax, ebx
126-
lea rax, [r13+rax-3H]
127-
cmp ebx, 2
140+
lea edx, [r14-3H]
141+
movsxd rdx, edx
142+
add rdx, r12
143+
cmp r14d, 2
128144
jg ?_011
129-
?_010: xor esi, esi
130-
mov rdi, r14
145+
?_010: mov rdi, r13
146+
xor esi, esi
131147
call ?_026
132-
mov ebx, eax
148+
mov r13d, eax
133149
test eax, eax
134150
jns ?_012
135151
mov edx, 39
136152
lea rsi, [rel ?_035]
137-
mov edi, ebp
153+
mov edi, ebx
138154
call ?_027
139-
jmp ?_015
155+
jmp ?_014
140156

141-
?_011: cmp byte [rax], 10
157+
?_011: cmp byte [rdx], 10
142158
jnz ?_009
143-
cmp byte [rax+1H], 13
159+
cmp byte [rdx+1H], 13
144160
jnz ?_009
145-
cmp byte [rax+2H], 10
161+
cmp byte [rdx+2H], 10
146162
jnz ?_009
147163
jmp ?_010
148164

149165
?_012: mov edx, 19
150166
lea rsi, [rel ?_036]
151-
mov edi, ebp
167+
mov edi, ebx
152168
call ?_027
153169
?_013: mov edx, 8192
154-
mov rsi, r13
155-
mov edi, ebx
170+
mov rsi, r12
171+
mov edi, r13d
156172
call ?_028
157173
mov edx, eax
158174
test eax, eax
159-
jle ?_014
160-
mov rsi, r13
161-
mov edi, ebp
175+
jle ?_016
176+
mov rsi, r12
177+
mov edi, ebx
162178
call ?_027
163179
test eax, eax
164180
jns ?_013
165-
jmp ?_015
181+
?_014: mov ebp, 1
182+
jmp ?_016
166183

167-
?_014: mov edi, ebp
168-
mov esi, 2
169-
call ?_022
170-
mov edi, ebp
184+
?_015: mov edi, ebx
171185
call ?_025
172-
jmp ?_016
186+
jmp ?_008
173187

174-
?_015: mov r12d, 1
175-
?_016: add rsp, 8224
176-
mov eax, r12d
188+
?_016:
189+
add rsp, 8224
190+
mov eax, ebp
177191
pop rbx
178192
pop rbp
179193
pop r12
180194
pop r13
181195
pop r14
182-
call ?_017
196+
ret
183197

184198
?_017:
185-
add r9, 3
199+
add r9, 1
186200
?_018: add r9, 3
187-
?_019: add r9, 4
188-
?_020: add r9, 1
201+
?_019: add r9, 3
202+
?_020: add r9, 4
189203
?_021: add r9, 1
190-
?_022: add r9, 5
204+
?_022: add r9, 6
191205
?_023: add r9, 2
192206
?_024: add r9, 38
193207
?_025: add r9, 1
@@ -199,50 +213,49 @@ _start:
199213
syscall
200214
ret
201215

202-
203216
?_029:
204-
push r13
205-
mov r13, rsi
206-
mov esi, 1
207217
push r12
218+
mov r12, rsi
219+
mov esi, 1
208220
push rbp
209221
mov rbp, rdi
210222
mov edi, 2
223+
push rbx
211224
sub rsp, 16
212225
mov dword [rsp+0CH], edx
213226
mov edx, 6
214227
call ?_024
215228
mov r8d, dword [rsp+0CH]
216229
test eax, eax
217-
mov r12d, eax
230+
mov ebx, eax
218231
jns ?_031
219232
?_030: mov edi, 1
220-
call ?_017
233+
call ?_018
221234
jmp ?_032
222235

223-
?_031: mov rcx, r13
236+
?_031: mov rcx, r12
224237
mov edx, 2
225238
mov esi, 1
226239
mov edi, eax
227-
call ?_019
240+
call ?_020
228241
test eax, eax
229242
jnz ?_030
230243
mov edx, 16
231244
mov rsi, rbp
232-
mov edi, r12d
233-
call ?_021
245+
mov edi, ebx
246+
call ?_022
234247
test eax, eax
235248
jnz ?_030
236249
mov esi, 10
237-
mov edi, r12d
238-
call ?_020
250+
mov edi, ebx
251+
call ?_021
239252
test eax, eax
240253
jnz ?_030
241254
?_032: add rsp, 16
242-
mov eax, r12d
255+
mov eax, ebx
256+
pop rbx
243257
pop rbp
244258
pop r12
245-
pop r13
246259
ret
247260

248261
?_035:

0 commit comments

Comments
 (0)