From dcf065f3438b53b9bfd9628810040f94619d8c18 Mon Sep 17 00:00:00 2001 From: Nathan Lee Date: Sun, 26 Jul 2026 20:26:58 -0500 Subject: feat: update ELF parser - added more header validity checks - create section name retrieval --- kernel/elf.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'kernel/elf.c') diff --git a/kernel/elf.c b/kernel/elf.c index f1ceb2d..69c4128 100644 --- a/kernel/elf.c +++ b/kernel/elf.c @@ -8,5 +8,34 @@ int elf_chk_header(struct elf_header *header) { return -1; } + if (header->e_ident[EI_CLASS] != ELFHOSTCLASS) { + return -1; + } + + if (header->e_ident[EI_DATA] != ELFHOSTDATA) { + return -1; + } + + if (header->e_ident[EI_VERSION] != EV_CURRENT) { + return -1; + } + return 0; } + +struct elf_section_header *elf_get_section(struct elf_header *hdr, void *data, uint32_t index) { + uint8_t *base = (uint8_t *)data; + + if (index >= hdr->e_shnum) { + return 0; + } + + return (struct elf_section_header *)(base + + hdr->e_shoff + + index * hdr->e_shentsize); +} + +char *elf_get_section_name(struct elf_header *hdr, struct elf_section_header *section, void *data) { + struct elf_section_header *shstrtab = elf_get_section(hdr, data, hdr->e_shstrndx); + return (char *)((uintptr_t)section->sh_name + (uintptr_t)shstrtab->sh_offset + (uintptr_t)data); +} -- cgit v1.2.3