Go to file
David du Colombier face69c37e print ident header fields in printelf(32|64)ehdr 2017-07-27 23:38:12 +02:00
.travis.yml move from Drone to Travis CI 2017-03-31 11:13:22 +02:00
LICENSE initial commit 2016-11-21 22:11:53 +01:00
Makefile rename machines.c to str.c 2017-07-27 23:00:42 +02:00
README.md add elfosabi function 2017-07-27 23:36:55 +02:00
dat.h add osabi enum 2017-07-27 23:28:29 +02:00
elf.c export class, data, elfversion, osabi and abiversion ident header fields 2017-07-27 23:28:23 +02:00
elf.h add elfosabi function 2017-07-27 23:36:55 +02:00
fns.h initial commit 2016-11-21 22:11:53 +01:00
print.c print ident header fields in printelf(32|64)ehdr 2017-07-27 23:38:12 +02:00
str.c add elfosabi function 2017-07-27 23:36:55 +02:00

README.md

Build Status Coverity Scan Build Status

libelf

Libelf is a simple library which provides functions to read ELF files.

Headers

#include <stdint.h>
#include <elf.h>

Structures

typedef struct Fhdr Fhdr;

/*
 * Portable ELF file header
 */
struct Fhdr {
	/* Private */
	...

	/* ELF Identification */
	uint8_t		class;		/* File class */
	uint8_t		data;		/* Data encoding */
	uint8_t		elfversion;	/* File version */
	uint8_t		osabi;		/* Operating system/ABI identification */
	uint8_t		abiversion;	/* ABI version */

	/* ELF Header */
	uint16_t	type;
	uint16_t	machine;
	uint32_t	version;
	uint64_t	entry;
	uint64_t	phoff;
	uint64_t	shoff;
	uint16_t	ehsize;		/* ELF Header size */
	uint16_t	phentsize;	/* Section Header size */
	uint16_t	phnum;
	uint16_t	shentsize;	/* Program Header size */
	uint16_t	shnum;
	uint16_t	shstrndx;

	/* Section Header */
	uint32_t	name;
	uint64_t	offset;
	uint64_t	size;

	/* String Table */
	uint32_t	strndxsize;	/* String Table Size */
	uint8_t		*strndx;	/* Copy of String Table */
};

Functions

int readelf(FILE *f, Fhdr *fp);
uint8_t* readelfsection(FILE *f, char *name, uint64_t *size, Fhdr *fp);
void freeelf(Fhdr *fp);
char* elfclass(uint8_t class);
char* elfdata(uint8_t data);
char* elfosabi(uint8_t osabi);
char* elftype(uint16_t type);
char* elfmachine(uint16_t machine);
char* elfversion(uint8_t version);

Example

Fhdr fhdr;
FILE *f;
uint8_t *buf;
uint64_t len;

f = fopen("/bin/ls", "rb");
if (f == NULL)
	return -1;

buf = readelfsection(f, ".text", &len, &fhdr);
if (buf == NULL)
	return -1;

// ...

freeelf(&fhdr);