49 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef __LIBS_ELF_H__
 | 
						||
#define __LIBS_ELF_H__
 | 
						||
 | 
						||
#include <defs.h>
 | 
						||
 | 
						||
#define ELF_MAGIC   0x464C457FU         // "\x7FELF" in little endian
 | 
						||
 | 
						||
/* file header */
 | 
						||
struct elfhdr {
 | 
						||
    uint32_t e_magic;     // must equal ELF_MAGIC
 | 
						||
    uint8_t e_elf[12];
 | 
						||
    uint16_t e_type;      // 1=relocatable, 2=executable, 3=shared object, 4=core image
 | 
						||
    uint16_t e_machine;   // 3=x86, 4=68K, etc.
 | 
						||
    uint32_t e_version;   // file version, always 1
 | 
						||
    uint32_t e_entry;     // entry point if executable
 | 
						||
    uint32_t e_phoff;     // file position of program header or 0
 | 
						||
    uint32_t e_shoff;     // file position of section header or 0
 | 
						||
    uint32_t e_flags;     // architecture-specific flags, usually 0
 | 
						||
    uint16_t e_ehsize;    // size of this elf header
 | 
						||
    uint16_t e_phentsize; // size of an entry in program header
 | 
						||
    uint16_t e_phnum;     // number of entries in program header or 0
 | 
						||
    uint16_t e_shentsize; // size of an entry in section header
 | 
						||
    uint16_t e_shnum;     // number of entries in section header or 0
 | 
						||
    uint16_t e_shstrndx;  // section number that contains section name strings
 | 
						||
};
 | 
						||
 | 
						||
/* program section header */
 | 
						||
struct proghdr {
 | 
						||
    uint32_t p_type;   // loadable code or data, dynamic linking info,etc.
 | 
						||
    uint32_t p_offset; // file offset of segment
 | 
						||
    uint32_t p_va;     // virtual address to map segment
 | 
						||
    uint32_t p_pa;     // physical address, not used
 | 
						||
    uint32_t p_filesz; // size of segment in file
 | 
						||
    uint32_t p_memsz;  // size of segment in memory (bigger if contains bss)
 | 
						||
    uint32_t p_flags;  // read/write/execute bits
 | 
						||
    uint32_t p_align;  // required alignment, invariably hardware page size
 | 
						||
};
 | 
						||
 | 
						||
/* values for Proghdr::p_type */
 | 
						||
#define ELF_PT_LOAD                     1
 | 
						||
 | 
						||
/* flag bits for Proghdr::p_flags */
 | 
						||
#define ELF_PF_X                        1
 | 
						||
#define ELF_PF_W                        2
 | 
						||
#define ELF_PF_R                        4
 | 
						||
 | 
						||
#endif /* !__LIBS_ELF_H__ */
 | 
						||
 |