Guest User

Untitled

a guest
Sep 3rd, 2011
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. bits 64
  2.     org 400000h
  3. ; start ELF header
  4. ehdr:
  5.     db  0x7f,"ELF",2,1,1,0      ; e_ident
  6.     times 8 db 0
  7.     dw  2                       ; e_type        ; ELFCLASS64
  8.     dw  62                      ; e_machine     ; EM_X86_64
  9.     dd  1                       ; e_version     ; EV_CURRENT
  10.     dq  _start                  ; e_entry
  11.     dq  phdr - $$               ; e_phoff
  12.     dq  shdr - $$               ; e_shoff
  13.     dd  0                       ; e_flags
  14.     dw  ehsize                  ; e_ehsize
  15.     dw  phentsize               ; e_phentsize
  16.     dw  phnum                   ; e_phnum
  17.     dw  shentsize               ; e_shentsize
  18.     dw  shnum                   ; e_shnum
  19.     dw  shstrndx                ; e_shstrndx
  20. ; end ELF header
  21. ehsize      equ     $ - ehdr
  22.  
  23. ; start program headers
  24. phdr:
  25.     ; 0
  26.     dd  1                       ; p_type        ; PT_LOAD
  27.     dd  5                       ; p_flags       ; PF_X | PF_R
  28.     dq  0                       ; p_offset
  29.     dq  $$                      ; p_vaddr
  30.     dq  $$                      ; p_paddr
  31.     dq  filesz                  ; p_filesz
  32.     dq  filesz                  ; p_memsz
  33.     dq  200000h                 ; p_align
  34. phentsize   equ     $ - phdr
  35.  
  36.     ; 1
  37.     dd  0x65041580              ; p_type        ; PT_PAX_FLAGS
  38.     dd  2800h                   ; p_flags
  39.     dq  0                       ; p_offset
  40.     dq  0                       ; p_vaddr
  41.     dq  0                       ; p_paddr
  42.     dq  0                       ; p_filesz
  43.     dq  0                       ; p_memsz
  44.     dq  8                       ; p_align
  45. ; end program headers
  46. phnum       equ     ($ - phdr) / phentsize
  47.  
  48. ; executable code
  49. s_text:
  50. ; 00000000004000b0
  51. _start:
  52.     mov rdi, 6
  53.     mov rax, 3ch
  54.     syscall
  55.     ; exit(6)
  56. s_text_size equ     $ - s_text
  57. filesz      equ     $ - $$
  58.  
  59. ; section header string table
  60. s_shstrtab:
  61.     db 0
  62.         sh_symtab_name      equ     $ - s_shstrtab
  63.     db ".symtab",0
  64.         sh_strtab_name      equ     $ - s_shstrtab
  65.     db ".strtab",0
  66.         sh_shstrtab_name    equ     $ - s_shstrtab
  67.     db ".shstrtab",0
  68.         sh_text_name        equ     $ - s_shstrtab
  69.     db ".text",0
  70. ; end
  71. s_shstrtab_size equ     $ - s_shstrtab
  72.  
  73. db 0
  74.  
  75. ; start section header
  76. shdr:
  77.     ; 0
  78.     dd  0                       ; sh_name       ; SHN_UNDEF
  79.     dd  0                       ; sh_type       ; SHT_NULL
  80.     dq  0                       ; sh_flags
  81.     dq  0                       ; sh_addr
  82.     dq  0                       ; sh_offset
  83.     dq  0                       ; sh_size
  84.     dd  0                       ; sh_link
  85.     dd  0                       ; sh_info
  86.     dq  0                       ; sh_addralign
  87.     dq  0                       ; sh_entsize
  88. shentsize   equ     $ - shdr
  89.  
  90.     ; 1 [.text]
  91.     dd  sh_text_name            ; sh_name
  92.     dd  1                       ; sh_type       ; SHT_PROGBITS
  93.     dq  6                       ; sh_flags      ; SHF_EXECINSTR | SHF_ALLOC
  94.     dq  _start                  ; sh_addr
  95.     dq  s_text - $$             ; sh_offset
  96.     dq  s_text_size             ; sh_size
  97.     dd  0                       ; sh_link
  98.     dd  0                       ; sh_info
  99.     dq  16                      ; sh_addralign
  100.     dq  0                       ; sh_entsize
  101.  
  102.     ; 2 [.shstrtab]
  103.     dd  sh_shstrtab_name        ; sh_name
  104.     dd  3                       ; sh_type       ; SHT_STRTAB
  105.     dq  0                       ; sh_flags
  106.     dq  0                       ; sh_addr
  107.     dq  s_shstrtab - $$         ; sh_offset
  108.     dq  s_shstrtab_size         ; sh_size
  109.     dd  0                       ; sh_link
  110.     dd  0                       ; sh_info
  111.     dq  1                       ; sh_addralign
  112.     dq  0                       ; sh_entsize
  113. shstrndx    equ     2
  114.  
  115.     ; 3 [.symtab]
  116.     dd  sh_symtab_name          ; sh_name
  117.     dd  2                       ; sh_type       ; SHT_SYMTAB
  118.     dq  0                       ; sh_flags
  119.     dq  0                       ; sh_addr
  120.     dq  s_symtab - $$           ; sh_offset
  121.     dq  s_symtab_size           ; sh_size
  122.     dd  4                       ; sh_link
  123.     dd  3                       ; sh_info
  124.     dq  8                       ; sh_addralign
  125.     dq  18h                     ; sh_entsize
  126.  
  127.     ; 4 [.strtab]
  128.     dd  sh_strtab_name          ; sh_name
  129.     dd  3                       ; sh_type       ; SHT_STRTAB
  130.     dq  0                       ; sh_flags
  131.     dq  0                       ; sh_addr
  132.     dq  s_strtab - $$           ; sh_offset
  133.     dq  s_strtab_size           ; sh_size
  134.     dd  0                       ; sh_link
  135.     dd  0                       ; sh_info
  136.     dq  1                       ; sh_addralign
  137.     dq  0                       ; sh_entsize
  138. strndx      equ     1
  139. ; end section header
  140. shnum       equ     ($ - shdr) / shentsize
  141.  
  142. s_symtab:
  143.     ; 0
  144.     dd  0                       ; st_name
  145.     db  0                       ; st_info
  146.     db  0                       ; st_other
  147.     dw  0                       ; st_shndx
  148.     dq  0                       ; st_value
  149.     dq  0                       ; st_size
  150.  
  151.     ; 1
  152.     dd  0                       ; st_name
  153.     db  3                       ; st_info       ; STT_SECTION
  154.     db  0                       ; st_other
  155.     dw  1                       ; st_shndx
  156.     dq  _start                  ; st_value
  157.     dq  0                       ; st_size
  158.  
  159.     ; 2 [elf.asm]
  160.     dd  st_src_name             ; st_name
  161.     db  4                       ; st_info       ; STT_FILE
  162.     db  0                       ; st_other
  163.     dw  0xfff1                  ; st_shndx      ; SHN_ABS
  164.     dq  0                       ; st_value
  165.     dq  0                       ; st_size
  166.  
  167.     ; 3 [_start]
  168.     dd  st__start_name          ; st_name
  169.     db  0x10                    ; st_info
  170.     db  0                       ; st_other
  171.     dw  1                       ; st_shndx
  172.     dq  _start                  ; st_value
  173.     dq  0                       ; st_size
  174.  
  175.     ; 4 [__bss_start]
  176.     dd  st___bss_start_name     ; st_name
  177.     db  0x10                    ; st_info
  178.     db  0                       ; st_other
  179.     dw  0xfff1                  ; st_shndx      ; SHN_ABS
  180.     dq  6000c6h                 ; st_value
  181.     dq  0                       ; st_size
  182.  
  183.     ; 5 [_edata]
  184.     dd  st__edata_name          ; st_name
  185.     db  0x10                    ; st_info
  186.     db  0                       ; st_other
  187.     dw  0xfff1                  ; st_shndx      ; SHN_ABS
  188.     dq  6000c6h                 ; st_value
  189.     dq  0                       ; st_size
  190.  
  191.     ; 6 [_end]
  192.     dd  st__end_name            ; st_name
  193.     db  0x10                    ; st_info
  194.     db  0                       ; st_other
  195.     dw  0xfff1                  ; st_shndx      ; SHN_ABS
  196.     dq  6000c8h                 ; st_value
  197.     dq  0                       ; st_size
  198. s_symtab_size   equ     $ - s_symtab
  199.  
  200. ; symbol string table
  201. s_strtab:
  202.     db 0
  203.         st_src_name             equ     $ - s_strtab
  204.     db "elf.asm",0
  205.         st__start_name          equ     $ - s_strtab
  206.     db "_start",0
  207.         st___bss_start_name     equ     $ - s_strtab
  208.     db "__bss_start",0
  209.         st__edata_name          equ     $ - s_strtab
  210.     db "_edata",0
  211.         st__end_name            equ     $ - s_strtab
  212.     db "_end",0
  213. s_strtab_size   equ     $ - s_strtab
  214. ; end
Advertisement
Add Comment
Please, Sign In to add comment