elf.c 827 B

123456789101112131415161718192021222324252627282930313233
  1. #include "elf.h"
  2. #include <common/unistd.h>
  3. #include <common/glib.h>
  4. /**
  5. * @brief 校验是否为ELF文件
  6. *
  7. * @param ehdr
  8. */
  9. bool elf_check(void *ehdr)
  10. {
  11. Elf32_Ehdr *ptr = (Elf32_Ehdr *)ehdr;
  12. 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;
  13. // 标头已经不符合要求
  14. if (!flag)
  15. return false;
  16. // 检验EI_CLASS是否合法
  17. if (ptr->e_ident[EI_CLASS] == 0 || ptr->e_ident[EI_CLASS] > 2)
  18. return false;
  19. // 检验EI_DATA是否合法
  20. if (ptr->e_ident[EI_DATA] == 0 || ptr->e_ident[EI_DATA] > 2)
  21. return false;
  22. // 检验EI_VERSION是否合法
  23. if(ptr->e_ident[EI_VERSION]==EV_NONE)
  24. return false;
  25. // 是elf文件
  26. return true;
  27. }