Don't like ads? PRO users don't see any ads ;-)
Guest

Reading cmdline args 64 bit asm

By: a guest on May 3rd, 2012  |  syntax: ASM (NASM)  |  size: 0.89 KB  |  hits: 20  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. format ELF64 executable 3
  2.  
  3. sys_write = 1
  4. sys_exit = 0x3c
  5. STDOUT = 1
  6.  
  7. segment readable executable
  8.  
  9. entry $
  10.  
  11.         mov     rbx,[rsp] ; rcx = argc
  12.         lea     r8,[rsp+8] ; rsi = &argv[0]
  13.  
  14.   pargs:
  15.         dec     rbx
  16.         jnz     @f
  17.  
  18.         mov     rsi,[r8]
  19.         call    strlen
  20.         mov     rdi,STDOUT
  21.         mov     eax,sys_write
  22.         syscall
  23.  
  24.         jmp     finish
  25.  
  26.   @@:
  27.         ; write(STDOUT, argv[n], argv[n+1]-argv[n])
  28.         mov     rsi,[r8]
  29.         add     r8,8
  30.         mov     rdx,[r8]
  31.         sub     rdx,rsi
  32.         mov     rdi,STDOUT
  33.         mov     eax,sys_write
  34.         syscall
  35.  
  36.         mov     rdx,1
  37.         mov     rsi,space
  38.         mov     rdi,STDOUT
  39.         mov     eax,sys_write
  40.         syscall
  41.         jmp     pargs
  42.   finish:
  43.  
  44.         mov     rdx,1
  45.         mov     rsi,newline
  46.         mov     rdi,STDOUT
  47.         mov     eax,sys_write
  48.         syscall
  49.  
  50.         mov     rdi,0
  51.         mov     eax,sys_exit
  52.         syscall
  53.  
  54.         newline db 0xA
  55.         space db ' '
  56.  
  57.   strlen: ; rsi = input string, rdx = output length (trashes rdi(endofstr),ecx(count),al(0))
  58.         mov     rdi,rsi
  59.         xor     ecx,ecx
  60.         not     ecx
  61.         xor     al,al
  62.         cld
  63.         repne   scasb
  64.         not     ecx
  65.         movsxd  rdx,ecx
  66.         ret