|
| enum | E_TYPE {
ET_NONE = 0,
ET_REL = 1,
ET_EXEC = 2,
ET_DYN = 3,
ET_CORE = 4,
ET_LOPROC = 0xff00,
ET_HIPROC = 0xffff,
ET_NONE = 0,
ET_REL = 1,
ET_EXEC = 2,
ET_DYN = 3,
ET_CORE = 4,
ET_LOPROC = 0xff00,
ET_HIPROC = 0xffff
} |
| |
| enum | E_MACHINE {
EM_NONE = 0,
EM_M32 = 1,
EM_SPARC = 2,
EM_386 = 3,
EM_68K = 4,
EM_88K = 5,
EM_860 = 7,
EM_MIPS = 8,
EM_NONE = 0,
EM_M32 = 1,
EM_SPARC = 2,
EM_386 = 3,
EM_68K = 4,
EM_88K = 5,
EM_860 = 7,
EM_MIPS = 8
} |
| |
| enum | E_VERSION { EV_NONE = 0,
EV_CURRENT = 1,
EV_NONE = 0,
EV_CURRENT = 1
} |
| |
| enum | ELF_IDENTIFICATION {
EI_MAG0 = 0,
EI_MAG1 = 1,
EI_MAG2 = 2,
EI_MAG3 = 3,
EI_CLASS = 4,
EI_DATA = 5,
EI_VERSION = 6,
EI_PAD = 7,
EI_NIDENT = 16,
EI_MAG0 = 0,
EI_MAG1 = 1,
EI_MAG2 = 2,
EI_MAG3 = 3,
EI_CLASS = 4,
EI_DATA = 5,
EI_VERSION = 6,
EI_PAD = 7,
EI_NIDENT = 16
} |
| |
| enum | ELF_MAGIC {
ELFMAG0 = 0x7f,
ELFMAG1 = 'E',
ELFMAG2 = 'L',
ELFMAG3 = 'F',
ELFMAG0 = 0x7f,
ELFMAG1 = 'E',
ELFMAG2 = 'L',
ELFMAG3 = 'F'
} |
| |
| enum | EFL_CLASS {
ELFCLASSNONE = 0,
ELFCLASS32 = 1,
ELFCLASS64 = 2,
ELFCLASSNONE = 0,
ELFCLASS32 = 1,
ELFCLASS64 = 2
} |
| |
| enum | EI_DATA {
ELFDATANONE = 0,
ELFDATA2LSB = 1,
ELFDATA2MSB = 2,
ELFDATANONE = 0,
ELFDATA2LSB = 1,
ELFDATA2MSB = 2
} |
| |
| enum | DT_TAG {
DT_NULL = 0,
DT_NEEDED = 1,
DT_PLTRELSZ = 2,
DT_PLTGOT = 3,
DT_HASH = 4,
DT_STRTAB = 5,
DT_SYMTAB = 6,
DT_RELA = 7,
DT_RELASZ = 8,
DT_RELAENT = 9,
DT_STRSZ = 10,
DT_SYMENT = 11,
DT_INIT = 12,
DT_FINI = 13,
DT_SONAME = 14,
DT_RPATH = 15,
DT_SYMBOLIC = 16,
DT_REL = 17,
DT_RELSZ = 18,
DT_RELENT = 19,
DT_PLTREL = 20,
DT_DEBUG = 21,
DT_TEXTREL = 22,
DT_JMPREL = 23,
DT_LOPROC = 0x70000000,
DT_HIPROC = 0x7fffffff,
DT_NULL = 0,
DT_NEEDED = 1,
DT_PLTRELSZ = 2,
DT_PLTGOT = 3,
DT_HASH = 4,
DT_STRTAB = 5,
DT_SYMTAB = 6,
DT_RELA = 7,
DT_RELASZ = 8,
DT_RELAENT = 9,
DT_STRSZ = 10,
DT_SYMENT = 11,
DT_INIT = 12,
DT_FINI = 13,
DT_SONAME = 14,
DT_RPATH = 15,
DT_SYMBOLIC = 16,
DT_REL = 17,
DT_RELSZ = 18,
DT_RELENT = 19,
DT_PLTREL = 20,
DT_DEBUG = 21,
DT_TEXTREL = 22,
DT_JMPREL = 23,
DT_LOPROC = 0x70000000,
DT_HIPROC = 0x7fffffff
} |
| |
| enum | { GRP_COMDAT = 0x01
} |
| |
| enum | ProgramFlags {
PF_X = 0x01,
PF_W = 0x02,
PF_R = 0x04,
PF_MASKPROC = 0xF0000000,
PF_X = 0x01,
PF_W = 0x02,
PF_R = 0x04,
PF_MASKPROC = 0xF0000000
} |
| |
| enum | SegmentType {
PT_NULL = 0x00,
PT_LOAD = 0x01,
PT_DYNAMIC = 0x02,
PT_INTERP = 0x03,
PT_NOTE = 0x04,
PT_SHLIB = 0x05,
PT_PHDR = 0x06,
PT_LOPROC = 0x70000000,
PT_HIPROC = 0x7fffffff,
PT_NULL = 0x00,
PT_LOAD = 0x01,
PT_DYNAMIC = 0x02,
PT_INTERP = 0x03,
PT_NOTE = 0x04,
PT_SHLIB = 0x05,
PT_PHDR = 0x06,
PT_LOPROC = 0x70000000,
PT_HIPROC = 0x7fffffff
} |
| |
| enum | REL_TYPE {
R_386_NONE = 0,
R_386_32 = 1,
R_386_PC32 = 2,
R_386_GOT32 = 3,
R_386_PLT32 = 4,
R_386_COPY = 5,
R_386_GLOB_DAT = 6,
R_386_JMP_SLOT = 7,
R_386_RELATIVE = 8,
R_386_GOTOFF = 9,
R_386_GOTPC = 10,
R_386_NONE = 0,
R_386_32 = 1,
R_386_PC32 = 2,
R_386_GOT32 = 3,
R_386_PLT32 = 4,
R_386_COPY = 5,
R_386_GLOB_DAT = 6,
R_386_JMP_SLOT = 7,
R_386_RELATIVE = 8,
R_386_GOTOFF = 9,
R_386_GOTPC = 10
} |
| |
| enum | ST_TYPE {
STT_NOTYPE = 0,
STT_OBJECT = 1,
STT_FUNC = 2,
STT_SECTION = 3,
STT_FILE = 4,
STT_LOPROC = 13,
STT_HIPROC = 15,
STT_NOTYPE = 0,
STT_OBJECT = 1,
STT_FUNC = 2,
STT_SECTION = 3,
STT_FILE = 4,
STT_LOPROC = 13,
STT_HIPROC = 15
} |
| |
| enum | ST_BIND {
STB_LOCAL = 0,
STB_GLOBAL = 1,
STB_WEAK = 2,
STB_LOPROC = 13,
STB_HIPROC = 15,
STB_LOCAL = 0,
STB_GLOBAL = 1,
STB_WEAK = 2,
STB_LOPROC = 13,
STB_HIPROC = 15
} |
| |
| enum | { STN_UNDEF = 0
} |
| |
| enum | SH_TYPE {
SHT_NULL = 0,
SHT_PROGBITS = 1,
SHT_SYMTAB = 2,
SHT_STRTAB = 3,
SHT_RELA = 4,
SHT_HASH = 5,
SHT_DYNAMIC = 6,
SHT_NOTE = 7,
SHT_NOBITS = 8,
SHT_REL = 9,
SHT_SHLIB = 10,
SHT_DYNSYM = 11,
SHT_INIT_ARRAY = 12,
SHT_FINI_ARRAY = 13,
SHT_PREINIT_ARRAY = 16,
SHT_GROUP = 17,
SHT_SYMTAB_SHNDX = 18,
SHT_LOPROC = 0x70000000,
SHT_HIPROC = 0x7fffffff,
SHT_LOUSER = 0x80000000,
SHT_HIUSER = 0xffffffff,
SHT_NULL = 0,
SHT_PROGBITS = 1,
SHT_SYMTAB = 2,
SHT_STRTAB = 3,
SHT_RELA = 4,
SHT_HASH = 5,
SHT_DYNAMIC = 6,
SHT_NOTE = 7,
SHT_NOBITS = 8,
SHT_REL = 9,
SHT_SHLIB = 10,
SHT_DYNSYM = 11,
SHT_INIT_ARRAY = 12,
SHT_FINI_ARRAY = 13,
SHT_PREINIT_ARRAY = 16,
SHT_GROUP = 17,
SHT_SYMTAB_SHNDX = 18,
SHT_LOPROC = 0x70000000,
SHT_HIPROC = 0x7fffffff,
SHT_LOUSER = 0x80000000,
SHT_HIUSER = 0xffffffff
} |
| |
| enum | SH_FLAG {
SHF_WRITE = 0x01,
SHF_ALLOC = 0x02,
SHF_EXECINSTR = 0x04,
SHF_MERGE = 0x10,
SHF_STRINGS = 0x20,
SHF_INFO_LINK = 0x40,
SHF_LINK_ORDER = 0x80,
SHF_OS_NONCONFORMING = 0x100,
SHF_GROUP = 0x200,
SHF_TLS = 0x400,
SHF_MASKOS = 0xff000000,
SHF_AMD64_LARGE = 0x10000000,
SHF_ORDERED = 0x40000000,
SHF_EXCLUDE = 0x80000000,
SHF_MASKPROC = 0xf0000000,
SHF_WRITE = 0x01,
SHF_ALLOC = 0x02,
SHF_EXECINSTR = 0x04,
SHF_MERGE = 0x10,
SHF_STRINGS = 0x20,
SHF_INFO_LINK = 0x40,
SHF_LINK_ORDER = 0x80,
SHF_OS_NONCONFORMING = 0x100,
SHF_GROUP = 0x200,
SHF_TLS = 0x400,
SHF_MASKOS = 0xff000000,
SHF_AMD64_LARGE = 0x10000000,
SHF_ORDERED = 0x40000000,
SHF_EXCLUDE = 0x80000000,
SHF_MASKPROC = 0xf0000000
} |
| |
| enum | SH_IDX {
SHN_UNDEF = 0,
SHN_LORESERVE = 0xff00,
SHN_LOPROC = 0xff00,
SHN_BEFORE = 0xff00,
SHN_AFTER = 0xff01,
SHN_HIPROC = 0xff1f,
SHN_LOOS = 0xff20,
SHN_HIOS = 0xff3f,
SHN_ABS = 0xfff1,
SHN_COMMON = 0xfff2,
SHN_XINDEX = 0xffff,
SHN_HIRESERVE = 0xffff,
SHN_UNDEF = 0,
SHN_LORESERVE = 0xff00,
SHN_LOPROC = 0xff00,
SHN_BEFORE = 0xff00,
SHN_AFTER = 0xff01,
SHN_HIPROC = 0xff1f,
SHN_LOOS = 0xff20,
SHN_HIOS = 0xff3f,
SHN_ABS = 0xfff1,
SHN_COMMON = 0xfff2,
SHN_XINDEX = 0xffff,
SHN_HIRESERVE = 0xffff
} |
| |
ELF 파일 로더를 구현한다.
ELF 포맷을 파싱해서 링크 하고 메모리에 적재해서 실행시킨다. NCKernel 은 ELF 포맷이기 때문에, 이 로더가 커널을 로딩한다.