Ahmet Kerem Sezgin Make filelar tamam
Grace.s 2.1 KB
; Grace duplicates its own source into Grace_kid.s
%macro SYS 4
mov rax, %1
mov rdi, %2
mov rsi, %3
mov rdx, %4
syscall
%endmacro
%macro PUTC 1
mov byte [r13], %1
inc r13
%endmacro
%macro RUN 0
SYS 2, path, 0x241, 0x1a4
mov r12, rax
mov r13, buf
mov rbx, s
%%walk:
mov al, [rbx]
test al, al
jz %%done
cmp al, 126
je %%emit
PUTC al
inc rbx
jmp %%walk
%%emit:
mov rsi, s
%%esc:
mov al, [rsi]
test al, al
jz %%eend
cmp al, 10
je %%nl
cmp al, 96
je %%bt
cmp al, 92
je %%bs
PUTC al
jmp %%eadv
%%nl:
PUTC 92
PUTC 110
jmp %%eadv
%%bt:
PUTC 92
PUTC 96
jmp %%eadv
%%bs:
PUTC 92
PUTC 92
%%eadv:
inc rsi
jmp %%esc
%%eend:
inc rbx
jmp %%walk
%%done:
mov rdx, r13
sub rdx, buf
SYS 1, r12, buf, rdx
SYS 3, r12, 0, 0
SYS 60, 0, 0, 0
%endmacro
section .data
path: db 'Grace_kid.s', 0
s: db `; Grace duplicates its own source into Grace_kid.s\n%macro SYS 4\n mov rax, %1\n mov rdi, %2\n mov rsi, %3\n mov rdx, %4\n syscall\n%endmacro\n\n%macro PUTC 1\n mov byte [r13], %1\n inc r13\n%endmacro\n\n%macro RUN 0\n SYS 2, path, 0x241, 0x1a4\n mov r12, rax\n mov r13, buf\n mov rbx, s\n%%walk:\n mov al, [rbx]\n test al, al\n jz %%done\n cmp al, 126\n je %%emit\n PUTC al\n inc rbx\n jmp %%walk\n%%emit:\n mov rsi, s\n%%esc:\n mov al, [rsi]\n test al, al\n jz %%eend\n cmp al, 10\n je %%nl\n cmp al, 96\n je %%bt\n cmp al, 92\n je %%bs\n PUTC al\n jmp %%eadv\n%%nl:\n PUTC 92\n PUTC 110\n jmp %%eadv\n%%bt:\n PUTC 92\n PUTC 96\n jmp %%eadv\n%%bs:\n PUTC 92\n PUTC 92\n%%eadv:\n inc rsi\n jmp %%esc\n%%eend:\n inc rbx\n jmp %%walk\n%%done:\n mov rdx, r13\n sub rdx, buf\n SYS 1, r12, buf, rdx\n SYS 3, r12, 0, 0\n SYS 60, 0, 0, 0\n%endmacro\n\nsection .data\npath: db 'Grace_kid.s', 0\ns: db \`~\`, 0\n\nsection .bss\nbuf: resb 65536\n\nsection .text\nglobal _start\n_start:\n RUN\n`, 0
section .bss
buf: resb 65536
section .text
global _start
_start:
RUN