Public feed
#890744
#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <elf.h>int main(int argc, char *argv[]){ FILE *in_file = NULL; Elf32_Ehdr header; char *elf_type_str = NULL; if (argc < 2) { fprintf(stderr, "usage %s <elf-file>\n", argv[0]); exit(1); } /* * Open the file... you don't need me to tell you this right?... */ in_file = fopen(argv[1], "r"); if (!in_file) { fprintf(stderr, "%s: error: %s\n", argv[0], strerror(errno)); exit(1); } /* * Read in the ELF header from the file. */ memset(&header, 0, sizeof(header)); if (fread(&header, 1, sizeof(header), in_file) < sizeof(header)) { if (ferror(in_file)) fprintf(stderr, "%s: error: %s\n", argv[0], strerror(errno)); else fprintf(stderr, "%s: error: file too small to be an ELF binary\n", argv[0]); fclose(in_file); exit(1); } /* * Confirm the magic bytes. */ if (header.e_ident[EI_MAG0] != ELFMAG0 || header.e_ident[EI_MAG1] != ELFMAG1 || header.e_ident[EI_MAG2] != ELFMAG2 || header.e_ident[EI_MAG3] != ELFMAG3) { fprintf(stderr, "%s: error: file not an ELF binary\n", argv[0]); fclose(in_file); exit(1); } /* * Get a string to identify the type of binary. */ switch (header.e_type) { case ET_REL: elf_type_str = "a relocatable"; break; case ET_EXEC: elf_type_str = "an executable"; break; case ET_DYN: elf_type_str = "a shared object"; break; case ET_CORE: elf_type_str = "a core file"; break; default: elf_type_str = "an unknown"; } /* * Do our job... */ printf("%s is %s ELF file\n", argv[1], elf_type_str); /* * Clean up. */ fclose(in_file); return 0;}