Public feed #890744

Something

public c v1 · immutable
Raw Edit
·published 2008-02-04 00:37 UTC
rendered paste body
#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;}