diff --git a/labels/debug.asm b/labels/debug.asm index 28dbad0..262ff6c 100644 --- a/labels/debug.asm +++ b/labels/debug.asm @@ -14,7 +14,7 @@ section .text global warn_sighandler_fail dbg_new_child: - cmp byte [log_level], 2 + cmp byte [rel log_level], 2 jne dbg_skip CLB @@ -23,14 +23,14 @@ dbg_new_child: mov r10, rax ITOA r10, current_pid_str, rcx - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_child_created_p1 AAPPEND r9, current_pid_str AAPPEND r9, log_child_created_p2 AAPPEND r9, client_ip_str mov byte [r9], 0 - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 ; r9 = length of what was written @@ -39,18 +39,18 @@ dbg_new_child: ret ; dbg_new_child return point dbg_child_exit: - cmp byte [log_level], 2 + cmp byte [rel log_level], 2 jne dbg_skip CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_child_exit_p1 AAPPEND r9, current_pid_str AAPPEND r9, log_child_exit_p2 mov byte [r9], 0 - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 ; r9 = length of what was written @@ -59,19 +59,19 @@ dbg_child_exit: ret ; dbg_child_exit return point dbg_path_resolved: - cmp byte [log_level], 2 + cmp byte [rel log_level], 2 jne dbg_skip CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_path_resolved - lea rdi, [path] + lea rdi, [rel path] STRLEN rdi, rcx APPEND r9, rdi, rcx - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 LOG_DEBUG log_buffer, r9 @@ -79,19 +79,19 @@ dbg_path_resolved: ret ; dbg_path_resolved return point dbg_dotfile_blocked: - cmp byte [log_level], 2 + cmp byte [rel log_level], 2 jne dbg_skip CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_dotfile_blocked - lea rdi, [path] + lea rdi, [rel path] STRLEN rdi, rcx APPEND r9, rdi, rcx - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 LOG_DEBUG log_buffer, r9 @@ -99,7 +99,7 @@ dbg_dotfile_blocked: ret ; dbg_dotfile_blocked return point dbg_status_code: - cmp byte [log_level], 2 + cmp byte [rel log_level], 2 jne dbg_skip mov r10, rdi @@ -109,11 +109,11 @@ dbg_status_code: CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_replying_with_code AAPPEND r9, itoa_buf - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 @@ -123,7 +123,7 @@ dbg_status_code: ret ; dbg_status_code return point dbg_bytes_sent: - cmp byte [log_level], 2 + cmp byte [rel log_level], 2 jne dbg_skip mov r10, rax @@ -131,13 +131,13 @@ dbg_bytes_sent: CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_sent_bytes_p1 AAPPEND r9, itoa_buf AAPPEND r9, log_sent_bytes_p2 - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 @@ -146,26 +146,26 @@ dbg_bytes_sent: ret ; dbg_bytes_sent return point dbg_process_reaped: - cmp byte [log_level], 2 + cmp byte [rel log_level], 2 jne dbg_skip CLB - movzx r10, word [process_count] + movzx r10, word [rel process_count] ITOA r10, itoa_buf, rcx - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_process_reaped AAPPEND r9, itoa_buf - movzx r10, word [max_requests] + movzx r10, word [rel max_requests] ITOA r10, itoa_buf, rcx AAPPEND r9, log_slash AAPPEND r9, itoa_buf - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 @@ -174,17 +174,17 @@ dbg_process_reaped: ret ; dbg_process_reaped return point dbg_chroot_success: - cmp byte [log_level], 2 + cmp byte [rel log_level], 2 jne dbg_skip CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_chroot_succeeded AAPPEND r9, document_root - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 @@ -193,18 +193,18 @@ dbg_chroot_success: ret ; warn_chroot_fail return point warn_chroot_fail: ; yea thats a warning but meh - cmp byte [log_level], 0 + cmp byte [rel log_level], 0 je dbg_skip CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_chroot_failed_p1 AAPPEND r9, document_root AAPPEND r9, log_chroot_failed_p2 - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 @@ -213,14 +213,14 @@ warn_chroot_fail: ; yea thats a warning but meh ret ; warn_chroot_fail return point dbg_sighandler_success: - cmp byte [log_level], 0 + cmp byte [rel log_level], 0 je dbg_skip mov r10, rax ; rax content: 17 = sigchld, 15 = sigterm, 2 = sigint CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_success_sighandler_p1 @@ -250,7 +250,7 @@ dbg_sighandler_success: .end: AAPPEND r9, log_success_sighandler_p2 - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 @@ -260,14 +260,14 @@ dbg_sighandler_success: warn_sighandler_fail: - cmp byte [log_level], 0 + cmp byte [rel log_level], 0 je dbg_skip mov r10, rax ; rax content: 17 = sigchld, 15 = sigterm, 2 = sigint CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_fail_sighandler_p1 @@ -297,7 +297,7 @@ warn_sighandler_fail: .end: AAPPEND r9, log_fail_sighandler_p2 - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 @@ -306,23 +306,23 @@ warn_sighandler_fail: ret ; warn_sighandler_fail return point dbg_startup_infos: - cmp byte [log_level], 2 + cmp byte [rel log_level], 2 jne dbg_skip .pid_uid: CLB - mov r10d, dword [current_uid] ; r10d auto-0-extends to the full r10 + mov r10d, dword [rel current_uid] ; r10d auto-0-extends to the full r10 ITOA r10, itoa_buf, rcx - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_process_started_p1 AAPPEND r9, itoa_buf AAPPEND r9, log_process_started_p2 AAPPEND r9, current_pid_str - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 @@ -330,219 +330,219 @@ dbg_startup_infos: .config: CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_config_header - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 LOG_DEBUG log_buffer, r9 CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_config_docroot AAPPEND r9, document_root - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 LOG_DEBUG log_buffer, r9 CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_config_index AAPPEND r9, index_file - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 LOG_DEBUG log_buffer, r9 CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_config_bindaddr AAPPEND r9, bind_addr_str - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 LOG_DEBUG log_buffer, r9 CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_config_port - movzx r10, word [port] + movzx r10, word [rel port] ITOA r10, itoa_buf, rcx AAPPEND r9, itoa_buf - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 LOG_DEBUG log_buffer, r9 CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_config_maxreqs - movzx r10, word [max_requests] + movzx r10, word [rel max_requests] ITOA r10, itoa_buf, rcx AAPPEND r9, itoa_buf - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 LOG_DEBUG log_buffer, r9 CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_config_maxage - mov r10d, dword [max_age] + mov r10d, dword [rel max_age] ITOA r10, itoa_buf, rcx AAPPEND r9, itoa_buf - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 LOG_DEBUG log_buffer, r9 CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_config_lingerto - movzx r10, word [linger_to] + movzx r10, word [rel linger_to] ITOA r10, itoa_buf, rcx AAPPEND r9, itoa_buf - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 LOG_DEBUG log_buffer, r9 CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_config_servername AAPPEND r9, server_w_ver - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 LOG_DEBUG log_buffer, r9 CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_config_logfile AAPPEND r9, log_file_path - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 LOG_DEBUG log_buffer, r9 CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_config_loglevel AAPPEND r9, log_level_str - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 LOG_DEBUG log_buffer, r9 CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_config_servedots AAPPEND r9, serve_dots_str - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 LOG_DEBUG log_buffer, r9 CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_config_usexri AAPPEND r9, use_xri_str - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 LOG_DEBUG log_buffer, r9 CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_config_usechroot AAPPEND r9, use_chroot_str - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 LOG_DEBUG log_buffer, r9 CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_config_noperms AAPPEND r9, be_nobody_str - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 LOG_DEBUG log_buffer, r9 CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_config_authrealm AAPPEND r9, auth_realm - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 LOG_DEBUG log_buffer, r9 CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_config_authuser AAPPEND r9, auth_username - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 LOG_DEBUG log_buffer, r9 ; auth_password: show ****** if set, empty if not CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_config_authpass - cmp byte [auth_password], 0 + cmp byte [rel auth_password], 0 je .config_pass_empty AAPPEND r9, log_config_authpass_set .config_pass_empty: - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 LOG_DEBUG log_buffer, r9 CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_config_err400 AAPPEND r9, errordoc_400_path - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 LOG_DEBUG log_buffer, r9 CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_config_err401 AAPPEND r9, errordoc_401_path - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 LOG_DEBUG log_buffer, r9 CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_config_err403 AAPPEND r9, errordoc_403_path - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 LOG_DEBUG log_buffer, r9 CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_config_err404 AAPPEND r9, errordoc_404_path - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 LOG_DEBUG log_buffer, r9 CLB - lea r9, [log_buffer] + lea r9, [rel log_buffer] AAPPEND r9, log_config_err405 AAPPEND r9, errordoc_405_path - lea rcx, [log_buffer] + lea rcx, [rel log_buffer] sub r9, rcx mov rbx, r9 LOG_DEBUG log_buffer, r9 diff --git a/labels/flagparser.asm b/labels/flagparser.asm index 1af2fbb..cd15263 100644 --- a/labels/flagparser.asm +++ b/labels/flagparser.asm @@ -23,9 +23,9 @@ section .text parse_flags: mov rbp, rsp - mov qword [flag_env_path], 0 ; default: not set - mov byte [flag_help], 0 - mov byte [flag_version], 0 + mov qword [rel flag_env_path], 0 ; default: not set + mov byte [rel flag_help], 0 + mov byte [rel flag_version], 0 cmp r15, 1 ; argc = 1: no args passed je .done @@ -66,7 +66,7 @@ parse_flags: jmp .arg_not_recognized .is_h: - mov byte [flag_help], 1 + mov byte [rel flag_help], 1 call .remove_arg dec r15 @@ -81,7 +81,7 @@ parse_flags: jge .error_e ; -e with no value, ignore mov rax, [rbp + 8 + 8 + rax * 8] ; argv[rcx+1] - mov [flag_env_path], rax + mov [rel flag_env_path], rax ; remove -e from argv call .remove_arg @@ -94,7 +94,7 @@ parse_flags: jmp .next_arg .is_v: - mov byte [flag_version], 1 + mov byte [rel flag_version], 1 call .remove_arg dec r15 diff --git a/labels/initialsetup.asm b/labels/initialsetup.asm index c661000..d627cfb 100644 --- a/labels/initialsetup.asm +++ b/labels/initialsetup.asm @@ -142,13 +142,13 @@ section .text initial_setup: call .build_server_name ; first of all, build the server name with default_name + version - cmp byte [flag_help], 1 ; -h passed + cmp byte [rel flag_help], 1 ; -h passed je .display_help - cmp byte [flag_version], 1 ; -v passed + cmp byte [rel flag_version], 1 ; -v passed je .display_version - mov r14, [flag_env_path] + mov r14, [rel flag_env_path] test r14, r14 jz .use_default ; -e not passed @@ -156,7 +156,7 @@ initial_setup: cmp rax, 1 jne .failed_read_file - lea rcx, [env_path_buf] + lea rcx, [rel env_path_buf] .copy_argv1: mov al, [r14] @@ -171,8 +171,8 @@ initial_setup: jmp .get_uid .use_default: - lea r14, [env_path] - lea rcx, [env_path_buf] + lea r14, [rel env_path] + lea rcx, [rel env_path_buf] .copy_default: mov al, [r14] @@ -188,7 +188,7 @@ initial_setup: ; getuid() mov rax, 102 syscall - mov [current_uid], eax + mov [rel current_uid], eax .get_pid: GET_PID @@ -214,19 +214,19 @@ initial_setup: ; port: read as ascii, then convert to integer ENV_DEFAULT env_path_buf, key_port, word_str_buf, 8, default_port ATOI word_str_buf, rax - mov word [port], ax + mov word [rel port], ax ENV_DEFAULT env_path_buf, key_maxconns, word_str_buf, 8, default_maxconns ; reuse word_str_buf, we're done with it ATOI word_str_buf, rax - mov word [max_requests], ax + mov word [rel max_requests], ax ENV_DEFAULT env_path_buf, key_maxage, max_age_str, 12, default_maxage ATOI max_age_str, rax - mov dword [max_age], eax + mov dword [rel max_age], eax ENV_DEFAULT env_path_buf, key_linger_to, max_age_str, 12, default_linger_to ATOI max_age_str, rax - mov dword [linger_to], eax + mov dword [rel linger_to], eax ENV_DEFAULT env_path_buf, key_servedots, serve_dots_str, 5, default_servedots BOOL_FLAG serve_dots_str, serve_dots @@ -251,21 +251,21 @@ initial_setup: ENV_DEFAULT env_path_buf, key_bindaddr, bind_addr_str, 16, default_bindaddr ; build sockaddr from the now-loaded port/interface - movzx eax, word [port] + movzx eax, word [rel port] xchg al, ah ; htons(), swap bytes for big-endian - mov word [sockaddr + 2], ax + mov word [rel sockaddr + 2], ax ; inet_pton(af, src, dst) mov rdi, 2 ; AF_INET (ipv4) - lea rsi, [bind_addr_str] - lea rdx, [interface] + lea rsi, [rel bind_addr_str] + lea rdx, [rel interface] call inet_pton cmp rax, 0 jle .bad_bind_addr ; 0 = invalid format, -1 = unsupported af - mov eax, [interface] - mov dword [sockaddr + 4], eax + mov eax, [rel interface] + mov dword [rel sockaddr + 4], eax ; build errordoc full paths (document_root + errordoc_*) BUILDPATH errordoc_405_path, document_root, errordoc_405 @@ -279,13 +279,13 @@ initial_setup: ret ; initial_setup return point .build_server_name: - lea r14, [server_w_ver] + lea r14, [rel server_w_ver] AAPPEND r14, default_name AAPPEND r14, version ret ; .build_server_name return point .open_logfile: - cmp byte [log_file_path], 0 + cmp byte [rel log_file_path], 0 je .no_log_file OPEN_FILE_A log_file_path @@ -293,18 +293,18 @@ initial_setup: cmp rax, 0 jl .no_log_file ; failed to open / create it - mov qword [log_file], rax + mov qword [rel log_file], rax jmp .log_file_end .no_log_file: - mov qword [log_file], 1 ; no log file = stdout + mov qword [rel log_file], 1 ; no log file = stdout .log_file_end: ret ; open_logfile len .parse_log_level: - lea rax, [log_level_str] + lea rax, [rel log_level_str] ; "debug" cmp dword [rax], 'debu' @@ -313,7 +313,7 @@ initial_setup: cmp byte [rax+4], 'g' jne .check_none - mov byte [log_level], 2 + mov byte [rel log_level], 2 jmp .log_level_end @@ -322,13 +322,13 @@ initial_setup: cmp dword [rax], 'none' jne .check_info - mov byte [log_level], 0 + mov byte [rel log_level], 0 jmp .log_level_end .check_info: ; "info" or anything unrecognized = 0 - mov byte [log_level], 1 + mov byte [rel log_level], 1 ret .log_level_end: diff --git a/labels/preserve.asm b/labels/preserve.asm index ee044d1..b292c7a 100644 --- a/labels/preserve.asm +++ b/labels/preserve.asm @@ -70,11 +70,11 @@ pre_serve: .chroot: ; chroot into the document_root - mov eax, [current_uid] + mov eax, [rel current_uid] cmp eax, 0 jne .chroot_end - cmp byte [use_chroot], 1 + cmp byte [rel use_chroot], 1 jne .chroot_end .do_chroot: @@ -96,8 +96,8 @@ pre_serve: call dbg_chroot_success ; set document_root to default_docroot (".") - mov ax, [default_docroot] - mov [document_root], ax + mov ax, [rel default_docroot] + mov [rel document_root], ax ; rebuild errordoc paths now that we're inside the jail BUILDPATH errordoc_405_path, document_root, errordoc_405 @@ -118,11 +118,11 @@ pre_serve: .im_nobody: ; sets current user to "nobody" for minimal privileges (if root) - mov eax, [current_uid] + mov eax, [rel current_uid] cmp eax, 0 jne .nobody_end - cmp byte [be_nobody], 1 + cmp byte [rel be_nobody], 1 jne .nobody_end ; setuid(uid) @@ -133,7 +133,7 @@ pre_serve: cmp rax, 0 jl .nobody_fail - mov dword [current_uid], 65534 + mov dword [rel current_uid], 65534 LOG_DEBUG log_nobody_succeeded, log_nobody_succeeded_len jmp .nobody_end @@ -156,23 +156,23 @@ pre_serve: ; setups the SIGCHLD handler (child exits) ; 0 the struct - lea rdi, [sigaction] + lea rdi, [rel sigaction] mov rcx, 152 xor al, al rep stosb - lea rax, [.sigchld_handler] - mov [sigaction], rax ; sa_handler + lea rax, [rel .sigchld_handler] + mov [rel sigaction], rax ; sa_handler - mov qword [sigaction + 8], 0x14000000 ; sa_flags SA_RESTART | SA_RESTORER + mov qword [rel sigaction + 8], 0x14000000 ; sa_flags SA_RESTART | SA_RESTORER - lea rax, [.sig_restorer] - mov [sigaction + 16], rax ; sa_restorer + lea rax, [rel .sig_restorer] + mov [rel sigaction + 16], rax ; sa_restorer ; rt_sigaction(signum, newact, oldact) mov rax, 13 mov rdi, 17 ; SIGCHLD - lea rsi, [sigaction] + lea rsi, [rel sigaction] xor rdx, rdx mov r10, 8 ; "sigsetsize" syscall @@ -207,7 +207,7 @@ pre_serve: cmp rax, 0 jle .sigchld_ok ; no child reaped, stop - dec word [process_count] + dec word [rel process_count] call dbg_process_reaped jmp .sigchld_handler @@ -219,23 +219,23 @@ pre_serve: ; setups the SIGTERM handler ; 0 the struct - lea rdi, [sigaction] + lea rdi, [rel sigaction] mov rcx, 152 xor al, al rep stosb - lea rax, [.sigterm_handler] - mov [sigaction], rax ; sa_handler + lea rax, [rel .sigterm_handler] + mov [rel sigaction], rax ; sa_handler - mov qword [sigaction + 8], 0x04000000 ; sa_flag SA_RESTORER + mov qword [rel sigaction + 8], 0x04000000 ; sa_flag SA_RESTORER - lea rax, [.sig_restorer] - mov [sigaction + 16], rax ; sa_restorer + lea rax, [rel .sig_restorer] + mov [rel sigaction + 16], rax ; sa_restorer ; rt_sigaction(signum, newact, oldact) mov rax, 13 mov rdi, 15 ; SIGTERM - lea rsi, [sigaction] + lea rsi, [rel sigaction] xor rdx, rdx mov r10, 8 ; "sigsetsize" syscall @@ -257,30 +257,30 @@ pre_serve: ret ; return point for .sigterm_setup .sigterm_handler: - mov byte [shutdown], 1 + mov byte [rel shutdown], 1 ret ; return point for .sigterm_handler .sigint_setup: ; setups the SIGINT handler ; 0 the struct - lea rdi, [sigaction] + lea rdi, [rel sigaction] mov rcx, 152 xor al, al rep stosb - lea rax, [.sigint_handler] - mov [sigaction], rax ; sa_handler + lea rax, [rel .sigint_handler] + mov [rel sigaction], rax ; sa_handler - mov qword [sigaction + 8], 0x04000000 ; sa_flag SA_RESTORER + mov qword [rel sigaction + 8], 0x04000000 ; sa_flag SA_RESTORER - lea rax, [.sig_restorer] - mov [sigaction + 16], rax ; sa_restorer + lea rax, [rel .sig_restorer] + mov [rel sigaction + 16], rax ; sa_restorer ; rt_sigaction(signum, newact, oldact) mov rax, 13 mov rdi, 2 ; SIGINT - lea rsi, [sigaction] + lea rsi, [rel sigaction] xor rdx, rdx mov r10, 8 ; "sigsetsize" syscall @@ -302,7 +302,7 @@ pre_serve: ret ; return point for .sigint_setup .sigint_handler: - mov byte [shutdown], 1 + mov byte [rel shutdown], 1 ret ; return point for .sigint_handler .fail_socket: diff --git a/labels/startupchecks.asm b/labels/startupchecks.asm index a038dca..ce9d39d 100644 --- a/labels/startupchecks.asm +++ b/labels/startupchecks.asm @@ -12,7 +12,7 @@ startup_checks: .check_docroot: ; document_root: must exist and be a directory - lea rdi, [document_root] + lea rdi, [rel document_root] FILE_EXISTS rdi cmp rax, 2 @@ -26,7 +26,7 @@ startup_checks: ; check that document_root is readable and executable by the current process ; access(path, mode) mov rax, 21 - lea rdi, [document_root] + lea rdi, [rel document_root] mov rsi, 5 ; R_OK | X_OK syscall @@ -39,7 +39,7 @@ startup_checks: .check_errordocs: ; non-fatal: server still starts without errordocs - lea rdi, [errordoc_400_path] + lea rdi, [rel errordoc_400_path] cmp byte [rdi], 0 ; BUILDPATH leaves it empty if errordoc_400 was empty je .check_errordoc_401 @@ -52,7 +52,7 @@ startup_checks: LOG_WARNING log_check_errordoc_missing, log_check_errordoc_missing_len .check_errordoc_401: - lea rdi, [errordoc_401_path] + lea rdi, [rel errordoc_401_path] cmp byte [rdi], 0 je .check_errordoc_403 @@ -65,7 +65,7 @@ startup_checks: LOG_WARNING log_check_errordoc_missing, log_check_errordoc_missing_len .check_errordoc_403: - lea rdi, [errordoc_403_path] + lea rdi, [rel errordoc_403_path] cmp byte [rdi], 0 je .check_errordoc_404 @@ -78,7 +78,7 @@ startup_checks: LOG_WARNING log_check_errordoc_missing, log_check_errordoc_missing_len .check_errordoc_404: - lea rdi, [errordoc_404_path] + lea rdi, [rel errordoc_404_path] cmp byte [rdi], 0 je .check_errordoc_405 @@ -91,7 +91,7 @@ startup_checks: LOG_WARNING log_check_errordoc_missing, log_check_errordoc_missing_len .check_errordoc_405: - lea rdi, [errordoc_405_path] + lea rdi, [rel errordoc_405_path] cmp byte [rdi], 0 je .check_logfile @@ -104,31 +104,31 @@ startup_checks: LOG_WARNING log_check_errordoc_missing, log_check_errordoc_missing_len .check_logfile: - cmp byte [log_file_path], 0 + cmp byte [rel log_file_path], 0 je .check_port ; no file path provided, just skep - cmp qword [log_file], 1 + cmp qword [rel log_file], 1 jne .check_port ; if != 1, its ok ; if its 1, it means that we failed to open the file LOG_WARNING log_log_file_not_opened, log_log_file_not_opened_len .check_port: - mov eax, [current_uid] + mov eax, [rel current_uid] cmp eax, 0 je .check_chroot - movzx rax, word [port] + movzx rax, word [rel port] cmp rax, 1024 jge .check_chroot LOG_WARNING log_check_port_privileged, log_check_port_privileged_len .check_chroot: - cmp byte [use_chroot], 1 + cmp byte [rel use_chroot], 1 jne .check_nobody - mov eax, [current_uid] + mov eax, [rel current_uid] cmp eax, 0 je .check_nobody @@ -136,10 +136,10 @@ startup_checks: LOG_WARNING log_chroot_noroot, log_chroot_noroot_len .check_nobody: - cmp byte [be_nobody], 1 + cmp byte [rel be_nobody], 1 jne .checks_done - mov eax, [current_uid] + mov eax, [rel current_uid] cmp eax, 0 je .checks_done diff --git a/macros/envutils.asm b/macros/envutils.asm index f59663c..c8adb8a 100644 --- a/macros/envutils.asm +++ b/macros/envutils.asm @@ -35,7 +35,7 @@ section .bss STRLEN %2, rcx ; rcx = key length - lea r8, [env_buf] ; r8 = current scan pointer + lea r8, [rel env_buf] ; r8 = current scan pointer mov r9, r8 add r9, rax ; r9 = end of buffer @@ -53,7 +53,7 @@ section .bss ; try to match key: compare r8..r8+key_len with %2 lea rsi, [r8] - lea rdi, [%2] + lea rdi, [rel %2] push rcx ; repe cmpsb clobbers rcx repe cmpsb @@ -86,7 +86,7 @@ section .bss %%extract: ; rsi = pointer to value start - lea rdi, [%3] + lea rdi, [rel %3] mov rcx, %4 xor rbx, rbx ; rbx = bytes written @@ -145,8 +145,8 @@ section .bss jne %%done ; found it, rax already set ; copy default into out_buf - lea rsi, [%5] - lea rdi, [%3] + lea rsi, [rel %5] + lea rdi, [rel %3] mov rcx, %4 xor rbx, rbx diff --git a/macros/fileutils.asm b/macros/fileutils.asm index 54a6f4c..0e8bbd3 100644 --- a/macros/fileutils.asm +++ b/macros/fileutils.asm @@ -24,14 +24,14 @@ section .bss ; stat(path, statbuf) mov rax, 4 mov rdi, %1 - lea rsi, [stat] + lea rsi, [rel stat] syscall cmp rax, 0 jl %%not_found ; stat failed = doesn't exist ; check st_mode at offset 24, mask the file type bits - mov rax, [stat + 24] + mov rax, [rel stat + 24] and rax, 0xF000 cmp rax, 0x8000 ; S_IFREG @@ -88,15 +88,15 @@ section .bss ; stat(path, statbuf) mov rax, 4 mov rdi, %1 - lea rsi, [stat] + lea rsi, [rel stat] syscall cmp rax, 0 jl %%fail ; some buffers are taken from httputils.asm, should clean that up one day - mov rax, [stat + 88] ; st_mtime is at offset 88 in struct stat - mov [date_timespec], rax + mov rax, [rel stat + 88] ; st_mtime is at offset 88 in struct stat + mov [rel date_timespec], rax ; gmtime_r(&tv_sec, &date_tm_buf) mov rdi, date_timespec @@ -135,13 +135,13 @@ section .bss ; stat(path, statbuf) mov rax, 4 mov rdi, %1 - lea rsi, [stat] + lea rsi, [rel stat] syscall cmp rax, 0 jl %%fail - mov %2, [stat + 48] ; st_size is at offset 48 in struct stat + mov %2, [rel stat + 48] ; st_size is at offset 48 in struct stat jmp %%done %%fail: diff --git a/macros/httputils.asm b/macros/httputils.asm index a97aa52..485811a 100644 --- a/macros/httputils.asm +++ b/macros/httputils.asm @@ -188,7 +188,7 @@ section .bss jg %%fh_not_found ; first-char check before doing the full comparison - movzx rax, byte [%3] + movzx rax, byte [rel %3] cmp byte [rsi + r8], al jne %%fh_next @@ -250,7 +250,7 @@ section .bss %%fh_copy: ; copy the measured value into the output buffer - lea rdi, [%5] + lea rdi, [rel %5] lea rax, [rsi + r8] APPEND rdi, rax, r9 @@ -263,7 +263,7 @@ section .bss jmp %%fh_scan %%fh_not_found: - mov byte [%5], 0 ; zero out the buffer so callers don't see stale data + mov byte [rel %5], 0 ; zero out the buffer so callers don't see stale data %%fh_out: %endmacro @@ -447,7 +447,7 @@ section .bss jmp %%auth_scan %%not_found: - mov byte [%3], 0 ; null-term on failure (already done on success by b64_dec) + mov byte [rel %3], 0 ; null-term on failure (already done on success by b64_dec) %%done: %endmacro @@ -519,9 +519,9 @@ section .bss syscall ; add offset to tv_sec - mov rax, [date_timespec] + mov rax, [rel date_timespec] add rax, %1 - mov [date_timespec], rax + mov [rel date_timespec], rax ; gmtime_r(&tv_sec, &date_tm_buf) mov rdi, date_timespec diff --git a/macros/logutils.asm b/macros/logutils.asm index 4e6b975..6542692 100644 --- a/macros/logutils.asm +++ b/macros/logutils.asm @@ -278,7 +278,7 @@ section .bss ; Clobbers: rax, rdi, rsi, rdx, rcx %macro LOG_INFO 2 ; check if we should log or not - cmp byte [log_level], 0 ; log lvl none = skip + cmp byte [rel log_level], 0 ; log lvl none = skip je %%end %%log: @@ -297,7 +297,7 @@ section .bss ; Clobbers: rax, rdi, rsi, rdx, rcx %macro LOG_WARNING 2 ; check if we should log or not - cmp byte [log_level], 0 ; log lvl none = skip + cmp byte [rel log_level], 0 ; log lvl none = skip je %%end %%log: @@ -316,7 +316,7 @@ section .bss ; Clobbers: rax, rdi, rsi, rdx, rcx %macro LOG_ERR 2 ; check if we should log or not - cmp byte [log_level], 0 ; log lvl none = skip + cmp byte [rel log_level], 0 ; log lvl none = skip je %%end %%log: @@ -336,7 +336,7 @@ section .bss ; Clobbers: rax, rdi, rsi, rdx, rcx %macro LOG_DEBUG 2 ; check if we should log or not - cmp byte [log_level], 2 ; log lvl none = skip + cmp byte [rel log_level], 2 ; log lvl none = skip jne %%end %%log: @@ -361,7 +361,7 @@ section .bss ; Clobbers: rax, rbx, rdi, rsi, rdx, rcx, r9 %macro LOG_PORT 0 ; check if we should log or not - cmp byte [log_level], 0 ; log lvl none = skip + cmp byte [rel log_level], 0 ; log lvl none = skip je %%end %%log: @@ -377,7 +377,7 @@ section .bss PRINT log_two_dots, log_two_dots_len ; ":" ; port int to ascii - movzx rbx, word [port] + movzx rbx, word [rel port] ITOA rbx, log_port_buf, r9 PRINTN log_port_buf, r9 ; XXXX @@ -403,19 +403,19 @@ section .bss %macro LOG_REQUEST_CLFE 1 ; check if we should log or not - cmp qword [log_file], 1 + cmp qword [rel log_file], 1 jne %%pt1 ; log to file = log - cmp byte [log_level], 0 ; not to file + log lvl none = skip + cmp byte [rel log_level], 0 ; not to file + log lvl none = skip je %%end %%pt1: CLB ; clear the log buffer before building - lea r8, [log_buffer] ; r8 = write pointer into log_buffer + lea r8, [rel log_buffer] ; r8 = write pointer into log_buffer ; pt. 1: ip - lea r10, [real_ip] + lea r10, [rel real_ip] STRLEN r10, rcx APPEND r8, r10, rcx APPEND r8, log_space, log_space_len @@ -427,7 +427,7 @@ section .bss %%pt3: ; pt. 3: auth - lea r10, [username] + lea r10, [rel username] STRLEN r10, rcx cmp rcx, 0 ; if empty, no auth @@ -478,7 +478,7 @@ section .bss %%pt5: APPEND r8, log_quotation_mark, log_quotation_mark_len - lea r10, [request] + lea r10, [rel request] xor r9, r9 %%req_scan: @@ -508,7 +508,7 @@ section .bss %%pt6: ; pt. 6: status code - movzx r10, word [last_status] + movzx r10, word [rel last_status] ITOA r10, status_buf, r9 APPEND r8, status_buf, r9 @@ -573,7 +573,7 @@ section .bss APPEND r8, sysutils_newline, 1 ; flush the whole log line in one shot - lea rsi, [log_buffer] + lea rsi, [rel log_buffer] mov rdx, r8 sub rdx, rsi ; length = write pointer - base PRINTF %1, log_buffer, rdx diff --git a/macros/strutils.asm b/macros/strutils.asm index be4a51e..892c5d8 100644 --- a/macros/strutils.asm +++ b/macros/strutils.asm @@ -68,7 +68,7 @@ push rdi lea rsi, [%1] - lea rdi, [%2] + lea rdi, [rel %2] %%loop: mov al, [rsi] @@ -111,8 +111,8 @@ push rsi push rdi - lea rsi, [%1] ; rsi = read pointer - lea rdi, [%3] ; rdi = write pointer (left buffer) + lea rsi, [rel %1] ; rsi = read pointer + lea rdi, [rel %3] ; rdi = write pointer (left buffer) xor %5, %5 ; assume not found %%copy_left: @@ -135,7 +135,7 @@ inc rsi ; skip the split char mov byte [rdi], 0 ; null-terminate out_a - lea rdi, [%4] ; switch to right buffer + lea rdi, [rel %4] ; switch to right buffer %%copy_right: mov al, [rsi] @@ -150,7 +150,7 @@ %%null_term_right: mov byte [rdi], 0 ; null-terminate out_a - lea rdi, [%4] + lea rdi, [rel %4] mov byte [rdi], 0 ; out_b is empty %%done: @@ -165,10 +165,10 @@ ; %2: byte flag to set (e.g. serve_dots) ; Clobbers: nothing %macro BOOL_FLAG 2 - cmp dword [%1], 0x65757274 ; "true" + cmp dword [rel %1], 0x65757274 ; "true" jne %%done - mov byte [%2], 1 + mov byte [rel %2], 1 %%done: %endmacro @@ -256,12 +256,12 @@ %macro BUILDPATH 3 ; if either part is empty, leave dest empty and bail - cmp byte [%2], 0 + cmp byte [rel %2], 0 je %%done - cmp byte [%3], 0 + cmp byte [rel %3], 0 je %%done - lea r8, [%1] + lea r8, [rel %1] AAPPEND r8, %2 AAPPEND r8, %3 mov byte [r8], 0 ; null-terminate @@ -337,7 +337,7 @@ ; Clobbers: rax, rbx, rcx, rdx, rsi, rdi %macro B64_DECODE 3 lea rsi, [%1] ; rsi = read pointer (src) - lea rdi, [%2] ; rdi = write pointer (dst) + lea rdi, [rel %2] ; rdi = write pointer (dst) xor %3, %3 ; output byte count = 0 %%loop: @@ -513,7 +513,7 @@ ; Clobbers: rax, rbx, rcx, rdx, rdi, rsi %macro ITOA 3 mov rax, %1 - lea rdi, [%2 + 19] + lea rdi, [rel %2 + 19] mov byte [rdi], 0 xor %3, %3 @@ -534,7 +534,7 @@ jnz %%loop lea rsi, [rdi] - lea rdi, [%2] + lea rdi, [rel %2] mov rcx, %3 rep movsb @@ -548,7 +548,7 @@ ; Clobbers: rax, rbx, rsi %macro ATOI 2 xor %2, %2 - lea rsi, [%1] + lea rsi, [rel %1] %%loop: movzx rbx, byte [rsi] diff --git a/macros/whatmimeisthat.asm b/macros/whatmimeisthat.asm index 1640042..37ec044 100644 --- a/macros/whatmimeisthat.asm +++ b/macros/whatmimeisthat.asm @@ -282,7 +282,7 @@ section .text lea rax, [rsi + 1] ; rax = ptr to extension (skip the dot) ; go to the mime_table looking for a match - lea rsi, [mime_table] + lea rsi, [rel mime_table] %%loop: mov rcx, [rsi] ; ext_ptr @@ -321,7 +321,7 @@ section .text jmp %%done %%unknown: - lea %2, [mime_type_octet] + lea %2, [rel mime_type_octet] %%done: pop rdx diff --git a/program.asm b/program.asm index 044939b..53bc4d0 100644 --- a/program.asm +++ b/program.asm @@ -113,7 +113,7 @@ _start: call pre_serve - cmp byte [log_level], 0 + cmp byte [rel log_level], 0 je .start_server ; skip the log if log lvl is none LF @@ -124,7 +124,7 @@ _start: ; listen(fd, backlog) mov rax, 50 mov rdi, r15 - movzx rsi, byte [max_requests] + movzx rsi, byte [rel max_requests] syscall LOG_PORT @@ -140,7 +140,7 @@ _start: mov rdx, client_addr_len syscall - cmp byte [shutdown], 1 + cmp byte [rel shutdown], 1 je .shutdown cmp rax, -4 @@ -152,15 +152,15 @@ _start: mov r14, rax ; r14 will contain the client file descriptor .wait_for_slot: - movzx rax, word [process_count] - cmp ax, [max_requests] + movzx rax, word [rel process_count] + cmp ax, [rel max_requests] jb .do_fork ; try reaping first in case some just finished call .reap_loop - movzx rax, word [process_count] - cmp ax, [max_requests] + movzx rax, word [rel process_count] + cmp ax, [rel max_requests] jb .do_fork ; still full, drop the connection and warn @@ -177,8 +177,8 @@ _start: .do_fork: ; save client_addr to stack before forking to avoid race conds - push qword [client_addr + 8] - push qword [client_addr] + push qword [rel client_addr + 8] + push qword [rel client_addr] ; spawn a child process to handle this request ; fork() @@ -203,15 +203,15 @@ _start: ITOA r10, current_pid_str, rcx ; set the socket options, in this case a read timeout on the socket fd - movzx rax, word [linger_to] - mov qword [drain_timeval], rax ; tv_sec + movzx rax, word [rel linger_to] + mov qword [rel drain_timeval], rax ; tv_sec ; setsockopt(sockfd, level, optname, optval, optlen) mov rax, 54 mov rdi, r14 mov rsi, 1 ; SOL_SOCKET mov rdx, 20 ; SO_RCVTIMEO - lea r10, [drain_timeval] + lea r10, [rel drain_timeval] mov r8, 16 syscall @@ -226,7 +226,7 @@ _start: ; inet_ntop(af, src, dst, size) mov edi, 2 ; AF_INET lea rsi, [rsp + 4] ; pointer to sin_addr (client_addr + 4) - lea rdx, [client_ip_str] ; output buffer + lea rdx, [rel client_ip_str] ; output buffer mov ecx, 16 ; buffer size call inet_ntop @@ -257,17 +257,17 @@ _start: .get: LOG_DEBUG log_method_get, log_method_get_len - mov byte [request_type], 0 + mov byte [rel request_type], 0 jmp .auth_check .head: LOG_DEBUG log_method_head, log_method_head_len - mov byte [request_type], 1 + mov byte [rel request_type], 1 .auth_check: ; if no auth is configured, go to auth_ok (no auth setuped) - cmp byte [auth_username], 0 + cmp byte [rel auth_username], 0 je .auth_ok PARSE_AUTH_HEADER request, 8192, auth, 264 @@ -284,13 +284,13 @@ _start: ; check if they're the correct ones - STREQ username, auth_username, rcx + STREQ rel username, auth_username, rcx cmp rcx, 0 ; 0 = not equal je .unauthorized - STREQ password, auth_password, rcx + STREQ rel password, auth_password, rcx cmp rcx, 0 je .unauthorized @@ -299,8 +299,8 @@ _start: .auth_ok: ; prepend document_root so the path is relative to it - lea rsi, [document_root] - lea rdi, [path] + lea rsi, [rel document_root] + lea rdi, [rel path] .copy_docroot: mov al, [rsi] @@ -315,7 +315,7 @@ _start: jmp .copy_docroot .copy_docroot_done: - lea rax, [path] + lea rax, [rel path] sub rdi, rax ; rdi = docroot length mov rbx, rdi ; rbx = docroot length for offsetting @@ -332,7 +332,7 @@ _start: mov byte [path + rax + 1], 0 - STRCUT path, '?' ; remove the ?query=string, we won't process it as a static site + STRCUT rel path, '?' ; remove the ?query=string, we won't process it as a static site push rax call dbg_path_resolved @@ -342,7 +342,7 @@ _start: jne .check_dotfile .add_index: - mov byte [is_dir], 1 ; for later processing + mov byte [rel is_dir], 1 ; for later processing mov al, [rsi] mov [rdi], al @@ -355,12 +355,12 @@ _start: .check_dotfile: ; check if someone is trying to get a dotfile - cmp byte [serve_dots], 1 ; if the user want to serve dotfiles, just skip + cmp byte [rel serve_dots], 1 ; if the user want to serve dotfiles, just skip je .check_exists - PATH_HAS_DOT path, rcx + PATH_HAS_DOT rel path, rcx - cmp rcx, 0 ; 0 = not found, 1 = found + cmp rcx, 0 ; 0 = not found, 1 = found je .check_exists call dbg_dotfile_blocked @@ -368,7 +368,7 @@ _start: .check_exists: ; check if the file exists before continuing - lea rdi, [path] + lea rdi, [rel path] FILE_EXISTS rdi @@ -386,7 +386,7 @@ _start: jmp .forbidden .add_slash: - lea rdi, [path] + lea rdi, [rel path] .find_path_end: cmp byte [rdi], 0 @@ -399,20 +399,20 @@ _start: mov byte [rdi], '/' inc rdi ; rdi now points past the slash (= where index_file goes) - lea rsi, [index_file] + lea rsi, [rel index_file] jmp .add_index .ok: - lea r13, [response] - lea r12, [response] - lea r10, [path] - mov [file_to_serve], r10 + lea r13, [rel response] + lea r12, [rel response] + lea r10, [rel path] + mov [rel file_to_serve], r10 ; check for If-Modified-Since header PARSE_IMS_HEADER request, 8192, header_time - cmp byte [header_time], 0 ; no ims header = serve + cmp byte [rel header_time], 0 ; no ims header = serve je .ok_modified ; otherwise, process the ims thing and eventually return a 304 @@ -423,14 +423,14 @@ _start: ; stat(path, statbuf) mov rax, 4 - mov rdi, [file_to_serve] - lea rsi, [stat] ; [stat] is from fileutils.asm + mov rdi, [rel file_to_serve] + lea rsi, [rel stat] ; [stat] is from fileutils.asm syscall cmp rax, 0 jl .ok_modified - mov rax, [stat + 88] ; st_mtime + mov rax, [rel stat + 88] ; st_mtime cmp rax, rbx ; file_mtime >= ims_time? jle .not_modified @@ -441,90 +441,90 @@ _start: sub r12, r13 - mov word [last_status], 200 + mov word [rel last_status], 200 jmp .send .method_not_allowed: - lea r13, [response] - lea r12, [response] - mov qword [file_to_serve], errordoc_405_path + lea r13, [rel response] + lea r12, [rel response] + mov qword [rel file_to_serve], errordoc_405_path mov rdi, 405 call .write_header sub r12, r13 - mov word [last_status], 405 + mov word [rel last_status], 405 jmp .send .not_found: - cmp byte [is_dir], 1 ; if it's a dir, but with no index file, send a 403 instead + cmp byte [rel is_dir], 1 ; if it's a dir, but with no index file, send a 403 instead je .forbidden - lea r13, [response] - lea r12, [response] - mov qword [file_to_serve], errordoc_404_path + lea r13, [rel response] + lea r12, [rel response] + mov qword [rel file_to_serve], errordoc_404_path mov rdi, 404 call .write_header sub r12, r13 - mov word [last_status], 404 + mov word [rel last_status], 404 jmp .send .forbidden: - lea r13, [response] - lea r12, [response] - mov qword [file_to_serve], errordoc_403_path + lea r13, [rel response] + lea r12, [rel response] + mov qword [rel file_to_serve], errordoc_403_path mov rdi, 403 call .write_header sub r12, r13 - mov word [last_status], 403 + mov word [rel last_status], 403 jmp .send .unauthorized: - mov al, [empty] - mov [username], al ; clear the username field to not send a wrong username in logs + mov al, [rel empty] + mov [rel username], al ; clear the username field to not send a wrong username in logs - lea r13, [response] - lea r12, [response] - mov qword [file_to_serve], errordoc_401_path + lea r13, [rel response] + lea r12, [rel rel response] + mov qword [rel file_to_serve], errordoc_401_path mov rdi, 401 call .write_header sub r12, r13 - mov word [last_status], 401 ; + mov word [rel last_status], 401 ; jmp .send .bad_request: - lea r13, [response] - lea r12, [response] - mov qword [file_to_serve], errordoc_400_path + lea r13, [rel response] + lea r12, [rel response] + mov qword [rel file_to_serve], errordoc_400_path mov rdi, 400 call .write_header sub r12, r13 - mov word [last_status], 400 + mov word [rel last_status], 400 jmp .send .not_modified: - lea r13, [response] - lea r12, [response] - mov qword [file_to_serve], empty + lea r13, [rel response] + lea r12, [rel response] + mov qword [rel file_to_serve], empty mov rdi, 304 call .write_header sub r12, r13 - mov word [last_status], 304 + mov word [rel last_status], 304 jmp .send .write_header: @@ -609,14 +609,14 @@ _start: AAPPEND r12, crlf .header_pragma: - cmp dword [max_age], 0 ; if maxage is < 0, we don't send the pragma: no-cache header - ja .header_last_modified ; jump above (jg unsigned) + cmp dword [rel max_age], 0 ; if maxage is < 0, we don't send the pragma: no-cache header + ja .header_last_modified ; jump above (jg unsigned) AAPPEND r12, pragma_header AAPPEND r12, crlf .header_last_modified: - mov rdi, [file_to_serve] + mov rdi, [rel file_to_serve] cmp byte [rdi], 0 je .header_expires @@ -629,7 +629,7 @@ _start: AAPPEND r12, crlf .header_expires: - mov r8d, dword [max_age] + mov r8d, dword [rel max_age] HTTP_EXPIRE_DATE r8, header_time AAPPEND r12, expires_header @@ -638,7 +638,7 @@ _start: .header_content_type: ; content type detection - mov rdi, [file_to_serve] + mov rdi, [rel file_to_serve] cmp byte [rdi], 0 je .header_content_encoding @@ -654,7 +654,7 @@ _start: .header_content_encoding: ; content type detection - mov rdi, [file_to_serve] + mov rdi, [rel file_to_serve] cmp byte [rdi], 0 je .header_content_length @@ -665,7 +665,7 @@ _start: .header_content_length: ; very similar to the previous one - mov rdi, [file_to_serve] + mov rdi, [rel file_to_serve] cmp byte [rdi], 0 je .accept_ranges_header @@ -697,11 +697,11 @@ _start: PRINTF r14, r13, r12 ; send the headers first ; directly end if it's a HEAD request - cmp byte [request_type], 1 + cmp byte [rel request_type], 1 je .end ; serve the file if one was set - mov r10, [file_to_serve] + mov r10, [rel file_to_serve] test r10, r10 jz .end @@ -748,7 +748,7 @@ _start: ; read(fd, buffer, count) mov rax, 0 mov rdi, r14 - lea rsi, [response] ; we don't use response anymore, empty it in there + lea rsi, [rel response] ; we don't use response anymore, empty it in there mov rdx, 16 syscall @@ -776,7 +776,7 @@ _start: mov rdi, r14 syscall - inc word [process_count] + inc word [rel process_count] call .reap_loop jmp .wait @@ -795,7 +795,7 @@ _start: cmp rax, 0 jle .reap_done ; no child reaped, stop - dec word [process_count] + dec word [rel process_count] call dbg_process_reaped jmp .reap_loop @@ -808,12 +808,12 @@ _start: PARSE_UA_HEADER request, 8192, user_agent, 1024 PARSE_REFERER_HEADER request, 8192, referer, 1024 - cmp byte [use_xri], 1 + cmp byte [rel use_xri], 1 jne .log_req ; check if we need to use the X-Real-IP header PARSE_XRI_HEADER request, 8192, real_ip, 39 - cmp byte [real_ip], 0 + cmp byte [rel real_ip], 0 jne .log_req mov rsi, client_ip_str @@ -822,7 +822,7 @@ _start: rep movsb .log_req: - mov r15, qword [log_file] + mov r15, qword [rel log_file] LOG_REQUEST_CLFE r15 ret