Created
September 3, 2022 00:24
-
-
Save typeswitch-dev/8c0baef76ed6086ed2ce24193bc4d5b0 to your computer and use it in GitHub Desktop.
Minimal Linux x86-64 program written in NASM assembly
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
bits 64 | |
org 0x4000000 | |
elf_header: | |
.size equ .end - $ | |
.e_ident db 0x7F, 'E', 'L', 'F' ; EI_MAG0 ... EI_MAG3 | |
db 2 ; EI_CLASS: 1 => 32 bits, 2 => 64 bits | |
db 1 ; EI_DATA: 1 => lil endian, 2 => big " | |
db 1 ; EI_VERSION: original version | |
db 0 ; EI_OSABI: 0 => System V ABI | |
db 0 ; EI_ABIVERSION | |
times 7 db 0 ; EI_PAD: padding | |
.e_type dw 0x0002 ; executable file | |
.e_machine dw 0x003E ; target architecture | |
.e_version dd 1 ; original version | |
.e_entry dq start ; program entry point | |
.e_phoff dq program_header.off ; program header offset | |
.e_shoff dq section_header.off ; section header offset | |
.e_flags dd 0x0 ; flags depending on target | |
.e_ehsize dw elf_header.size ; size of elf_header | |
.e_phentsiz dw program_header.esize ; size of a program header entry | |
.e_phnum dw program_header.count ; number of program header entries | |
.e_shentsiz dw section_header.esize ; size of a section header entry | |
.e_shnum dw section_header.count ; number of section header entries | |
.e_shstrndx dw 0 ; index of section names entry | |
.end: | |
program_header: | |
.off equ $ - elf_header | |
.esize equ .eend - $ | |
.count equ 1 | |
.p_type dd 0x1 ; PT_LOAD: loadable segment | |
.p_flags dd 0x7 ; flags, RWX permission | |
.p_offset dq 0 ; offset of segment | |
.p_vaddr dq program.start ; virtual address of segment | |
.p_paddr dq 0 ; physical address of segment | |
.p_filesz dq program.size ; size in file | |
.p_memsz dq program.size ; size in memory | |
.p_align dq 0 ; align | |
.eend: | |
section_header: ; no section header required! | |
.off equ 0 | |
.count equ 0 | |
.esize equ 0 | |
start: mov rax, 60 ; exit syscall | |
mov rdi, 42 ; exit code | |
syscall | |
program: | |
.start equ elf_header | |
.end equ $ | |
.size equ .end - .start | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment