summaryrefslogtreecommitdiff
path: root/include/sys/elf.h
diff options
context:
space:
mode:
authorNathan Lee <me@nwlee.tech>2026-08-12 17:44:17 -0500
committerNathan Lee <me@nwlee.tech>2026-08-12 17:44:17 -0500
commit2c0efd93530c472e96ff3529aee983b53f3b78d9 (patch)
treecc36e7334e162ba67df79333e267ac93b4d984b9 /include/sys/elf.h
parent640a81b3ee366c651286efd1b80b37992cd53282 (diff)
rework project structure
Diffstat (limited to 'include/sys/elf.h')
-rw-r--r--include/sys/elf.h81
1 files changed, 81 insertions, 0 deletions
diff --git a/include/sys/elf.h b/include/sys/elf.h
new file mode 100644
index 0000000..95ed592
--- /dev/null
+++ b/include/sys/elf.h
@@ -0,0 +1,81 @@
+#pragma once
+#include <sys/stddef.h>
+
+#define ELF_MAGIC_LE 0x464C457F
+#define ELF_PAD 0
+
+#define EI_CLASS 4
+#define EI_DATA 5
+#define EI_VERSION 6
+#define EI_OSABI 7
+#define EI_ABI_VERSION 8
+
+#define ELFDATA2LSB 1
+#define ELFDATA2MSB 2
+
+#define ELFCLASS32 1
+#define ELFCLASS64 2
+
+#define EV_CURRENT 1
+
+#ifdef __SYS_LITTLE_ENDIAN__
+ #define ELFHOSTDATA ELFDATA2LSB
+#else
+ #define ELFHOSTDATA ELFDATA2MSB
+#endif
+
+#ifdef __SYS_64_BIT__
+ #define ELFHOSTCLASS ELFCLASS64
+#else
+ #define ELFHOSTCLASS ELFCLASS32
+#endif
+
+struct elf_header {
+ uint8_t e_ident[16];
+
+ uint16_t e_type;
+ uint16_t e_machine;
+ uint32_t e_version;
+
+ uint32_t e_entry;
+ uint32_t e_phoff;
+ uint32_t e_shoff;
+
+ uint32_t e_flags;
+
+ uint16_t e_ehsize;
+ uint16_t e_phentsize;
+ uint16_t e_phnum;
+
+ uint16_t e_shentsize;
+ uint16_t e_shnum;
+ uint16_t e_shstrndx;
+};
+
+struct elf_section_header {
+ uint32_t sh_name;
+ uint32_t sh_type;
+ uint32_t sh_flags;
+ uint32_t sh_addr;
+ uint32_t sh_offset;
+ uint32_t sh_size;
+ uint32_t sh_link;
+ uint32_t sh_info;
+ uint32_t sh_addralign;
+ uint32_t sh_entsize;
+};
+
+struct elf_program_header {
+ uint32_t p_type;
+ uint32_t p_offset;
+ uint32_t p_vaddr;
+ uint32_t p_paddr;
+ uint32_t p_filesz;
+ uint32_t p_memsz;
+ uint32_t p_flags;
+ uint32_t p_align;
+};
+
+int elf_chk_header(struct elf_header *header);
+struct elf_section_header *elf_get_section(struct elf_header *hdr, void *data, uint32_t index);
+char *elf_get_section_name(struct elf_header *hdr, struct elf_section_header *section, void *data);