| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 | /* * readelf.h  * @(#)$Id: readelf.h,v 1.7 1999/02/14 17:16:11 christos Exp $ * * Provide elf data structures for non-elf machines, allowing file * non-elf hosts to determine if an elf binary is stripped. * Note: cobbled from the linux header file, with modifications */#ifndef __fake_elf_h__#define __fake_elf_h__typedef uint32_t	Elf32_Addr;typedef uint32_t	Elf32_Off;typedef uint16_t	Elf32_Half;typedef uint32_t	Elf32_Word;typedef uint8_t		Elf32_Char;#if SIZEOF_UINT64_T != 8#define USE_ARRAY_FOR_64BIT_TYPEStypedef	uint32_t 	Elf64_Addr[2];typedef	uint32_t 	Elf64_Off[2];typedef uint32_t 	Elf64_Xword[2];#elsetypedef	uint64_t 	Elf64_Addr;typedef	uint64_t 	Elf64_Off;typedef uint64_t 	Elf64_Xword;#endiftypedef uint16_t	Elf64_Half;typedef uint32_t	Elf64_Word;typedef uint8_t		Elf64_Char;#define EI_NIDENT	16typedef struct {    Elf32_Char	e_ident[EI_NIDENT];    Elf32_Half	e_type;    Elf32_Half	e_machine;    Elf32_Word	e_version;    Elf32_Addr	e_entry;  /* Entry point */    Elf32_Off	e_phoff;    Elf32_Off	e_shoff;    Elf32_Word	e_flags;    Elf32_Half	e_ehsize;    Elf32_Half	e_phentsize;    Elf32_Half	e_phnum;    Elf32_Half	e_shentsize;    Elf32_Half	e_shnum;    Elf32_Half	e_shstrndx;} Elf32_Ehdr;typedef struct {    Elf64_Char	e_ident[EI_NIDENT];    Elf64_Half	e_type;    Elf64_Half	e_machine;    Elf64_Word	e_version;    Elf64_Addr	e_entry;  /* Entry point */    Elf64_Off	e_phoff;    Elf64_Off	e_shoff;    Elf64_Word	e_flags;    Elf64_Half	e_ehsize;    Elf64_Half	e_phentsize;    Elf64_Half	e_phnum;    Elf64_Half	e_shentsize;    Elf64_Half	e_shnum;    Elf64_Half	e_shstrndx;} Elf64_Ehdr;/* e_type */#define ET_EXEC		2#define ET_CORE		4/* sh_type */#define SHT_SYMTAB	2#define SHT_NOTE	7#define SHT_DYNSYM	11/* elf type */#define ELFDATANONE	0		/* e_ident[EI_DATA] */#define ELFDATA2LSB	1#define ELFDATA2MSB	2/* elf class */#define ELFCLASSNONE	0#define ELFCLASS32	1#define ELFCLASS64	2/* magic number */#define	EI_MAG0		0		/* e_ident[] indexes */#define	EI_MAG1		1#define	EI_MAG2		2#define	EI_MAG3		3#define	EI_CLASS	4#define	EI_DATA		5#define	EI_VERSION	6#define	EI_PAD		7#define	ELFMAG0		0x7f		/* EI_MAG */#define	ELFMAG1		'E'#define	ELFMAG2		'L'#define	ELFMAG3		'F'#define	ELFMAG		"\177ELF"#define	OLFMAG1		'O'#define	OLFMAG		"\177OLF"typedef struct {    Elf32_Word	p_type;    Elf32_Off	p_offset;    Elf32_Addr	p_vaddr;    Elf32_Addr	p_paddr;    Elf32_Word	p_filesz;    Elf32_Word	p_memsz;    Elf32_Word	p_flags;    Elf32_Word	p_align;} Elf32_Phdr;typedef struct {    Elf64_Word	p_type;    Elf64_Word	p_flags;    Elf64_Off	p_offset;    Elf64_Addr	p_vaddr;    Elf64_Addr	p_paddr;    Elf64_Xword	p_filesz;    Elf64_Xword	p_memsz;    Elf64_Xword	p_align;} Elf64_Phdr;#define	PT_NULL		0		/* p_type */#define	PT_LOAD		1#define	PT_DYNAMIC	2#define	PT_INTERP	3#define	PT_NOTE		4#define	PT_SHLIB	5#define	PT_PHDR		6#define	PT_NUM		7typedef struct {    Elf32_Word	sh_name;    Elf32_Word	sh_type;    Elf32_Word	sh_flags;    Elf32_Addr	sh_addr;    Elf32_Off	sh_offset;    Elf32_Word	sh_size;    Elf32_Word	sh_link;    Elf32_Word	sh_info;    Elf32_Word	sh_addralign;    Elf32_Word	sh_entsize;} Elf32_Shdr;typedef struct {    Elf64_Word	sh_name;    Elf64_Word	sh_type;    Elf64_Off	sh_flags;    Elf64_Addr	sh_addr;    Elf64_Off	sh_offset;    Elf64_Off	sh_size;    Elf64_Word	sh_link;    Elf64_Word	sh_info;    Elf64_Off	sh_addralign;    Elf64_Off	sh_entsize;} Elf64_Shdr;/* Notes used in ET_CORE */#define NT_PRSTATUS	1#define NT_PRFPREG	2#define NT_PRPSINFO	3#define NT_TASKSTRUCT	4/* Note header in a PT_NOTE section */typedef struct elf_note {    Elf32_Word	n_namesz;	/* Name size */    Elf32_Word	n_descsz;	/* Content size */    Elf32_Word	n_type;		/* Content type */} Elf32_Nhdr;typedef struct {    Elf64_Word	n_namesz;    Elf64_Word	n_descsz;    Elf64_Word	n_type;} Elf64_Nhdr;#define	NT_PRSTATUS	1#define	NT_PRFPREG	2#define	NT_PRPSINFO	3#define	NT_PRXREG	4#define	NT_PLATFORM	5#define	NT_AUXV		6#endif
 |