diff options
| author | Nathan Lee <me@nwlee.tech> | 2026-07-26 20:26:58 -0500 |
|---|---|---|
| committer | Nathan Lee <me@nwlee.tech> | 2026-07-26 20:26:58 -0500 |
| commit | dcf065f3438b53b9bfd9628810040f94619d8c18 (patch) | |
| tree | 62ab1212483f87227001b0ec84532990ba4d12dd /include/elf.h | |
| parent | e98a69fd70533aa9f9b2bd1367e1ec158579d4c0 (diff) | |
feat: update ELF parser
- added more header validity checks
- create section name retrieval
Diffstat (limited to 'include/elf.h')
| -rw-r--r-- | include/elf.h | 68 |
1 files changed, 51 insertions, 17 deletions
diff --git a/include/elf.h b/include/elf.h index ad8c550..76c384d 100644 --- a/include/elf.h +++ b/include/elf.h @@ -4,31 +4,52 @@ #define ELF_MAGIC_LE 0x464C457F #define ELF_PAD 0 -#define EI_MAG0 0 -#define EI_MAG1 1 -#define EI_MAG2 2 -#define EI_MAG3 3 #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]; - uint8_t e_type; - uint8_t e_machine; - uint8_t e_version; - uint8_t e_entry; - uint8_t e_phoff; - uint8_t e_shoff; - uint8_t e_flags; - uint8_t e_ehsize; - uint8_t e_phentsize; - uint8_t e_phnum; - uint8_t e_shentsize; - uint8_t e_shnum; - uint8_t e_shstrndx; + + 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 { @@ -44,4 +65,17 @@ struct elf_section_header { 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); |
