2022-05-17 22:52:13 +08:00

34 lines
827 B
C

#include "elf.h"
#include <common/unistd.h>
#include <common/glib.h>
/**
* @brief 校验是否为ELF文件
*
* @param ehdr
*/
bool elf_check(void *ehdr)
{
Elf32_Ehdr *ptr = (Elf32_Ehdr *)ehdr;
bool flag = ptr->e_ident[EI_MAG0] == ELFMAG0 && ptr->e_ident[EI_MAG1] == ELFMAG1 && ptr->e_ident[EI_MAG2] == ELFMAG2 && ptr->e_ident[EI_MAG3] == ELFMAG3;
// 标头已经不符合要求
if (!flag)
return false;
// 检验EI_CLASS是否合法
if (ptr->e_ident[EI_CLASS] == 0 || ptr->e_ident[EI_CLASS] > 2)
return false;
// 检验EI_DATA是否合法
if (ptr->e_ident[EI_DATA] == 0 || ptr->e_ident[EI_DATA] > 2)
return false;
// 检验EI_VERSION是否合法
if(ptr->e_ident[EI_VERSION]==EV_NONE)
return false;
// 是elf文件
return true;
}