#ifndef READELFOBJ_H
#define READELFOBJ_H
#ifdef __cplusplus
extern
"C"
{
#endif /* __cplusplus */
struct
generic_rela {
int
gr_isrela;
Dwarf_Unsigned gr_offset;
Dwarf_Unsigned gr_info;
Dwarf_Unsigned gr_sym;
Dwarf_Unsigned gr_type;
Dwarf_Signed gr_addend;
unsigned
char
gr_type2;
unsigned
char
gr_type3;
};
struct
generic_ehdr {
unsigned
char
ge_ident[EI_NIDENT];
Dwarf_Unsigned ge_type;
Dwarf_Unsigned ge_machine;
Dwarf_Unsigned ge_version;
Dwarf_Unsigned ge_entry;
Dwarf_Unsigned ge_phoff;
Dwarf_Unsigned ge_shoff;
Dwarf_Unsigned ge_flags;
Dwarf_Unsigned ge_ehsize;
Dwarf_Unsigned ge_phentsize;
Dwarf_Unsigned ge_phnum;
Dwarf_Unsigned ge_shentsize;
Dwarf_Unsigned ge_shnum;
Dwarf_Unsigned ge_shstrndx;
};
struct
generic_phdr {
Dwarf_Unsigned gp_type;
Dwarf_Unsigned gp_flags;
Dwarf_Unsigned gp_offset;
Dwarf_Unsigned gp_vaddr;
Dwarf_Unsigned gp_paddr;
Dwarf_Unsigned gp_filesz;
Dwarf_Unsigned gp_memsz;
Dwarf_Unsigned gp_align;
};
struct
generic_shdr {
Dwarf_Unsigned gh_secnum;
Dwarf_Unsigned gh_name;
const
char
* gh_namestring;
Dwarf_Unsigned gh_type;
Dwarf_Unsigned gh_flags;
Dwarf_Unsigned gh_addr;
Dwarf_Unsigned gh_offset;
Dwarf_Unsigned gh_size;
Dwarf_Unsigned gh_link;
Dwarf_Unsigned gh_reloc_target_secnum;
Dwarf_Unsigned gh_info;
Dwarf_Unsigned gh_addralign;
Dwarf_Unsigned gh_entsize;
char
* gh_content;
Dwarf_Unsigned gh_relcount;
struct
generic_rela * gh_rels;
Dwarf_Unsigned gh_section_group_number;
Dwarf_Unsigned * gh_sht_group_array;
Dwarf_Unsigned gh_sht_group_array_count;
char
gh_is_dwarf;
};
struct
generic_dynentry {
Dwarf_Unsigned gd_tag;
Dwarf_Unsigned gd_val;
Dwarf_Unsigned gd_dyn_file_offset;
};
struct
generic_symentry {
Dwarf_Unsigned gs_name;
Dwarf_Unsigned gs_value;
Dwarf_Unsigned gs_size;
Dwarf_Unsigned gs_info;
Dwarf_Unsigned gs_other;
Dwarf_Unsigned gs_shndx;
Dwarf_Unsigned gs_bind;
Dwarf_Unsigned gs_type;
};
struct
location {
const
char
*g_name;
Dwarf_Unsigned g_offset;
Dwarf_Unsigned g_count;
Dwarf_Unsigned g_entrysize;
Dwarf_Unsigned g_totalsize;
};
typedef
struct
elf_filedata_s {
char
f_ident[8];
char
* f_path;
int
f_fd;
int
f_machine;
int
f_destruct_close_fd;
int
f_is_64bit;
unsigned f_endian;
Dwarf_Unsigned f_filesize;
Dwarf_Small f_offsetsize;
Dwarf_Small f_pointersize;
int
f_ftype;
Dwarf_Unsigned f_max_secdata_offset;
Dwarf_Unsigned f_max_progdata_offset;
void
(*f_copy_word) (
void
*,
const
void
*, unsigned
long
);
struct
location f_loc_ehdr;
struct
generic_ehdr* f_ehdr;
struct
location f_loc_shdr;
struct
generic_shdr* f_shdr;
struct
location f_loc_phdr;
struct
generic_phdr* f_phdr;
char
*f_elf_shstrings_data;
Dwarf_Unsigned f_elf_shstrings_length;
Dwarf_Unsigned f_elf_shstrings_max;
struct
location f_loc_dynamic;
struct
generic_dynentry * f_dynamic;
Dwarf_Unsigned f_dynamic_sect_index;
struct
location f_loc_dynsym;
struct
generic_symentry* f_dynsym;
char
*f_dynsym_sect_strings;
Dwarf_Unsigned f_dynsym_sect_strings_max;
Dwarf_Unsigned f_dynsym_sect_strings_sect_index;
Dwarf_Unsigned f_dynsym_sect_index;
struct
location f_loc_symtab;
struct
generic_symentry* f_symtab;
char
* f_symtab_sect_strings;
Dwarf_Unsigned f_symtab_sect_strings_max;
Dwarf_Unsigned f_symtab_sect_strings_sect_index;
Dwarf_Unsigned f_symtab_sect_index;
Dwarf_Unsigned f_sg_next_group_number;
Dwarf_Unsigned f_sht_group_type_section_count;
Dwarf_Unsigned f_shf_group_flag_section_count;
Dwarf_Unsigned f_dwo_group_section_count;
} dwarf_elf_object_access_internals_t;
int
dwarf_construct_elf_access(
int
fd,
const
char
*path,
dwarf_elf_object_access_internals_t **ep,
int
*errcode);
int
dwarf_destruct_elf_access(dwarf_elf_object_access_internals_t *ep,
int
*errcode);
int
_dwarf_load_elf_header(dwarf_elf_object_access_internals_t *ep,
int
*errcode);
int
_dwarf_load_elf_sectheaders(dwarf_elf_object_access_internals_t* ep,
int
*errcode);
int
_dwarf_load_elf_symtab_symbols(dwarf_elf_object_access_internals_t *ep,
int
*errcode);
int
_dwarf_load_elf_symstr( dwarf_elf_object_access_internals_t *ep,
int
*errcode);
int
_dwarf_load_elf_rela(dwarf_elf_object_access_internals_t *ep,
Dwarf_Unsigned secnum,
int
*errcode);
#ifndef EI_NIDENT
#define EI_NIDENT 16
#endif /* EI_NIDENT */
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* READELFOBJ_H */