mirror of https://github.com/0intro/libelf
0e499b02bb | ||
---|---|---|
.travis.yml | ||
LICENSE | ||
Makefile | ||
README.md | ||
dat.h | ||
elf.c | ||
elf.h | ||
fns.h | ||
machines.c | ||
print.c |
README.md
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 Header */
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);
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);