ZIP indir
0
main
1 dal
git@carbon4code.com:ahmet/dr-quine.git
Ahmet Kerem Sezgin Make filelar tamam
11 commit
dr-quine ASM Grace.s
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