ZIP indir
0
main
1 dal
git@carbon4code.com:ahmet/dr-quine.git
Ahmet Kerem Sezgin Make filelar tamam
11 commit
dr-quine ASM Sully.s
Sully.s 3.7 KB
val db '5' ; i = 5
global _start
section .text
_start:
    mov al, [val]
    cmp al, '0'
    jbe .fin
    mov r15b, al
    dec r15b
    mov rsi, fname
.pf:
    mov al, [rsi]
    test al, al
    jz .pc
    cmp al, 63
    jne .pf2
    mov [rsi], r15b
.pf2:
    inc rsi
    jmp .pf
.pc:
    mov rsi, cmd
.pc1:
    mov al, [rsi]
    test al, al
    jz .op
    cmp al, 63
    jne .pc2
    mov [rsi], r15b
.pc2:
    inc rsi
    jmp .pc1
.op:
    mov rax, 2
    mov rdi, fname
    mov rsi, 0x241
    mov rdx, 0x1a4
    syscall
    mov r12, rax
    mov r13, buf
    mov rbx, s
.walk:
    mov al, [rbx]
    test al, al
    jz .done
    cmp al, 126
    je .emit
    cmp al, 35
    je .dig
    mov [r13], al
    inc r13
    inc rbx
    jmp .walk
.dig:
    mov [r13], r15b
    inc r13
    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
    mov [r13], al
    inc r13
    jmp .eadv
.nl:
    mov byte [r13], 92
    inc r13
    mov byte [r13], 110
    inc r13
    jmp .eadv
.bt:
    mov byte [r13], 92
    inc r13
    mov byte [r13], 96
    inc r13
    jmp .eadv
.bs:
    mov byte [r13], 92
    inc r13
    mov byte [r13], 92
    inc r13
.eadv:
    inc rsi
    jmp .esc
.eend:
    inc rbx
    jmp .walk
.done:
    mov rax, 1
    mov rdi, r12
    mov rsi, buf
    mov rdx, r13
    sub rdx, buf
    syscall
    mov rax, 3
    mov rdi, r12
    syscall
    mov rax, 59
    mov rdi, sh
    mov rsi, argv
    xor rdx, rdx
    syscall
.fin:
    mov rax, 60
    xor rdi, rdi
    syscall

section .data
sh db '/bin/sh', 0
dashc db '-c', 0
fname db 'Sully_?.s', 0
cmd db 'nasm -f elf64 Sully_?.s -o Sully_?.o && ld Sully_?.o -o Sully_? && ./Sully_?', 0
argv dq sh, dashc, cmd, 0
s: db `val db '#' ; i = #\nglobal _start\nsection .text\n_start:\n    mov al, [val]\n    cmp al, '0'\n    jbe .fin\n    mov r15b, al\n    dec r15b\n    mov rsi, fname\n.pf:\n    mov al, [rsi]\n    test al, al\n    jz .pc\n    cmp al, 63\n    jne .pf2\n    mov [rsi], r15b\n.pf2:\n    inc rsi\n    jmp .pf\n.pc:\n    mov rsi, cmd\n.pc1:\n    mov al, [rsi]\n    test al, al\n    jz .op\n    cmp al, 63\n    jne .pc2\n    mov [rsi], r15b\n.pc2:\n    inc rsi\n    jmp .pc1\n.op:\n    mov rax, 2\n    mov rdi, fname\n    mov rsi, 0x241\n    mov rdx, 0x1a4\n    syscall\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    cmp al, 35\n    je .dig\n    mov [r13], al\n    inc r13\n    inc rbx\n    jmp .walk\n.dig:\n    mov [r13], r15b\n    inc r13\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    mov [r13], al\n    inc r13\n    jmp .eadv\n.nl:\n    mov byte [r13], 92\n    inc r13\n    mov byte [r13], 110\n    inc r13\n    jmp .eadv\n.bt:\n    mov byte [r13], 92\n    inc r13\n    mov byte [r13], 96\n    inc r13\n    jmp .eadv\n.bs:\n    mov byte [r13], 92\n    inc r13\n    mov byte [r13], 92\n    inc r13\n.eadv:\n    inc rsi\n    jmp .esc\n.eend:\n    inc rbx\n    jmp .walk\n.done:\n    mov rax, 1\n    mov rdi, r12\n    mov rsi, buf\n    mov rdx, r13\n    sub rdx, buf\n    syscall\n    mov rax, 3\n    mov rdi, r12\n    syscall\n    mov rax, 59\n    mov rdi, sh\n    mov rsi, argv\n    xor rdx, rdx\n    syscall\n.fin:\n    mov rax, 60\n    xor rdi, rdi\n    syscall\n\nsection .data\nsh db '/bin/sh', 0\ndashc db '-c', 0\nfname db 'Sully_?.s', 0\ncmd db 'nasm -f elf64 Sully_?.s -o Sully_?.o && ld Sully_?.o -o Sully_? && ./Sully_?', 0\nargv dq sh, dashc, cmd, 0\ns: db \`~\`, 0\n\nsection .bss\nbuf resb 65536\n`, 0

section .bss
buf resb 65536