43 lines
No EOL
1.1 KiB
C
43 lines
No EOL
1.1 KiB
C
#include <stdint.h>
|
|
typedef uint64_t elf64_addr;
|
|
typedef uint64_t elf64_off;
|
|
typedef uint16_t elf64_half;
|
|
typedef uint32_t elf64_word;
|
|
typedef int32_t elf64_sword;
|
|
typedef uint64_t elf64_xword;
|
|
typedef int64_t elf64_sxword;
|
|
|
|
# define ELFMAG0 0x7F // e_ident[EI_MAG0]
|
|
# define ELFMAG1 'E' // e_ident[EI_MAG1]
|
|
# define ELFMAG2 'L' // e_ident[EI_MAG2]
|
|
# define ELFMAG3 'F' // e_ident[EI_MAG3]
|
|
|
|
typedef struct elf64_ehdr {
|
|
uint8_t e_ident[16];
|
|
elf64_half e_type;
|
|
elf64_half e_machine;
|
|
elf64_word e_version;
|
|
elf64_addr e_entry;
|
|
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;
|
|
}__attribute((packed))elf64_ehdr;
|
|
|
|
enum e_ident{
|
|
EI_MAG0 = 0, // 0x7F
|
|
EI_MAG1 = 1, // 'E'
|
|
EI_MAG2 = 2, // 'L'
|
|
EI_MAG3 = 3, // 'F'
|
|
EI_CLASS = 4, // Architecture (32/64)
|
|
EI_DATA = 5, // Byte Order
|
|
EI_VERSION = 6, // ELF Version
|
|
EI_OSABI = 7, // OS Specific
|
|
EI_ABIVERSION = 8, // OS Specific
|
|
EI_PAD = 9 // Padding
|
|
}; |