| 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
|
|
|