Ahmet Kerem Sezgin Make filelar tamam
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