aboutsummaryrefslogtreecommitdiff
path: root/src/inc
diff options
context:
space:
mode:
authorMarvin Borner2020-07-29 15:55:13 +0200
committerMarvin Borner2020-07-29 15:55:13 +0200
commitf092bf03baf3b2c13c9dc462bdc697caddccd347 (patch)
tree90844499041a648692704a3e5b0040634963fb33 /src/inc
parentbe0246208d1fe7727f94221ea7562f9a9cce1659 (diff)
Added elf loading and test app
Diffstat (limited to 'src/inc')
-rw-r--r--src/inc/elf.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/inc/elf.h b/src/inc/elf.h
new file mode 100644
index 0000000..c10ba4e
--- /dev/null
+++ b/src/inc/elf.h
@@ -0,0 +1,61 @@
+// MIT License, Copyright (c) 2020 Marvin Borner
+
+#ifndef ELF_H
+#define ELF_H
+
+#include <def.h>
+
+#define ELF_MAG 0x7F // 0
+#define ELF_32 1 // 4: 32-bit Architecture
+#define ELF_LITTLE 1 // 5: Little Endian
+#define ELF_CURRENT 1 // 6: ELF Current Version
+#define ELF_386 3 // header->machine x86 machine type
+
+#define ET_NONE 0 // Unkown type
+#define ET_REL 1 // Relocatable file
+#define ET_EXEC 2 // Executable file
+
+struct elf_header {
+ u8 ident[16];
+ u16 type;
+ u16 machine;
+ u32 version;
+ u32 entry;
+ u32 phoff;
+ u32 shoff;
+ u32 flags;
+ u16 ehsize;
+ u16 phentsize;
+ u16 phnum;
+ u16 shentsize;
+ u16 shnum;
+ u16 shstrndx;
+};
+
+struct elf_section_header {
+ u32 name;
+ u32 type;
+ u32 flags;
+ u32 addr;
+ u32 offset;
+ u32 size;
+ u32 link;
+ u32 info;
+ u32 addralign;
+ u32 entsize;
+};
+
+struct elf_program_header {
+ u32 type;
+ u32 offset;
+ u32 vaddr;
+ u32 paddr;
+ u32 filesz;
+ u32 memsz;
+ u32 flags;
+ u32 align;
+};
+
+void elf_load(char *path);
+
+#endif