bits 64 default rel global trap global trapsz global cat global sel extern scmap section .data sel: db 1 trapsz: dd cat-trap; buf: db 0 section .text trap: ;mov rax, 60 ;syscall push r8 push r9 push r10 push r11 push r12 push r13 push r14 push r15 push rsi push rbp push rbx push rdx push rcx mov r8, [rdi] mov r9, [rdi+8] mov r10, [rdi+16] mov r11, [rdi+24] mov r12, [rdi+32] mov r13, [rdi+40] mov r14, [rdi+48] mov r15, [rdi+56] mov rsi, [rdi+72] mov rbp, [rdi+80] mov rbx, [rdi+88] mov rdx, [rdi+96] mov rax, [rdi+104] mov rcx, [rdi+112] mov rdi, [rdi+64] syscall pop rcx pop rdx pop rbx pop rbp pop rsi pop r15 pop r14 pop r13 pop r12 pop r11 pop r10 pop r9 pop r8 ret push rbx ;mov ax, word [rel scmap + 2*eax] lea rbx, [scmap] lea rax, [rbx + 2*rax] movzx eax, ax pop rbx ret cat: push r12 push rbx mov r12, rdi ; fd to read mov rbx, rsi ; bytes to read .l: mov eax, 3 ; read mov rdi, r12 lea rsi, [buf] mov rdx, 1 syscall mov eax, 4 ; write mov rdi, 1 lea rsi, [buf] mov rdx, 1 syscall dec rbx jnz .l pop rbx pop r12 ret