101 lines
1.1 KiB
ArmAsm
101 lines
1.1 KiB
ArmAsm
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
|