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

📄 elf.h

📁 系统启动时检测内存状况的软件C代码
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef ELF_H#define ELF_H#define EI_NIDENT	16	/* Size of e_ident array. *//* Values for e_type. */#define ET_NONE		0	/* No file type */#define ET_REL		1	/* Relocatable file */#define ET_EXEC		2	/* Executable file */#define ET_DYN		3	/* Shared object file */#define ET_CORE		4	/* Core file *//* Values for e_machine (architecute). */#define EM_NONE		 0		/* No machine */#define EM_M32		 1		/* AT&T WE 32100 */#define EM_SPARC	 2		/* SUN SPARC */#define EM_386		 3		/* Intel 80386+*/#define EM_68K		 4		/* Motorola m68k family */#define EM_88K		 5		/* Motorola m88k family */#define EM_486		 6		/* Perhaps disused */#define EM_860		 7		/* Intel 80860 */#define EM_MIPS		 8		/* MIPS R3000 big-endian */#define EM_S370		 9		/* IBM System/370 */#define EM_MIPS_RS3_LE	10		/* MIPS R3000 little-endian */#define EM_PARISC	15		/* HPPA */#define EM_VPP500	17		/* Fujitsu VPP500 */#define EM_SPARC32PLUS	18		/* Sun's "v8plus" */#define EM_960		19		/* Intel 80960 */#define EM_PPC		20		/* PowerPC */#define EM_PPC64	21		/* PowerPC 64-bit */#define EM_S390		22		/* IBM S390 */#define EM_V800		36		/* NEC V800 series */#define EM_FR20		37		/* Fujitsu FR20 */#define EM_RH32		38		/* TRW RH-32 */#define EM_RCE		39		/* Motorola RCE */#define EM_ARM		40		/* ARM */#define EM_FAKE_ALPHA	41		/* Digital Alpha */#define EM_SH		42		/* Hitachi SH */#define EM_SPARCV9	43		/* SPARC v9 64-bit */#define EM_TRICORE	44		/* Siemens Tricore */#define EM_ARC		45		/* Argonaut RISC Core */#define EM_H8_300	46		/* Hitachi H8/300 */#define EM_H8_300H	47		/* Hitachi H8/300H */#define EM_H8S		48		/* Hitachi H8S */#define EM_H8_500	49		/* Hitachi H8/500 */#define EM_IA_64	50		/* Intel Merced */#define EM_MIPS_X	51		/* Stanford MIPS-X */#define EM_COLDFIRE	52		/* Motorola Coldfire */#define EM_68HC12	53		/* Motorola M68HC12 */#define EM_MMA		54		/* Fujitsu MMA Multimedia Accelerator*/#define EM_PCP		55		/* Siemens PCP */#define EM_NCPU		56		/* Sony nCPU embeeded RISC */#define EM_NDR1		57		/* Denso NDR1 microprocessor */#define EM_STARCORE	58		/* Motorola Start*Core processor */#define EM_ME16		59		/* Toyota ME16 processor */#define EM_ST100	60		/* STMicroelectronic ST100 processor */#define EM_TINYJ	61		/* Advanced Logic Corp. Tinyj emb.fam*/#define EM_X86_64	62		/* AMD x86-64 architecture */#define EM_PDSP		63		/* Sony DSP Processor */#define EM_FX66		66		/* Siemens FX66 microcontroller */#define EM_ST9PLUS	67		/* STMicroelectronics ST9+8/16 mc */#define EM_ST7		68		/* STmicroelectronics ST7 8 bit mc */#define EM_68HC16	69		/* Motorola MC68HC16 microcontroller */#define EM_68HC11	70		/* Motorola MC68HC11 microcontroller */#define EM_68HC08	71		/* Motorola MC68HC08 microcontroller */#define EM_68HC05	72		/* Motorola MC68HC05 microcontroller */#define EM_SVX		73		/* Silicon Graphics SVx */#define EM_AT19		74		/* STMicroelectronics ST19 8 bit mc */#define EM_VAX		75		/* Digital VAX */#define EM_CRIS		76		/* Axis Communications 32-bit embedded processor */#define EM_JAVELIN	77		/* Infineon Technologies 32-bit embedded processor */#define EM_FIREPATH	78		/* Element 14 64-bit DSP Processor */#define EM_ZSP		79		/* LSI Logic 16-bit DSP Processor */#define EM_MMIX		80		/* Donald Knuth's educational 64-bit processor */#define EM_HUANY	81		/* Harvard University machine-independent object files */#define EM_PRISM	82		/* SiTera Prism */#define EM_AVR		83		/* Atmel AVR 8-bit microcontroller */#define EM_FR30		84		/* Fujitsu FR30 */#define EM_D10V		85		/* Mitsubishi D10V */#define EM_D30V		86		/* Mitsubishi D30V */#define EM_V850		87		/* NEC v850 */#define EM_M32R		88		/* Mitsubishi M32R */#define EM_MN10300	89		/* Matsushita MN10300 */#define EM_MN10200	90		/* Matsushita MN10200 */#define EM_PJ		91		/* picoJava */#define EM_OPENRISC	92		/* OpenRISC 32-bit embedded processor */#define EM_ARC_A5	93		/* ARC Cores Tangent-A5 */#define EM_XTENSA	94		/* Tensilica Xtensa Architecture */#define EM_NUM		95/* Values for p_type. */#define PT_NULL		0	/* Unused entry. */#define PT_LOAD		1	/* Loadable segment. */#define PT_DYNAMIC	2	/* Dynamic linking information segment. */#define PT_INTERP	3	/* Pathname of interpreter. */#define PT_NOTE		4	/* Auxiliary information. */#define PT_SHLIB	5	/* Reserved (not used). */#define PT_PHDR		6	/* Location of program header itself. *//* Values for p_flags. */#define PF_X		0x1	/* Executable. */#define PF_W		0x2	/* Writable. */#define PF_R		0x4	/* Readable. */#define	ELF_PROGRAM_RETURNS_BIT	0x8000000	/* e_flags bit 31 */#define EI_MAG0		0#define ELFMAG0		0x7f#define EI_MAG1		1#define ELFMAG1		'E'#define EI_MAG2		2#define ELFMAG2		'L'#define EI_MAG3		3#define ELFMAG3		'F'#define ELFMAG		"\177ELF"#define EI_CLASS	4	/* File class byte index */#define ELFCLASSNONE	0	/* Invalid class */#define ELFCLASS32	1	/* 32-bit objects */#define ELFCLASS64	2	/* 64-bit objects */#define EI_DATA		5	/* Data encodeing byte index */#define ELFDATANONE	0	/* Invalid data encoding */#define ELFDATA2LSB	1	/* 2's complement little endian */#define ELFDATA2MSB	2	/* 2's complement big endian */#define EI_VERSION	6	/* File version byte index */				/* Value must be EV_CURRENT */#define EV_NONE		0	/* Invalid ELF Version */#define EV_CURRENT	1	/* Current version */#define ELF32_PHDR_SIZE (8*4)	/* Size of an elf program header */#ifndef ASSEMBLY#include "stdint.h"/** ELF definitions common to all 32-bit architectures.*/typedef uint32_t	Elf32_Addr;typedef uint16_t	Elf32_Half;typedef uint32_t	Elf32_Off;typedef uint16_t	Elf32_Section;typedef int32_t		Elf32_Sword;typedef uint32_t	Elf32_Word;typedef uint32_t	Elf32_Size;typedef uint64_t	Elf64_Addr;typedef uint16_t	Elf64_Half;typedef uint64_t	Elf64_Off;typedef uint16_t	Elf64_Section;typedef int32_t		Elf64_Sword;typedef uint32_t	Elf64_Word;typedef uint64_t	Elf64_Size;typedef uint64_t	Elf64_Xword;typedef	int64_t		Elf64_Sxword;/** ELF header.*/typedef struct {	unsigned char	e_ident[EI_NIDENT];	/* File identification. */	Elf32_Half	e_type;		/* File type. */	Elf32_Half	e_machine;	/* Machine architecture. */	Elf32_Word	e_version;	/* ELF format version. */	Elf32_Addr	e_entry;	/* Entry point. */	Elf32_Off	e_phoff;	/* Program header file offset. */	Elf32_Off	e_shoff;	/* Section header file offset. */	Elf32_Word	e_flags;	/* Architecture-specific flags. */	Elf32_Half	e_ehsize;	/* Size of ELF header in bytes. */	Elf32_Half	e_phentsize;	/* Size of program header entry. */	Elf32_Half	e_phnum;	/* Number of program header entries. */	Elf32_Half	e_shentsize;	/* Size of section header entry. */	Elf32_Half	e_shnum;	/* Number of section header entries. */	Elf32_Half	e_shstrndx;	/* Section name strings section. */} Elf32_Ehdr;typedef struct {	unsigned char	e_ident[EI_NIDENT];	/* File identification. */	Elf64_Half	e_type;		/* File type. */	Elf64_Half	e_machine;	/* Machine architecture. */	Elf64_Word	e_version;	/* ELF format version. */	Elf64_Addr	e_entry;	/* Entry point. */	Elf64_Off	e_phoff;	/* Program header file offset. */	Elf64_Off	e_shoff;	/* Section header file offset. */	Elf64_Word	e_flags;	/* Architecture-specific flags. */	Elf64_Half	e_ehsize;	/* Size of ELF header in bytes. */	Elf64_Half	e_phentsize;	/* Size of program header entry. */	Elf64_Half	e_phnum;	/* Number of program header entries. */	Elf64_Half	e_shentsize;	/* Size of section header entry. */	Elf64_Half	e_shnum;	/* Number of section header entries. */	Elf64_Half	e_shstrndx;	/* Section name strings section. */} Elf64_Ehdr;/** Program header.*/typedef struct {	Elf32_Word	p_type;		/* Entry type. */	Elf32_Off	p_offset;	/* File offset of contents. */	Elf32_Addr	p_vaddr;	/* Virtual address (not used). */	Elf32_Addr	p_paddr;	/* Physical address. */	Elf32_Size	p_filesz;	/* Size of contents in file. */	Elf32_Size	p_memsz;	/* Size of contents in memory. */	Elf32_Word	p_flags;	/* Access permission flags. */	Elf32_Size	p_align;	/* Alignment in memory and file. */} Elf32_Phdr;typedef struct {	Elf64_Word	p_type;		/* Entry type. */	Elf64_Word	p_flags;	/* Access permission flags. */	Elf64_Off	p_offset;	/* File offset of contents. */	Elf64_Addr	p_vaddr;	/* Virtual address (not used). */	Elf64_Addr	p_paddr;	/* Physical address. */	Elf64_Size	p_filesz;	/* Size of contents in file. */	Elf64_Size	p_memsz;	/* Size of contents in memory. */	Elf64_Size	p_align;	/* Alignment in memory and file. */} Elf64_Phdr;/* 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 (deprecated) */#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_RUNPATH	29		/* Library search path */#define DT_FLAGS	30		/* Flags for the object being loaded */#define DT_ENCODING	32		/* Start of encoded range */#define DT_PREINIT_ARRAY 32		/* Array with addresses of preinit fct*/#define DT_PREINIT_ARRAYSZ 33		/* size in bytes of DT_PREINIT_ARRAY */#define	DT_NUM		34		/* Number used */#define DT_LOOS		0x6000000d	/* Start of OS-specific */#define DT_HIOS		0x6ffff000	/* End of OS-specific */#define DT_LOPROC	0x70000000	/* Start of processor-specific */#define DT_HIPROC	0x7fffffff	/* End of processor-specific */#define	DT_PROCNUM	0x32		/* Most used by any processor */

⌨️ 快捷键说明

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