Vhex-kernel/src/kernel/loader/header.c

39 lines
899 B
C
Raw Normal View History

2020-01-01 14:19:18 +01:00
#include <kernel/loader.h>
#include <kernel/fs/vfs.h>
2020-01-01 14:19:18 +01:00
/* loader_get_header() - get ELF header and check validity */
int loader_get_header(FILE *file, Elf32_Ehdr *header)
{
// Read ELF header.
if (vfs_pread(file, header, sizeof(Elf32_Ehdr), 0) != sizeof(Elf32_Ehdr))
2020-01-01 14:19:18 +01:00
return (-1);
// Check magic number
2020-03-18 17:48:53 +01:00
if (header->e_ident[EI_MAG0] != ELFMAG0 ||
header->e_ident[EI_MAG1] != ELFMAG1 ||
header->e_ident[EI_MAG2] != ELFMAG2 ||
header->e_ident[EI_MAG3] != ELFMAG3)
2020-01-01 14:19:18 +01:00
return (-2);
// Check class
2020-03-18 17:48:53 +01:00
if (header->e_ident[EI_CLASS] != ELFCLASS32)
2020-01-01 14:19:18 +01:00
return (-3);
// Check data encoding
if (header->e_ident[EI_DATA] != ELFDATA2MSB)
return (-4);
2020-01-01 14:19:18 +01:00
// Check ELF type.
2020-03-18 17:48:53 +01:00
if (header->e_type != ET_DYN)
return (-5);
2020-01-01 14:19:18 +01:00
// Check ELF specifique instruction
2020-03-18 17:48:53 +01:00
if (header->e_machine != EM_SH)
return (-6);
2020-01-01 14:19:18 +01:00
// Check ELF version
2020-03-18 17:48:53 +01:00
if (header->e_version != EV_CURRENT)
return (-7);
2020-01-01 14:19:18 +01:00
return (0);
}