From 1b1e14b85660fc5b072fe36fd0c15b76f74d445f Mon Sep 17 00:00:00 2001 From: xamidev Date: Wed, 3 Sep 2025 15:23:52 +0200 Subject: [PATCH] ELF header read --- .gdb_history | 3 ++ .helper.c.swp | Bin 0 -> 12288 bytes helpelf | Bin 0 -> 19520 bytes helper.c | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++ makefile | 8 +++++ 5 files changed, 101 insertions(+) create mode 100644 .gdb_history create mode 100644 .helper.c.swp create mode 100755 helpelf create mode 100644 helper.c create mode 100644 makefile diff --git a/.gdb_history b/.gdb_history new file mode 100644 index 0000000..f19f752 --- /dev/null +++ b/.gdb_history @@ -0,0 +1,3 @@ +file helpelf +r +q diff --git a/.helper.c.swp b/.helper.c.swp new file mode 100644 index 0000000000000000000000000000000000000000..b7b19693b3a0a90ff7cbdd8774eb08a71e405852 GIT binary patch literal 12288 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 +#include +#include +#include +#include + +#define MAX_FILENAME 256 +#define EI_NIDENT 16 +#define MAX_HEADER_LEN 2048 + +#define Elf32_Half uint16_t +#define Elf32_Word uint32_t +#define Elf32_Addr uint32_t +#define Elf32_Off uint32_t + +struct Elf32_Ehdr +{ + unsigned char e_ident[EI_NIDENT]; + Elf32_Half e_type; + Elf32_Half e_machine; + Elf32_Word e_version; + Elf32_Addr e_entry; + Elf32_Off e_phoff; + Elf32_Off e_shoff; + Elf32_Word e_flags; + Elf32_Half e_ehsize; + Elf32_Half e_phentsize; + Elf32_Half e_phnum; + Elf32_Half e_shentsize; + Elf32_Half e_shnum; + Elf32_Half e_shstrndx; +}; + +int parse_elf_header32(struct Elf32_Ehdr* header, FILE* fp) +{ + fread(header, sizeof(struct Elf32_Ehdr), 1, fp); + return EXIT_SUCCESS; +} + +int main(int argc, char* argv[]) +{ + // Accessing file arg + if (argc < 2) + { + printf("Usage: %s \n", argv[0]); + return -EINVAL; + } + + char* filename = argv[1]; + + // 0. is ELF32 or ELF64 ??? + // 1. create ELF header struct + // 2. populate ELF header struct + // 3. display ELF header struct + + if (!filename) + { + printf("Error parsing filename.\n"); + return -EINVAL; + } + + FILE* elf_file = fopen(filename, "rb"); + + if (!elf_file) + { + printf("Couldn't open file '%s'\n", filename); + return -ENOENT; + } + + struct Elf32_Ehdr elf_header = {0}; + int res = parse_elf_header32(&elf_header, elf_file); + if (res) + { + printf("Error parsing ELF header.\n"); + return -EINVAL; + } + + if (!(memcmp(elf_header.e_ident, "\177ELF", 4) == 0)) + { + printf("Not an ELF file..\n"); + return -EINVAL; + } + + printf("ELF file\n"); + + return EXIT_SUCCESS; +} diff --git a/makefile b/makefile new file mode 100644 index 0000000..700483f --- /dev/null +++ b/makefile @@ -0,0 +1,8 @@ +all: + gcc -Wall -Wextra helper.c -g -o helpelf + +install: + sudo cp helpelf /usr/bin/helpelf + +clean: + rm helpelf