⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 elf.h

📁 tcc
💻 H
📖 第 1 页 / 共 4 页
字号:
#define STN_UNDEF	0		/* End of a chain.  *//* Relocation table entry without addend (in section of type SHT_REL).  */typedef struct{  Elf32_Addr	r_offset;		/* Address */  Elf32_Word	r_info;			/* Relocation type and symbol index */} Elf32_Rel;/* I have seen two different definitions of the Elf64_Rel and   Elf64_Rela structures, so we'll leave them out until Novell (or   whoever) gets their act together.  *//* The following, at least, is used on Sparc v9, MIPS, and Alpha.  */typedef struct{  Elf64_Addr	r_offset;		/* Address */  Elf64_Xword	r_info;			/* Relocation type and symbol index */} Elf64_Rel;/* Relocation table entry with addend (in section of type SHT_RELA).  */typedef struct{  Elf32_Addr	r_offset;		/* Address */  Elf32_Word	r_info;			/* Relocation type and symbol index */  Elf32_Sword	r_addend;		/* Addend */} Elf32_Rela;typedef struct{  Elf64_Addr	r_offset;		/* Address */  Elf64_Xword	r_info;			/* Relocation type and symbol index */  Elf64_Sxword	r_addend;		/* Addend */} Elf64_Rela;/* How to extract and insert information held in the r_info field.  */#define ELF32_R_SYM(val)		((val) >> 8)#define ELF32_R_TYPE(val)		((val) & 0xff)#define ELF32_R_INFO(sym, type)		(((sym) << 8) + ((type) & 0xff))#define ELF64_R_SYM(i)			((i) >> 32)#define ELF64_R_TYPE(i)			((i) & 0xffffffff)#define ELF64_R_INFO(sym,type)		(((sym) << 32) + (type))/* Program segment header.  */typedef struct{  Elf32_Word	p_type;			/* Segment type */  Elf32_Off	p_offset;		/* Segment file offset */  Elf32_Addr	p_vaddr;		/* Segment virtual address */  Elf32_Addr	p_paddr;		/* Segment physical address */  Elf32_Word	p_filesz;		/* Segment size in file */  Elf32_Word	p_memsz;		/* Segment size in memory */  Elf32_Word	p_flags;		/* Segment flags */  Elf32_Word	p_align;		/* Segment alignment */} Elf32_Phdr;typedef struct{  Elf64_Word	p_type;			/* Segment type */  Elf64_Word	p_flags;		/* Segment flags */  Elf64_Off	p_offset;		/* Segment file offset */  Elf64_Addr	p_vaddr;		/* Segment virtual address */  Elf64_Addr	p_paddr;		/* Segment physical address */  Elf64_Xword	p_filesz;		/* Segment size in file */  Elf64_Xword	p_memsz;		/* Segment size in memory */  Elf64_Xword	p_align;		/* Segment alignment */} Elf64_Phdr;/* Legal values for p_type (segment type).  */#define	PT_NULL		0		/* Program header table entry unused */#define PT_LOAD		1		/* Loadable program segment */#define PT_DYNAMIC	2		/* Dynamic linking information */#define PT_INTERP	3		/* Program interpreter */#define PT_NOTE		4		/* Auxiliary information */#define PT_SHLIB	5		/* Reserved */#define PT_PHDR		6		/* Entry for header table itself */#define	PT_NUM		7		/* Number of defined types.  */#define PT_LOOS		0x60000000	/* Start of OS-specific */#define PT_HIOS		0x6fffffff	/* End of OS-specific */#define PT_LOPROC	0x70000000	/* Start of processor-specific */#define PT_HIPROC	0x7fffffff	/* End of processor-specific *//* Legal values for p_flags (segment flags).  */#define PF_X		(1 << 0)	/* Segment is executable */#define PF_W		(1 << 1)	/* Segment is writable */#define PF_R		(1 << 2)	/* Segment is readable */#define PF_MASKPROC	0xf0000000	/* Processor-specific *//* Legal values for note segment descriptor types for core files. */#define NT_PRSTATUS	1		/* Contains copy of prstatus struct */#define NT_FPREGSET	2		/* Contains copy of fpregset struct */#define NT_PRPSINFO	3		/* Contains copy of prpsinfo struct */#define NT_PRXREG	4		/* Contains copy of prxregset struct */#define NT_PLATFORM	5		/* String from sysinfo(SI_PLATFORM) */#define NT_AUXV		6		/* Contains copy of auxv array */#define NT_GWINDOWS	7		/* Contains copy of gwindows struct */#define NT_PSTATUS	10		/* Contains copy of pstatus struct */#define NT_PSINFO	13		/* Contains copy of psinfo struct */#define NT_PRCRED	14		/* Contains copy of prcred struct */#define NT_UTSNAME	15		/* Contains copy of utsname struct */#define NT_LWPSTATUS	16		/* Contains copy of lwpstatus struct */#define NT_LWPSINFO	17		/* Contains copy of lwpinfo struct *//* Legal values for the  note segment descriptor types for object files.  */#define NT_VERSION	1		/* Contains a version string.  *//* Dynamic section entry.  */typedef struct{  Elf32_Sword	d_tag;			/* Dynamic entry type */  union    {      Elf32_Word d_val;			/* Integer value */      Elf32_Addr d_ptr;			/* Address value */    } d_un;} Elf32_Dyn;typedef struct{  Elf64_Sxword	d_tag;			/* Dynamic entry type */  union    {      Elf64_Xword d_val;		/* Integer value */      Elf64_Addr d_ptr;			/* Address value */    } d_un;} Elf64_Dyn;/* Legal values for d_tag (dynamic entry type).  */#define DT_NULL		0		/* Marks end of dynamic section */#define DT_NEEDED	1		/* Name of needed library */#define DT_PLTRELSZ	2		/* Size in bytes of PLT relocs */#define DT_PLTGOT	3		/* Processor defined value */#define DT_HASH		4		/* Address of symbol hash table */#define DT_STRTAB	5		/* Address of string table */#define DT_SYMTAB	6		/* Address of symbol table */#define DT_RELA		7		/* Address of Rela relocs */#define DT_RELASZ	8		/* Total size of Rela relocs */#define DT_RELAENT	9		/* Size of one Rela reloc */#define DT_STRSZ	10		/* Size of string table */#define DT_SYMENT	11		/* Size of one symbol table entry */#define DT_INIT		12		/* Address of init function */#define DT_FINI		13		/* Address of termination function */#define DT_SONAME	14		/* Name of shared object */#define DT_RPATH	15		/* Library search path */#define DT_SYMBOLIC	16		/* Start symbol search here */#define DT_REL		17		/* Address of Rel relocs */#define DT_RELSZ	18		/* Total size of Rel relocs */#define DT_RELENT	19		/* Size of one Rel reloc */#define DT_PLTREL	20		/* Type of reloc in PLT */#define DT_DEBUG	21		/* For debugging; unspecified */#define DT_TEXTREL	22		/* Reloc might modify .text */#define DT_JMPREL	23		/* Address of PLT relocs */#define	DT_BIND_NOW	24		/* Process relocations of object */#define	DT_INIT_ARRAY	25		/* Array with addresses of init fct */#define	DT_FINI_ARRAY	26		/* Array with addresses of fini fct */#define	DT_INIT_ARRAYSZ	27		/* Size in bytes of DT_INIT_ARRAY */#define	DT_FINI_ARRAYSZ	28		/* Size in bytes of DT_FINI_ARRAY */#define	DT_NUM		29		/* Number used */#define DT_LOOS		0x60000000	/* Start of OS-specific */#define DT_HIOS		0x6fffffff	/* End of OS-specific */#define DT_LOPROC	0x70000000	/* Start of processor-specific */#define DT_HIPROC	0x7fffffff	/* End of processor-specific */#define	DT_PROCNUM	DT_MIPS_NUM	/* Most used by any processor *//* DT_* entries which fall between DT_VALRNGHI & DT_VALRNGLO use the   Dyn.d_un.d_val field of the Elf*_Dyn structure.  This follows Sun's   approach.  */#define DT_VALRNGLO	0x6ffffd00#define DT_POSFLAG_1	0x6ffffdfd	/* Flags for DT_* entries, effecting					   the following DT_* entry.  */#define DT_SYMINSZ	0x6ffffdfe	/* Size of syminfo table (in bytes) */#define DT_SYMINENT	0x6ffffdff	/* Entry size of syminfo */#define DT_VALRNGHI	0x6ffffdff/* DT_* entries which fall between DT_ADDRRNGHI & DT_ADDRRNGLO use the   Dyn.d_un.d_ptr field of the Elf*_Dyn structure.   If any adjustment is made to the ELF object after it has been   built these entries will need to be adjusted.  */#define DT_ADDRRNGLO	0x6ffffe00#define DT_SYMINFO	0x6ffffeff	/* syminfo table */#define DT_ADDRRNGHI	0x6ffffeff/* The versioning entry types.  The next are defined as part of the   GNU extension.  */#define DT_VERSYM	0x6ffffff0/* These were chosen by Sun.  */#define DT_FLAGS_1	0x6ffffffb	/* State flags, see DF_1_* below.  */#define	DT_VERDEF	0x6ffffffc	/* Address of version definition					   table */#define	DT_VERDEFNUM	0x6ffffffd	/* Number of version definitions */#define	DT_VERNEED	0x6ffffffe	/* Address of table with needed					   versions */#define	DT_VERNEEDNUM	0x6fffffff	/* Number of needed versions */#define DT_VERSIONTAGIDX(tag)	(DT_VERNEEDNUM - (tag))	/* Reverse order! */#define DT_VERSIONTAGNUM 16/* Sun added these machine-independent extensions in the "processor-specific"   range.  Be compatible.  */#define DT_AUXILIARY    0x7ffffffd      /* Shared object to load before self */#define DT_FILTER       0x7fffffff      /* Shared object to get values from */#define DT_EXTRATAGIDX(tag)	((Elf32_Word)-((Elf32_Sword) (tag) <<1>>1)-1)#define DT_EXTRANUM	3/* State flags selectable in the `d_un.d_val' element of the DT_FLAGS_1   entry in the dynamic section.  */#define DF_1_NOW	0x00000001	/* Set RTLD_NOW for this object.  */#define DF_1_GLOBAL	0x00000002	/* Set RTLD_GLOBAL for this object.  */#define DF_1_GROUP	0x00000004	/* Set RTLD_GROUP for this object.  */#define DF_1_NODELETE	0x00000008	/* Set RTLD_NODELETE for this object.*/#define DF_1_LOADFLTR	0x00000010	/* Trigger filtee loading at runtime.*/#define DF_1_INITFIRST	0x00000020	/* Set RTLD_INITFIRST for this object*/#define DF_1_NOOPEN	0x00000040	/* Set RTLD_NOOPEN for this object.  *//* Version definition sections.  */typedef struct{  Elf32_Half	vd_version;		/* Version revision */  Elf32_Half	vd_flags;		/* Version information */  Elf32_Half	vd_ndx;			/* Version Index */  Elf32_Half	vd_cnt;			/* Number of associated aux entries */  Elf32_Word	vd_hash;		/* Version name hash value */  Elf32_Word	vd_aux;			/* Offset in bytes to verdaux array */  Elf32_Word	vd_next;		/* Offset in bytes to next verdef					   entry */} Elf32_Verdef;typedef struct{  Elf64_Half	vd_version;		/* Version revision */  Elf64_Half	vd_flags;		/* Version information */  Elf64_Half	vd_ndx;			/* Version Index */  Elf64_Half	vd_cnt;			/* Number of associated aux entries */  Elf64_Word	vd_hash;		/* Version name hash value */  Elf64_Word	vd_aux;			/* Offset in bytes to verdaux array */  Elf64_Word	vd_next;		/* Offset in bytes to next verdef					   entry */} Elf64_Verdef;/* Legal values for vd_version (version revision).  */#define VER_DEF_NONE	0		/* No version */#define VER_DEF_CURRENT	1		/* Current version */#define VER_DEF_NUM	2		/* Given version number *//* Legal values for vd_flags (version information flags).  */#define VER_FLG_BASE	0x1		/* Version definition of file itself */#define VER_FLG_WEAK	0x2		/* Weak version identifier *//* Auxialiary version information.  */typedef struct{  Elf32_Word	vda_name;		/* Version or dependency names */  Elf32_Word	vda_next;		/* Offset in bytes to next verdaux					   entry */} Elf32_Verdaux;typedef struct{  Elf64_Word	vda_name;		/* Version or dependency names */  Elf64_Word	vda_next;		/* Offset in bytes to next verdaux					   entry */} Elf64_Verdaux;/* Version dependency section.  */typedef struct{  Elf32_Half	vn_version;		/* Version of structure */  Elf32_Half	vn_cnt;			/* Number of associated aux entries */  Elf32_Word	vn_file;		/* Offset of filename for this					   dependency */  Elf32_Word	vn_aux;			/* Offset in bytes to vernaux array */  Elf32_Word	vn_next;		/* Offset in bytes to next verneed					   entry */} Elf32_Verneed;typedef struct{  Elf64_Half	vn_version;		/* Version of structure */  Elf64_Half	vn_cnt;			/* Number of associated aux entries */  Elf64_Word	vn_file;		/* Offset of filename for this					   dependency */  Elf64_Word	vn_aux;			/* Offset in bytes to vernaux array */  Elf64_Word	vn_next;		/* Offset in bytes to next verneed					   entry */} Elf64_Verneed;/* Legal values for vn_version (version revision).  */#define VER_NEED_NONE	 0		/* No version */#define VER_NEED_CURRENT 1		/* Current version */#define VER_NEED_NUM	 2		/* Given version number *//* Auxiliary needed version information.  */typedef struct{  Elf32_Word	vna_hash;		/* Hash value of dependency name */  Elf32_Half	vna_flags;		/* Dependency specific information */  Elf32_Half	vna_other;		/* Unused */  Elf32_Word	vna_name;		/* Dependency name string offset */  Elf32_Word	vna_next;		/* Offset in bytes to next vernaux					   entry */} Elf32_Vernaux;typedef struct{  Elf64_Word	vna_hash;		/* Hash value of dependency name */  Elf64_Half	vna_flags;		/* Dependency specific information */  Elf64_Half	vna_other;		/* Unused */  Elf64_Word	vna_name;		/* Dependency name string offset */  Elf64_Word	vna_next;		/* Offset in bytes to next vernaux					   entry */} Elf64_Vernaux;/* Legal values for vna_flags.  */#define VER_FLG_WEAK	0x2		/* Weak version identifier *//* Auxiliary vector.  *//* This vector is normally only used by the program interpreter.  The   usual definition in an ABI supplement uses the name auxv_t.  The   vector is not usually defined in a standard <elf.h> file, but it   can't hurt.  We rename it to avoid conflicts.  The sizes of these   types are an arrangement between the exec server and the program   interpreter, so we don't fully specify them here.  */typedef struct{  int a_type;			/* Entry type */  union    {      long int a_val;		/* Integer value */      void *a_ptr;		/* Pointer value */      void (*a_fcn) (void);	/* Function pointer value */    } a_un;} Elf32_auxv_t;typedef struct{  long int a_type;		/* Entry type */  union    {      long int a_val;		/* Integer value */      void *a_ptr;		/* Pointer value */      void (*a_fcn) (void);	/* Function pointer value */    } a_un;} Elf64_auxv_t;/* Legal values for a_type (entry type).  */#define AT_NULL		0		/* End of vector */#define AT_IGNORE	1		/* Entry should be ignored */#define AT_EXECFD	2		/* File descriptor of program */#define AT_PHDR		3		/* Program headers for program */#define AT_PHENT	4		/* Size of program header entry */#define AT_PHNUM	5		/* Number of program headers */#define AT_PAGESZ	6		/* System page size */#define AT_BASE		7		/* Base address of interpreter */#define AT_FLAGS	8		/* Flags */#define AT_ENTRY	9		/* Entry point of program */#define AT_NOTELF	10		/* Program is not ELF */#define AT_UID		11		/* Real uid */#define AT_EUID		12		/* Effective uid */#define AT_GID		13		/* Real gid */#define AT_EGID		14		/* Effective gid *//* Some more special a_type values describing the hardware.  */#define AT_PLATFORM	15		/* String identifying platform.  */#define AT_HWCAP	16		/* Machine dependent hints about					   processor capabilities.  *//* This entry gives some information about the FPU initialization   performed by the kernel.  */#define AT_FPUCW	17		/* Used FPU control word.  *//* Note section contents.  Each entry in the note section begins with

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -