
Reading cmdline args 64 bit asm
By: a guest on
May 3rd, 2012 | syntax:
ASM (NASM) | size: 0.89 KB | hits: 20 | expires: Never
format ELF64 executable 3
sys_write = 1
sys_exit = 0x3c
STDOUT = 1
segment readable executable
entry $
mov rbx,[rsp] ; rcx = argc
lea r8,[rsp+8] ; rsi = &argv[0]
pargs:
dec rbx
jnz @f
mov rsi,[r8]
call strlen
mov rdi,STDOUT
mov eax,sys_write
syscall
jmp finish
@@:
; write(STDOUT, argv[n], argv[n+1]-argv[n])
mov rsi,[r8]
add r8,8
mov rdx,[r8]
sub rdx,rsi
mov rdi,STDOUT
mov eax,sys_write
syscall
mov rdx,1
mov rsi,space
mov rdi,STDOUT
mov eax,sys_write
syscall
jmp pargs
finish:
mov rdx,1
mov rsi,newline
mov rdi,STDOUT
mov eax,sys_write
syscall
mov rdi,0
mov eax,sys_exit
syscall
newline db 0xA
space db ' '
strlen: ; rsi = input string, rdx = output length (trashes rdi(endofstr),ecx(count),al(0))
mov rdi,rsi
xor ecx,ecx
not ecx
xor al,al
cld
repne scasb
not ecx
movsxd rdx,ecx
ret