🆕 检测是否为elf文件

This commit is contained in:
fslongjin 2022-05-17 22:52:13 +08:00
parent d6ea8893e7
commit b0a7ec633d
2 changed files with 41 additions and 2 deletions

View File

@ -1 +1,33 @@
#include "elf.h" #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;
}

View File

@ -357,4 +357,11 @@ Values in this inclusive range are reserved for OS-specific semantics.
#define PF_MASKPROC 0xf0000000 // Unspecified #define PF_MASKPROC 0xf0000000 // Unspecified
// --> end ========== program header ========= // --> end ========== program header =========
/**
* @brief ELF文件
*
* @param ehdr
*/
bool elf_check(void * ehdr);