Skip to content

Instantly share code, notes, and snippets.

@the-sofi-uwu
Created February 16, 2021 14:28
Show Gist options
  • Save the-sofi-uwu/43f1656aa52e8e3790118008de4ef330 to your computer and use it in GitHub Desktop.
Save the-sofi-uwu/43f1656aa52e8e3790118008de4ef330 to your computer and use it in GitHub Desktop.
Site em assembly
section .data
struc sockaddr_in
.sin_family: resw 1 ; 2 bytes word pra family
.sin_port: resw 1 ; 2 bytes 1 word pra porta
.sin_addr: resd 1 ; 4 bytes double word pra endereço
.sin_zero: resb 8 ; 8 bytes em 0
endstruc
socket_err_msg db "Deu erro no socket bobao", 10
socket_err_len equ $-socket_err_msg ; Tamanho da mensagem
bind_err_msg db "Deu erro no bind bobao", 10
bind_err_len equ $-bind_err_msg ; Tamanho da mensagem
listen_err_msg db "Deu erro no listen bobao", 10
listen_err_len equ $-listen_err_msg ; Tamanho da mensagem
accept_err_msg db "Deu erro no accept bobao", 10
accept_err_len equ $-accept_err_msg ; Tamanho da mensagem
read_err_msg db "Deu erro no read bobao", 10
read_err_len equ $-read_err_msg ; Tamanho da mensagem
accept_msg db "Esperando conexao", 10
accept_len equ $-accept_msg ; Tamanho da mensagem
response_payload db "HTTP/1.1 200 OK",10,"X-Powered-By: Gayress",10,"Content-Type: text/html; charset=utf-8",10,"Content-Length: 5",10,"Connection: keep-alive",10,"Keep-Alive: timeout=5",10,"",10,"Atapo"
response_len equ $-response_payload
reuse dd 1 ;
addr istruc sockaddr_in
at sockaddr_in.sin_family, dw 2 ;
at sockaddr_in.sin_port, dw 36895 ; 8080
at sockaddr_in.sin_addr, dd 0 ; localhost
at sockaddr_in.sin_zero, db 0 ; 8 bytes em 0
iend
addr_size equ $-addr ; Tamanho da mensagem
; 4 Bytes / 32 bits / DWORD
section .bss
server resd 1 ; INT
client resd 1 ; INT
message_buf resw 999
section .text
global _start
_create_socket:
mov rax, 41 ; Syscall de SOCKET
mov rdi, 2 ; dominio AF_INET
mov rsi, 1 ; SOCK_STREAM para Duplex
mov rdx, 0 ; protocolo 0
syscall
mov rbx, 0 ; Move 0 para rbx
cmp rax, rbx ; Compara RAX com 0
jl _socket_err ; Jump less = JL (Pula caso for menor) para _socket_err
; Mover o file descriptor para uma variavel top
mov [server], rax
; Configura o socket
mov rax, 54 ; Syscall de set opt socket
mov rdi, [server] ; file descriptor
mov rsi, 1 ; level
mov rdx, 2 ; opt nome
mov r10, reuse ; reuse
mov r8, 4 ; opt_name
syscall
mov rbx, 0 ; Move 0 para rbx
cmp rax, rbx ; Compara RAX com 0
jl _socket_err ; Jump less = JL (Pula caso for menor) para _socket_err
ret
_bind_socket:
mov rax, 49 ; Syscall de BIND
mov rdi, [server] ; dominio AF_INET
mov rsi, addr ;2 SOCK_STREAM para Duplex
mov rdx, addr_size ; protocolo 0
syscall
mov rbx, 0 ; Move 0 para rbx
cmp rax, rbx ; Compara RAX com 0
jnz _bind_err ; Jump less = JL (Pula caso for menor) para _socket_err
ret
_listen_socket:
mov rax, 50 ; Syscall de BIND
mov rdi, [server] ; SERVER FILE DESCRIPTOR
mov rsi, 2 ; 2 NO MAXIMO NA FILA
syscall
mov rbx, 0 ; Move 0 para rbx
cmp rax, rbx ; Compara RAX com 0
jnz _listen_err ; Jump not zero = JL (Pula caso for menor) para _socket_err
ret
_accept_socket:
call _waiting
mov rax, 43 ; Syscall de ACCEPT
mov rdi, [server] ; SERVER FILE DESCRIPTOR
mov rsi, 0 ; 0
mov rdx, 0 ; 0
syscall
mov rbx, 0 ; Move 0 para rbx
cmp rax, rbx ; Compara RAX com 0
jl _accept_err ; Jump not zero = JL (Pula caso for menor) para _socket_err
mov [client], rax
mov rax, 0 ; read
mov rdi, [client]
mov rsi, message_buf ; message_buf
mov rdx, 999
syscall
mov rax, 1 ; syscall 1 = Write
mov rdi, [client] ; STDOUT 1 = Stdout
mov rsi, response_payload ; msg = 0
mov rdx, response_len ; tamanho em bytes da mensagem
syscall
jmp _accept_socket
ret
_start:
call _create_socket
call _bind_socket
call _listen_socket
call _accept_socket
jmp _exit_sucess
_waiting:
mov rax, 1 ; syscall 1 = Write
mov rdi, 1 ; STDOUT 1 = Stdout
mov rsi, accept_msg ; msg = 0
mov rdx, accept_len ; tamanho em bytes da mensagem
syscall ; syscall
ret
_socket_err:
mov rax, 1 ; syscall 1 = Write
mov rdi, 1 ; STDOUT 1 = Stdout
mov rsi, socket_err_msg ; msg = 0
mov rdx, socket_err_len ; tamanho em bytes da mensagem
syscall ; syscall
jmp _exit_error ; pula pro exit de erro
_bind_err:
mov rax, 1 ; syscall 1 = Write
mov rdi, 1 ; STDOUT 1 = Stdout
mov rsi, bind_err_msg ; msg = 0
mov rdx, bind_err_len ; tamanho em bytes da mensagem
syscall ; syscall
jmp _exit_error ; pula pro exit de erro
_read_err:
mov rax, 1 ; syscall 1 = Write
mov rdi, 1 ; STDOUT 1 = Stdout
mov rsi, read_err_msg ; msg = 0
mov rdx, read_err_len ; tamanho em bytes da mensagem
syscall ; syscall
jmp _exit_error ; pula pro exit de erro
_listen_err:
mov rax, 1 ; syscall 1 = Write
mov rdi, 1 ; STDOUT 1 = Stdout
mov rsi, listen_err_msg ; msg = 0
mov rdx, listen_err_len ; tamanho em bytes da mensagem
syscall ; syscall
jmp _exit_error ; pula pro exit de erro
_accept_err:
mov rax, 1 ; syscall 1 = Write
mov rdi, 1 ; STDOUT 1 = Stdout
mov rsi, accept_err_msg ; msg = 0
mov rdx, accept_err_len ; tamanho em bytes da mensagem
syscall ; syscall
jmp _exit_error ; pula pro exit de erro
_exit_error:
mov rax, 60 ; syscall exit
mov rdi, 1 ; exit code 1
syscall ;
_exit_sucess:
mov rax, 60 ; syscall exit
mov rdi, 0 ; exit code 0
syscall ;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment