TEXT   26
bits 32
Guest on 17th March 2023 01:16:44 PM


  1. BITS 32
  2.  
  3.   org     0x08048000    ; conventional Linux i32 load address
  4.  
  5. ehdr:   ; ELF file header
  6.   db      0x7F, "ELF", 1, 1, 1  ; e_ident
  7.   times   9 db 0
  8.   dw      2               ; e_type     2=executable, 3=shared lib
  9.   dw      3               ; e_machine  3=i32/386
  10.   dd      1               ; e_version  1=current
  11.   dd      _start          ; e_entry    absolute entry point
  12.   dd      phdr - $$       ; e_phoff    file offset to PHT, 0=none
  13.   dd      0               ; e_shoff    file offset to SHT, 0=none
  14.   dd      0               ; e_flags    0 for i386
  15.   dw      ehdrsize        ; e_ehsize   ELF header size
  16.   dw      phdrsize        ; e_phentsize PHT entry size
  17.   dw      1               ; e_phnum    #entries in PHT
  18.   dw      0               ; e_shentsize SHT entry size
  19.   dw      0               ; e_shnum    #entries in SHT
  20.   dw      0               ; e_shstrndx file offset to string table, 0=none
  21. ehdrsize equ $ - ehdr
  22.  
  23. phdr:   ; Program Header Table (PHT) with one entry
  24.   dd      1               ; p_type     1=load into memory
  25.   dd      0               ; p_offset   file offset to start of segment
  26.   dd      $$              ; p_vaddr    virt. address where loaded
  27.   dd      $$              ; p_paddr    abs. address where loaded
  28.   dd      filesize        ; p_filesz   how much loaded from file
  29.   dd      filesize        ; p_memsz    segment size in meory
  30.   dd      5               ; p_flags    permissions, R-X
  31.   dd      0x1000          ; p_align    alignment required
  32. phdrsize equ $ - phdr
  33.  
  34. _start:   ; entry point
  35.   mov     bl, 42          ; return code in bottom 8 bits of EAX
  36.   mov     eax, 1          ; exit function call number
  37.   int     0x80            ; Linux i32 system call
  38.  
  39. filesize equ $ - $$
  40.  
  41. Assemble it, make it executable and run it, displaying the return
  42. code.
  43.  
  44. $ nasm -f bin -o tiny.elf tiny.asm
  45. $ chmod +x tiny.elf
  46. $ ./tiny.elf ; echo $?
  47. 42

Raw Paste

Login or Register to edit or fork this paste. It's free.