Index: courgette/disassembler_elf_32.cc |
diff --git a/courgette/disassembler_elf_32.cc b/courgette/disassembler_elf_32.cc |
index febcdeabef504e2c540c9d65dde763fbb093b776..3b7d83a887034373e7ed9752e1347476bc2957ae 100644 |
--- a/courgette/disassembler_elf_32.cc |
+++ b/courgette/disassembler_elf_32.cc |
@@ -605,4 +605,29 @@ CheckBool DisassemblerElf32::ParseRel32RelocsFromSections() { |
return true; |
} |
+bool DisassemblerElf32::QuickDetects(const uint8_t* start, |
+ size_t length, |
+ e_machine_values elf_em) { |
+ if (length < sizeof(Elf32_Ehdr)) |
+ return false; |
+ |
+ const Elf32_Ehdr* header = reinterpret_cast<const Elf32_Ehdr*>(start); |
+ |
+ // Have magic for ELF header? |
+ if (header->e_ident[0] != 0x7f || header->e_ident[1] != 'E' || |
+ header->e_ident[2] != 'L' || header->e_ident[3] != 'F') |
+ return false; |
+ |
+ if (header->e_type != ET_EXEC && header->e_type != ET_DYN) |
+ return false; |
+ if (header->e_machine != elf_em) |
+ return false; |
+ if (header->e_version != 1) |
+ return false; |
+ if (header->e_shentsize != sizeof(Elf32_Shdr)) |
+ return false; |
+ |
+ return true; |
+} |
+ |
} // namespace courgette |