#ifndef READELF_H #define READELF_H #include "elf.h" #ifdef __cplusplus extern "C" { #endif typedef struct _ELF_section_t { Elf32_Shdr header; const char* name; char* data; } ELF_section_t; typedef struct _ELF_segment_t { Elf32_Phdr header; unsigned char* pointer; unsigned char* data; } ELF_segment_t; typedef struct { const char* name; unsigned int vma; unsigned int size; int section; unsigned char resolved; unsigned char foreign; } ELF_symbol_t; typedef struct _ELF_t { unsigned int endian; unsigned int relocatable; unsigned int sectionCount; unsigned int segmentCount; unsigned int symbolCount; unsigned int entrypoint; ELF_section_t* sections; ELF_segment_t* segments; ELF_symbol_t* symbols; unsigned int symbolsSection; unsigned int symbolNamesSection; unsigned int paramSection; } ELF_t; typedef struct { unsigned int relative; unsigned int shift; unsigned int size; unsigned int position; unsigned int mask; } ELF_rel_type_t; ELF_section_t* findSection(const ELF_t* elf,const char* name); int lookupSymbol(const ELF_t* elf,const char* name); const Elf32_Sym* getSymbolByIndex(const ELF_t* elf,int idx); const char *findSectionInPlace(const char* memory,unsigned int size,const char *name,size_t *sectionSize); const char *findSymbolSectionInPlace(const char *memory, unsigned int size, size_t *symbolSize, size_t *symbolCount, const char **symbolstrtab); int lookupSymbolValueInPlace(const char* symbolSection, size_t symbolSize, size_t symbolCount, const char *symbolstrtab, const char *name); const char *getSymbolByIndexInPlace(const char* symbolSection, size_t symbolSize, size_t symbolCount, const char *symbolstrtab, int index); #ifdef __cplusplus } #endif #endif // READELF_H