12 #define SHT_PROGBITS 1
23 #define SHT_LOPROC 0x70000000
24 #define SHT_HIPROC 0x7FFFFFFF
25 #define SHT_LOUSER 0x80000000
26 #define SHT_HIUSER 0xFFFFFFFF
29 #define SHF_EXECINSTR 0x4
30 #define SHF_MASKPROC 0xF0000000
40 #define ET_LOPROC 0xFF00
41 #define ET_HIPROC 0xFFFF
71 #define PT_LOPROC 0x70000000
72 #define PT_HIPROC 0x7FFFFFFF
77 typedef unsigned int Elf32_Addr;
78 typedef unsigned short int Elf32_Half;
79 typedef unsigned int Elf32_Off;
80 typedef int Elf32_Sword;
81 typedef unsigned int Elf32_Word;
88 unsigned char e_ident[EI_NIDENT];
146 elf_t* load_elf(
const char* name);
147 void unload_elf(
elf_t* elf);
148 int32_t run_elf_file(
const char *name,
int argc,
char* eargv[]);
150 static inline bool is_elf_file(
FILE* fp) {
151 char* temp = kmalloc(4);
152 size_t orig =
ftell(fp);
154 fseek(fp, 0, SEEK_SET);
158 fread(fp, 4, 1, temp);
160 fseek(fp, orig, SEEK_SET);
162 bool result = (temp[0] == 0x7F && temp[1] == 0x45 && temp[2] == 0x4C && temp[3] == 0x46);
ssize_t fseek(FILE *stream, ssize_t offset, uint8_t whence)
Установка позиции в потоке данных относительно текущей позиции
int ftell(FILE *stream)
Текущая позиция считывания в файле
int fread(FILE *stream, size_t count, size_t size, void *buffer)
Чтение файла
Elf32_Addr e_entry
Точка входа в процесс
Elf32_Half e_shnum
Количество записей в заголовке раздела
Elf32_Half e_phnum
Количество записей заголовка программы
Elf32_Half e_type
Тип объектного файла
Elf32_Half e_shentsize
Размер записи заголовка раздела
Elf32_Half e_mashine
Тип архитектуры
Elf32_Half e_ehsize
Размер заголовка
Elf32_Half e_phentsize
Размер записи заголовка программы
Elf32_Off e_shoff
Смещение заголовка таблицы разделов
Elf32_Off e_phoff
Смещение заголовка программы
Elf32_Word e_version
Версия объектного файла
Elf32_Word e_flags
Флаги, специфичные для процессора
Elf32_Addr p_paddr
Физический адрес заголовка программы
Elf32_Word p_type
Тип заголовка программы
Elf32_Word p_filesz
Число байтов в сегменте файла
Elf32_Off p_offset
Смещение заголовка программы
Elf32_Addr p_vaddr
Виртуальный адрес заголовка программы
Elf32_Addr sh_addr
Виртуальный адрес раздела в образе процесса
Elf32_Word sh_size
Размер раздела
Elf32_Word sh_flags
Флаги атрибутов раздела
Elf32_Word sh_type
Тип раздела
Elf32_Word sh_info
Дополнительная информация
Elf32_Off sh_offset
Смещение раздела в файле
Elf32_Word sh_addralign
Добавление адреса раздела
Elf32_Word sh_name
Указатель в таблице перемешивания заголовка раздела
Структура файла. Требуется для работы с VFS.
FILE * file
Ссылка на файл
Elf32_Ehdr elf_header
ELF заголовок
Elf32_Phdr * p_header
Программный заголовок
Elf32_Shdr * section
Секции