замечаю
;uint32_t send_resp(RESPD* ptr, char* content, uint32_t length)
send_resp:
push esi edi ebp
; get full size
mov ebp, [esp + 4*3 + 4]
mov ecx, [ebp + RESPD.count_header]
shl ecx, 1 ; *2
add ecx, 4 + 2 + 2 ; status code + 0x0d 0x0a + 0x0d 0x0a
add ecx, [ebp + RESPD.http_ver_len]
; add size all headers
xor edx, edx
@@:
cmp edx, [ebp + RESPD.count_header]
je @f
add ecx, [ebp + edx*8 + RESPD.header.len]
inc edx
jmp @b
@@:
; add size content
;add ecx, [esp + 4*3 + 12]
; alloc buffer
push ecx
stdcall Alloc, ecx
pop ecx
test eax, eax
jz .error_alloc
mov [ebp + RESPD.buffer], eax
mov [ebp + RESPD.buffer_size], ecx
mov edi, eax
; copy data
mov ecx, [ebp + RESPD.http_ver_len]
mov esi, [ebp + RESPD.http_ver_ptr]
rep movsb ; copy http ver
mov esi, base_response + response.code
mov ecx, response.end_headers - response.code
mov edx, edi
rep movsb ; copy default status code + headers
mov eax, [ebp + RESPD.http_status]
mov [edx], eax
test [ebp + RESPD.flags], FLAG_KEEP_ALIVE
jz @f
add edx, response.connection - response.code
mov dword[edx], 'keep'
mov dword[edx + 4], '-ali'
mov word[edx + 8], 've'
@@:
sub edx, response.connection
push edx
; copy addition headers
lea eax, [ebp + RESPD.header.ptr]
xor edx, edx
@@:
cmp edx, [ebp + RESPD.count_header]
je @f
mov esi, [eax]
mov ecx, [eax + 4]
rep movsb
mov cx, 0x0a0d
stosw
add eax, 8
inc edx
jmp @b
@@:
mov ax, 0x0A0D
stosw
pop ecx
; set content length
add ecx, response.content_len + 21
@@:
xor edx, edx
test eax, eax
jz @f
div dword[_DIV_10_]
add byte[ecx], dl
sub ecx, 1
jmp @b
@@:
; send response status line and headers
mov eax, [ebp + RESPD.session]
push dword 0
push dword[ebp + RESPD.buffer_size]
push dword[ebp + RESPD.buffer]
push dword[eax + CONNECT_DATA.socket]
call netfunc_send
cmp eax, -1
jz .exit
; send content
mov ecx, [esp + 4*3 + 8] ; ptr
test ecx, ecx
jz .free
push dword 0
push dword[esp + 4*4 + 12] ; size
push ecx
push dword[eax + CONNECT_DATA.socket]
call netfunc_send
cmp eax, -1
jz .exit
.free:
xor eax, eax
; free buffer
push eax
stdcall Free, [ebp + RESPD.buffer]
pop eax
.exit:
pop ebp edi esi
ret
.error_alloc:
mov eax, -1
jmp .exit
В очередь!!))
А вы поделитесь своим ботом ? Я хочу изучить его команды и операции по отдельности?
Так я скинул выше.
Замечательно, спасибо большое
да что там изучать, открыть бот апи и всё понятно
вот он ассемблер с вечными проблемами пограничных значений и офсетов
Ассемблер тут ни при чём. Я уже отвечал.
Обсуждают сегодня