return 0;\r
if (Ehdr->e_ident[EI_DATA] != ELFDATA2LSB)\r
return 0;\r
- if (Ehdr->e_type != ET_EXEC)\r
+ if ((Ehdr->e_type != ET_EXEC) && (Ehdr->e_type != ET_DYN))\r
return 0;\r
if (Ehdr->e_machine != EM_386)\r
return 0;\r
Elf_Shdr *Shdr\r
)\r
{\r
- return (Shdr->sh_flags & (SHF_WRITE | SHF_ALLOC)) == SHF_ALLOC;\r
+ int Status;\r
+ int NotText = 1;\r
+ Status = (int)((Shdr->sh_flags & (SHF_WRITE | SHF_ALLOC)) == SHF_ALLOC);\r
+ if (Ehdr->e_type == ET_EXEC)\r
+ return Status;\r
+ else {\r
+ //\r
+ // this is a shared object file.\r
+ //\r
+ switch (Shdr->sh_type) {\r
+ case SHT_HASH:\r
+ case SHT_DYNSYM:\r
+ case SHT_STRTAB:\r
+ case SHT_REL:\r
+ case SHT_GNU_HASH:\r
+ NotText = 0;\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ return Status && NotText;\r
+ }\r
}\r
\r
int\r
Elf_Shdr *Shdr\r
)\r
{\r
- return (Shdr->sh_flags & (SHF_WRITE | SHF_ALLOC)) == (SHF_ALLOC | SHF_WRITE);\r
+ int Status;\r
+ Status = (Shdr->sh_flags & (SHF_WRITE | SHF_ALLOC)) == (SHF_ALLOC | SHF_WRITE);\r
+ return Status && !(Shdr->sh_type == (SHT_DYNAMIC));\r
}\r
\r
VOID\r