📄 elf.h
字号:
#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 + -