[bits 64]

file_load_va: equ 4096 * 40

db 0x7f, 'E', 'L', 'F'
db 2
db 1
db 1
db 0
dq 0
dw 2
dw 0x3e
dd 1
dq entry_point + file_load_va
dq program_headers_start
dq section_headers_start
dd 0
dw 64
dw 0x38
dw 1
dw 0x40
dw 3
dw 2

program_headers_start:
dd 1
dd 5
dq 0
dq file_load_va
dq file_load_va
dq string_table
dq string_table
dq 0x200000

section_headers_start:
times 0x40 db 0

dd text_section_name - string_table
dd 1
dq 6
dq file_load_va
dq 0
dq file_end
dd 0
dd 0
dq 16
dq 0

dd string_table_name - string_table
dd 3
dq 0
dq file_load_va + string_table
dq string_table
dq string_table_end - string_table
dd 0
dd 0
dq 1
dq 0

entry_point:
  mov rax, 1
  mov rdi, 1
  mov rsi, file_load_va + message
  mov rdx, message_length
  syscall
  mov rax, 60
  mov rdi, 0
  syscall

message: db `Hello, world!\n`, 0
message_length: equ $ - message

string_table:
db 0
text_section_name:
db ".text", 0
string_table_name:
db ".shstrtab", 0
string_table_end:

file_end: