Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(273)

Unified Diff: courgette/disassembler_elf_32.cc

Issue 2055343002: Courgette: Add static method QuickDetect() to optimize program detection. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698