Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bits 64
- org 400000h
- ; start ELF header
- ehdr:
- db 0x7f,"ELF",2,1,1,0 ; e_ident
- times 8 db 0
- dw 2 ; e_type ; ELFCLASS64
- dw 62 ; e_machine ; EM_X86_64
- dd 1 ; e_version ; EV_CURRENT
- dq _start ; e_entry
- dq phdr - $$ ; e_phoff
- dq shdr - $$ ; e_shoff
- dd 0 ; e_flags
- dw ehsize ; e_ehsize
- dw phentsize ; e_phentsize
- dw phnum ; e_phnum
- dw shentsize ; e_shentsize
- dw shnum ; e_shnum
- dw shstrndx ; e_shstrndx
- ; end ELF header
- ehsize equ $ - ehdr
- ; start program headers
- phdr:
- ; 0
- dd 1 ; p_type ; PT_LOAD
- dd 5 ; p_flags ; PF_X | PF_R
- dq 0 ; p_offset
- dq $$ ; p_vaddr
- dq $$ ; p_paddr
- dq filesz ; p_filesz
- dq filesz ; p_memsz
- dq 200000h ; p_align
- phentsize equ $ - phdr
- ; 1
- dd 0x65041580 ; p_type ; PT_PAX_FLAGS
- dd 2800h ; p_flags
- dq 0 ; p_offset
- dq 0 ; p_vaddr
- dq 0 ; p_paddr
- dq 0 ; p_filesz
- dq 0 ; p_memsz
- dq 8 ; p_align
- ; end program headers
- phnum equ ($ - phdr) / phentsize
- ; executable code
- s_text:
- ; 00000000004000b0
- _start:
- mov rdi, 6
- mov rax, 3ch
- syscall
- ; exit(6)
- s_text_size equ $ - s_text
- filesz equ $ - $$
- ; section header string table
- s_shstrtab:
- db 0
- sh_symtab_name equ $ - s_shstrtab
- db ".symtab",0
- sh_strtab_name equ $ - s_shstrtab
- db ".strtab",0
- sh_shstrtab_name equ $ - s_shstrtab
- db ".shstrtab",0
- sh_text_name equ $ - s_shstrtab
- db ".text",0
- ; end
- s_shstrtab_size equ $ - s_shstrtab
- db 0
- ; start section header
- shdr:
- ; 0
- dd 0 ; sh_name ; SHN_UNDEF
- dd 0 ; sh_type ; SHT_NULL
- dq 0 ; sh_flags
- dq 0 ; sh_addr
- dq 0 ; sh_offset
- dq 0 ; sh_size
- dd 0 ; sh_link
- dd 0 ; sh_info
- dq 0 ; sh_addralign
- dq 0 ; sh_entsize
- shentsize equ $ - shdr
- ; 1 [.text]
- dd sh_text_name ; sh_name
- dd 1 ; sh_type ; SHT_PROGBITS
- dq 6 ; sh_flags ; SHF_EXECINSTR | SHF_ALLOC
- dq _start ; sh_addr
- dq s_text - $$ ; sh_offset
- dq s_text_size ; sh_size
- dd 0 ; sh_link
- dd 0 ; sh_info
- dq 16 ; sh_addralign
- dq 0 ; sh_entsize
- ; 2 [.shstrtab]
- dd sh_shstrtab_name ; sh_name
- dd 3 ; sh_type ; SHT_STRTAB
- dq 0 ; sh_flags
- dq 0 ; sh_addr
- dq s_shstrtab - $$ ; sh_offset
- dq s_shstrtab_size ; sh_size
- dd 0 ; sh_link
- dd 0 ; sh_info
- dq 1 ; sh_addralign
- dq 0 ; sh_entsize
- shstrndx equ 2
- ; 3 [.symtab]
- dd sh_symtab_name ; sh_name
- dd 2 ; sh_type ; SHT_SYMTAB
- dq 0 ; sh_flags
- dq 0 ; sh_addr
- dq s_symtab - $$ ; sh_offset
- dq s_symtab_size ; sh_size
- dd 4 ; sh_link
- dd 3 ; sh_info
- dq 8 ; sh_addralign
- dq 18h ; sh_entsize
- ; 4 [.strtab]
- dd sh_strtab_name ; sh_name
- dd 3 ; sh_type ; SHT_STRTAB
- dq 0 ; sh_flags
- dq 0 ; sh_addr
- dq s_strtab - $$ ; sh_offset
- dq s_strtab_size ; sh_size
- dd 0 ; sh_link
- dd 0 ; sh_info
- dq 1 ; sh_addralign
- dq 0 ; sh_entsize
- strndx equ 1
- ; end section header
- shnum equ ($ - shdr) / shentsize
- s_symtab:
- ; 0
- dd 0 ; st_name
- db 0 ; st_info
- db 0 ; st_other
- dw 0 ; st_shndx
- dq 0 ; st_value
- dq 0 ; st_size
- ; 1
- dd 0 ; st_name
- db 3 ; st_info ; STT_SECTION
- db 0 ; st_other
- dw 1 ; st_shndx
- dq _start ; st_value
- dq 0 ; st_size
- ; 2 [elf.asm]
- dd st_src_name ; st_name
- db 4 ; st_info ; STT_FILE
- db 0 ; st_other
- dw 0xfff1 ; st_shndx ; SHN_ABS
- dq 0 ; st_value
- dq 0 ; st_size
- ; 3 [_start]
- dd st__start_name ; st_name
- db 0x10 ; st_info
- db 0 ; st_other
- dw 1 ; st_shndx
- dq _start ; st_value
- dq 0 ; st_size
- ; 4 [__bss_start]
- dd st___bss_start_name ; st_name
- db 0x10 ; st_info
- db 0 ; st_other
- dw 0xfff1 ; st_shndx ; SHN_ABS
- dq 6000c6h ; st_value
- dq 0 ; st_size
- ; 5 [_edata]
- dd st__edata_name ; st_name
- db 0x10 ; st_info
- db 0 ; st_other
- dw 0xfff1 ; st_shndx ; SHN_ABS
- dq 6000c6h ; st_value
- dq 0 ; st_size
- ; 6 [_end]
- dd st__end_name ; st_name
- db 0x10 ; st_info
- db 0 ; st_other
- dw 0xfff1 ; st_shndx ; SHN_ABS
- dq 6000c8h ; st_value
- dq 0 ; st_size
- s_symtab_size equ $ - s_symtab
- ; symbol string table
- s_strtab:
- db 0
- st_src_name equ $ - s_strtab
- db "elf.asm",0
- st__start_name equ $ - s_strtab
- db "_start",0
- st___bss_start_name equ $ - s_strtab
- db "__bss_start",0
- st__edata_name equ $ - s_strtab
- db "_edata",0
- st__end_name equ $ - s_strtab
- db "_end",0
- s_strtab_size equ $ - s_strtab
- ; end
Advertisement
Add Comment
Please, Sign In to add comment