mirror of https://github.com/k3s-io/k3s
58 lines
1.6 KiB
NASM
58 lines
1.6 KiB
NASM
; This is heavily based on https://github.com/tianon/dockerfiles/tree/master/true
|
|
; which is in turn especially thanks to:
|
|
; http://blog.markloiseau.com/2012/05/tiny-64-bit-elf-executables/
|
|
|
|
BITS 64
|
|
org 0x00400000 ; Program load offset
|
|
|
|
; 64-bit ELF header
|
|
ehdr:
|
|
; 1), 0 (ABI ver.)
|
|
db 0x7F, "ELF", 2, 1, 1, 0 ; e_ident
|
|
times 8 db 0 ; reserved (zeroes)
|
|
|
|
dw 2 ; e_type: Executable file
|
|
dw 0x3e ; e_machine: AMD64
|
|
dd 1 ; e_version: current version
|
|
dq _start ; e_entry: program entry address (0x78)
|
|
dq phdr - $$ ; e_phoff program header offset (0x40)
|
|
dq 0 ; e_shoff no section headers
|
|
dd 0 ; e_flags no flags
|
|
dw ehdrsize ; e_ehsize: ELF header size (0x40)
|
|
dw phdrsize ; e_phentsize: program header size (0x38)
|
|
dw 1 ; e_phnum: one program header
|
|
dw 0 ; e_shentsize
|
|
dw 0 ; e_shnum
|
|
dw 0 ; e_shstrndx
|
|
|
|
ehdrsize equ $ - ehdr
|
|
|
|
; 64-bit ELF program header
|
|
phdr:
|
|
dd 1 ; p_type: loadable segment
|
|
dd 5 ; p_flags read and execute
|
|
dq 0 ; p_offset
|
|
dq $$ ; p_vaddr: start of the current section
|
|
dq $$ ; p_paddr: " "
|
|
dq filesize ; p_filesz
|
|
dq filesize ; p_memsz
|
|
dq 0x200000 ; p_align: 2^11=200000 = section alignment
|
|
|
|
; program header size
|
|
phdrsize equ $ - phdr
|
|
|
|
_start:
|
|
; pause()
|
|
|
|
mov al, 34 ; pause syscall number
|
|
syscall
|
|
|
|
; sys_exit(return_code)
|
|
|
|
mov al, 60 ; sys_exit syscall number
|
|
cdq ; Sign-extend eax into edi to return 0 (success)
|
|
syscall
|
|
|
|
; File size calculation
|
|
filesize equ $ - $$
|